kubernetes ingress 重定向地址错误
环境:
有两个 kubernetes 集群:
一个版本为1.11,后面使用A集群代替,ingress 镜像版本为 0.19(quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.19.0)
一个版本为1.16,后面使用B集群代替,ingress 镜像版本为 0.26.1
问题:
pod 中有一个 http 接口为 /v1 该路由地址(使用flask)。发现在同样的 ingress 配置(如下)。A集群中能访问 /webtest/v1,B集群为 404 错误
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: webtest
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- http:
paths:
- path: /webtest
backend:
serviceName: webtest
servicePort: 80
初步排查为 nginx 路由的地址错误,查看 ingress pod 详细日志发现,在 A集群中,访问地址为 /v1,而在 B集群中访问地址为 /
备注:ingress 中使用了重定向,目的是期望在匹配路径的时候将 /webtest 去掉
继续查看 ingress pod 中的 nginx 配置,发现有如下差异
在 A集群 中
...
location ~* ^/webtest\/?(?<baseuri>.*){}
...
在 B集群 中
...
location ~* "^/webtest/"{}
...
解决方案:
在 B集群(新版的ingress) 中,使用以下方式配置 ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: webtest
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- http:
paths:
- path: /webtest/(.+)
backend:
serviceName: webtest
servicePort: 80

浙公网安备 33010602011771号