[英]k8s nginx ingress rewrite-target annotation not working as expected
在Minikube中运行,我具有以下入口以及所需的后端:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /config/
backend:
serviceName: api-gateway
servicePort: web
目的是为网关的Web UI提供服务,该Web UI期望路径为/
,否则假定它为逻辑路径,并尝试将请求转发到正确的微服务。
路径的重写未按我预期的方式工作。 它不会用/config/
代替/config/
/
。 我误会了这个例子吗?
在Nginx控制器的日志中,我看到:
192.168.99.1 - [192.168.99.1] - - [13/Dec/2017:08:54:11 +0000] "GET /config HTTP/1.1" 301 185 "-" "curl/7.55.1" 78 0.000 [-] - - - -
192.168.99.1 - [192.168.99.1] - - [13/Dec/2017:08:54:11 +0000] "GET /config/ HTTP/1.1" 404 154 "-" "curl/7.55.1" 79 0.010 [dev-api-gateway-web] 172.17.0.10:8080 143 0.010 404
这告诉我,对/config
的请求被重写为/config/
并导致404。
如何将/config
重写为/
?
您误解了这个例子。 使用您的配置请求,重写目标/
将被重写为/config/
,而不是相反。 因此,您需要切换路径:使用/config
作为重写目标,并在规则中设置/
路径。
因此,重写目标始终是外部请求所到达的位置,即对服务/吊舱的请求所到达的规则路径。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /config/(.+)
backend:
serviceName: api-gateway
servicePort: web
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.