我正在Kubernetes中(在AKS上)部署一个简单的应用程序,该应用程序位于使用Nginx的Ingress后面,并使用Nginx掌舵图进行了部署。我有一个问题,由于某种原因,Nginx似乎没有将完整的URL传递给后端服务。
例如,我的Ingress的URL为http://app.client.com,而/ app1g的路径为http://app.client.com/app1可以正常工作。但是,如果我尝试去http://app.client.com/app1/service1,而我刚好在http://app.client.com/app1处,它似乎剥夺了路径之后的所有内容。
我的Ingress看起来像这样:
{{1}}
如果我转而使用该服务并直接点击该服务,那么它会起作用。
答案 0 :(得分:4)
所以我找到了答案。从Nginx v0.22.0开始,您似乎需要使用捕获组来捕获请求URI中的任何子字符串。在0.22.0之前,仅使用nginx.ingress.kubernetes.io/rewrite-target: /
可以处理任何子字符串。现在没有。我需要修改入口才能使用此功能:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
creationTimestamp: "2019-04-03T12:44:22Z"
generation: 1
labels:
chart: app-1.1
component: app
hostName: app.client.com
release: app
name: app-ingress
namespace: default
resourceVersion: "1789269"
selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/app-ingress
uid: 34bb1a1d-560e-11e9-bd46-9a03420914b9
spec:
rules:
- host: app.client.com
http:
paths:
- backend:
serviceName: app-service
servicePort: 8080
path: /app1/?(.*)
tls:
- hosts:
- app.client.com
secretName: app-prod
status:
loadBalancer:
ingress:
- {}
答案 1 :(得分:0)
删除此行应该可以解决您的问题:
nginx.ingress.kubernetes.io/rewrite-target: /
重写目标注释将完全按照其说明:重写您的请求以击中“ /”位置。参见nginx-ingress docs for rewrite target。