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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM