【问题标题】:Access multiple web-frontends through an ingress controller within a Kubernetes cluster通过 Kubernetes 集群中的入口控制器访问多个 Web 前端
【发布时间】:2020-03-10 22:23:41
【问题描述】:

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

【问题讨论】:

  • 你试过删除(.*)吗?
  • 您可以通过myapp.com/myapp2/ 访问吗?注意最后的/myapp.com/myapp2 与您配置的路径不匹配。

标签: docker kubernetes frontend


【解决方案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 上会稍微复杂一些。

希望对你有帮助。

【讨论】:

  • 哇,我一直认为 URl 末尾的斜线无关紧要。我仍然得到一个 JSON 说“找不到对象”而不是实际的前端,但我认为这是一个不同的问题。
猜你喜欢
  • 2020-07-06
  • 2021-01-30
  • 2021-05-03
  • 2022-07-04
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
相关资源
最近更新 更多