【问题标题】:Kubernetes Ingress ROOT Path to Different ServiceKubernetes Ingress ROOT 不同服务的路径
【发布时间】:2020-11-12 21:54:05
【问题描述】:

我想将我的主机的某些路径路由到不同的后端。

假设我有 2 个后端服务:

  • 后端一
  • 后端二

所有请求最初都被路由到backend-one,如下例所示。

rules:
    - host: example.com
      http:
        paths:
          - path: /
            backend:
              serviceName: backend-one
              servicePort: 3000

现在,我将 backend-two 作为新服务,它应该为特定路径提供内容,但最重要的是 /(根)页面。

所以,我的目标是:

  • 路径 /、/abc、/xyz、/12345 将由 ====> backend-two(新服务)提供服务。
  • 其他一切由 backend-one 旧服务提供。

实现这一目标的最简单方法是什么?

【问题讨论】:

    标签: kubernetes nginx-ingress


    【解决方案1】:

    根据 Kubernetes CHANGELOG-1.18.md:

    在 Kubernetes 1.18 中,Ingress 有两个重要的新增功能:A 新的pathType 字段和新的IngressClass 资源。 pathType 字段允许指定路径应如何匹配。此外 默认ImplementationSpecific 类型,有新的Exact 和 Prefix 路径类型。

    您可以使用 Kubernetes 1.18+ 和 Path types 来实现您想要的。使用以下配置:

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: ingress
    spec:
      rules:
      - host: example.com
        http:
          paths:
          # Proxy to backend-two when the request is EXACT the root path
          - path: /
            pathType: Exact
            backend:
              serviceName: backend-two
              servicePort: 3000
          # Proxy specic paths (including subpaths) to backend-two
          - path: /abc
            pathType: Prefix
            backend:
              serviceName: backend-two
              servicePort: 3000
          - path: /xyz
            pathType: Prefix
            backend:
              serviceName: backend-two
              servicePort: 3000
          - path: /12345
            pathType: Prefix
            backend:
              serviceName: backend-two
              servicePort: 3000
          # If no rules above match, Proxy to backend-one
          - path: /
            pathType: Prefix
            backend:
              serviceName: backend-one
              servicePort: 3000
    

    请记住,您还可以使用Regular Expressions 来改进您的 Ingress 配置,以防您需要处理多个路径。

    【讨论】:

    • 这太棒了,正是我所需要的!谢谢爱德华多!
    • 嗨@AndreiGaspar 很高兴它成功了。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请参阅About 页面和What should I do when someone answers my question?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多