Ingress会根据请求调用随机服务,还会调用根(/)。我需要进入以调用配置服务中指定的入口,并将完整路径发送到服务(我使用MVC模式,因此我需要为应用程序提供完整路径以解析正确的控制器)
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: whatever
annotations:
ingress.kubernetes.io/add-base-url: "true"
ingress.kubernetes.io/rewrite-target: "/"
kubernetes.io/ingress.class: "gce"
kubernetes.io/ingress.global-static-ip-name: "my-static-ip-name"
spec:
tls:
- secretName: my-tls-secret
hosts:
- whatever.my-awesome-project.com
rules:
- host: whatever.my-awesome-project.com
http:
paths:
- path: /api/whatever
backend:
serviceName: whatever-service
servicePort: 80
- path: /api/not-whatever
backend:
serviceName: not-whatever-service
servicePort: 80
- path: /images/*
backend:
serviceName: not-whatever-service
servicePort: 80
答案 0 :(得分:0)
根据我在您的问题中看到的内容:
1)您正在尝试将rewrite-target
入口使用gce
->这将无法工作。 rewrite-target是Nginx入口控制器功能。顺便说一句,从0.22.0版本开始,您应该use nginx.ingress.kubernetes.io/rewrite-target: "/"
而不是ingress.kubernetes.io/rewrite-target: "/"
2)注释add-base-url在0.22.0中已删除。这也是nginx注释,而不是gce。更多信息here和here。
3)另外,如果您希望使用正确的路径,我相信您不需要rewrite-target
注释
从我的战俘那里应该是这样的:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: whatever
annotations:
kubernetes.io/ingress.class: "nginx"
kubernetes.io/ingress.global-static-ip-name: "my-static-ip-name"
spec:
tls:
- secretName: my-tls-secret
hosts:
- whatever.my-awesome-project.com
rules:
- host: whatever.my-awesome-project.com
http:
paths:
- path: /api/whatever
backend:
serviceName: whatever-service
servicePort: 80
- path: /api/not-whatever
backend:
serviceName: not-whatever-service
servicePort: 80
- path: /images/*
backend:
serviceName: not-whatever-service
servicePort: 80
很多事情取决于您使用的入口和版本。您有可能迁移到Nginx吗?