不同服务的 Kubernetes 入口 ROOT 路径

And*_*par 5 kubernetes nginx-ingress

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

假设我有 2 个后端服务:

  • 后端一
  • 后端二

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

rules:
    - host: example.com
      http:
        paths:
          - path: /
            backend:
              serviceName: backend-one
              servicePort: 3000
Run Code Online (Sandbox Code Playgroud)

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

所以,我的目标如下:

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

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

Edu*_*llo 10

根据 Kubernetes CHANGELOG-1.18.md

在 Kubernetes 1.18 中,Ingress 有两个重要的新增内容:一个新pathType字段和一个新IngressClass资源。该pathType 字段允许指定路径应如何匹配。除了默认ImplementationSpecific类型外,还有新类型ExactPrefix路径类型。

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

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
Run Code Online (Sandbox Code Playgroud)

请记住,如果您有多个路径需要处理,您还可以使用正则表达式来改进您的 Ingress 配置。

  • 嗨@AndreiGaspar 很高兴它有效。请注意,在这里说“谢谢”的首选方式是对好问题和有帮助的答案进行投票(一旦您有足够的声誉可以这样做),并接受对您提出的任何问题最有帮助的答案(这也给出了您的声誉会得到小小的提升)。请参阅[关于]页面,以及[当有人回答我的问题时我该怎么办?](https://stackoverflow.com/help/someone-answers) (2认同)