我正在将minikube与nginx入口一起使用。
我正在尝试使用this这样的网址重写
这是我的入口定义:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: config-reader-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
backend:
serviceName: default-http-backend
servicePort: 80
rules:
- host: microservices.info
http:
paths:
- path: /reload(/|$)(.*)
backend:
serviceName: spring-cloud-reload
servicePort: 8080
- path: /upload(/|$)(.*)
backend:
serviceName: spring-cloud-upload
servicePort: 8080
以下网址是这样重写的:
/reload
至/
/reload/xyx
至/xyz
这很好。但是
/reload/x/y
重写为/x//
而不是/x/y
也
/reload/x/y/
重写为/x/y//
而不是/x/y/
minikube版本:v0.35.0
如何解决多路径元素的情况?
更新
-------------------------------------------------------------------------------
NGINX Ingress controller
Release: 0.21.0
Build: git-b65b85cd9
Repository: https://github.com/aledbf/ingress-nginx
-------------------------------------------------------------------------------
答案 0 :(得分:1)
nginx-ingress v0.22.0之前的版本存在一个已知问题,带有尾部斜杠。
要检测正在运行哪个版本的入口控制器,请在pod中执行并运行nginx-ingress-controller version命令。
kubectl exec -it $POD_NAME -- /nginx-ingress-controller --version
-------------------------------------------------------------------------------
NGINX Ingress controller
Release: 0.24.1
Build: git-ce418168f
Repository: https://github.com/kubernetes/ingress-nginx
-------------------------------------------------------------------------------
重写目标注释对于尾部斜杠非常敏感。如果不存在,该请求将不会被重写。
因此,您应始终以/reload/x/y/
的形式提供url
另一个带有重复斜杠的问题(在v 0.22.0及更高版本中已修复)。
为了了解那里发生的事情,您可以执行到入口控制器窗格,找到/etc/nginx/nginx.conf
并搜索
set $location_path "/reload(/|${literal_dollar})(.*)";
或
rewrite "(?i)/reload(/|$)(.*)" /$2 break;
块
要修复此问题,请将入口控制器版本更新为最新版本,或者也可以使用configuration-snippet批注:
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite (?i)/reload/x/y/ /x/y break;