我在AKS上有两个ClusterIP
服务和一个入口控制器ingress-nginx-4.6.1
,当我尝试使用以下配置将流量路由到每个服务时,我得到404。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: spark-ingress
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: nginx
tls:
- hosts:
- spark.company.net
secretName: tls-secret
rules:
- host: spark.company.net
http:
paths:
- path: /service1(/|$)(.*)
pathType: Prefix
backend:
service:
name: service-1
port:
number: 443
- path: /service2(/|$)(.*)
pathType: Prefix
backend:
service:
name: service-2
port:
number: 443
kubectl describe ing
的输出是:
Name: spark-ingress
Labels: <none>
Namespace: apache-spark
Address: 10.0.0.0
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS:
tls-secret terminates spark.company.net
Rules:
Host Path Backends
---- ---- --------
spark.company.net
/service1(/|$)(.*) service-1:443 (100.64.101.8:4440)
/service1(/|$)(.*) service-2:443 (100.64.101.0:4440)
Annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: true
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 2m9s (x3165 over 26h) nginx-ingress-controller Scheduled for sync
Normal Sync 2m9s (x3165 over 26h) nginx-ingress-controller Scheduled for sync
值得注意的是,后端应用程序是开源的spark。所以点击应用程序时的默认行为是302重定向到/jobs/
。我还想指出的是,当我为路径/
上的一个服务(不管是哪个)定义ing时,它工作得很好。我需要为多个服务执行此操作。任何帮助将不胜感激。
1条答案
按热度按时间mm5n2pyu1#
问题是我的后端应用程序(Apache Spark)正在向客户端发送重定向。因此客户端现在请求的是
http://baseurl/resource
而不是http://baseurl/service1/resource
修复方法是将以下属性添加到spark-submit
对于所有的重定向,spark ui现在将使用service 1作为base,inginx对此有一个规则并且知道如何处理。