通过Kubernetes集群中的入口控制器访问多个Web前端

时间:2020-03-10 11:27:14

标签: docker kubernetes frontend

我有一个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。

1 个答案:

答案 0 :(得分:1)

您的路径配置为/myapp2/(.*),因此myapp.com/myapp2与之不匹配。

现在myapp.com/myapp2myapp1-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的免费版本上,它有点复杂。

希望有帮助。

相关问题