我有一个Kubernetes集群,其中有两个提供Web前端的应用程序,我想通过NGINX入口控制器使它们都可访问。这是我的ingress.yaml的相关部分:
tls:
- hosts:
- myapp.com
secretName: my-certificate
rules:
- host: myapp.com
http:
paths:
- backend:
serviceName: myapp2-service
servicePort: 12345
path: /myapp2/(.*)
- backend:
serviceName: myapp1-service
servicePort: 80
path: /(.*)
通过此设置,我可以通过URL myapp.com到达myapp1的前端。当我将其更改为
paths:
- backend:
serviceName: myapp2-service
servicePort: 12345
path: /(.*)
- backend:
serviceName: myapp1-service
servicePort: 80
path: /(.*)
我可以通过URL myapp.com到达myapp2的前端。
我想要实现的是,我可以通过myapp.com和前端myapp.com/myapp2到达myapp1的前端。那可能吗?如果是这样,我的错误在哪里?就像我说的那样,myapp2的前端基本上可以访问,而不仅仅是通过子URL。
答案 0 :(得分:1)
您的路径配置为/myapp2/(.*)
,因此myapp.com/myapp2
与之不匹配。
现在myapp.com/myapp2
去myapp1-service
寻找/myapp2
的内容。
您可以在最后将/
配置为可选。但这会影响与myapp2
匹配的其他路径字符串。
tls:
- hosts:
- myapp.com
secretName: my-certificate
rules:
- host: myapp.com
http:
paths:
- backend:
serviceName: myapp2-service
servicePort: 12345
path: /myapp2(/|$)(.*)
- backend:
serviceName: myapp1-service
servicePort: 80
path: /(.*)
也可以将myapp.com/myapp2
重写为myapp.com/myapp2/
,但是在Nginx Ingress的免费版本上,它有点复杂。
希望有帮助。