使用入口路由流量

Route traffic using ingress

一年前我有一个项目的工作示例,现在已经不工作了。

这基本上与此处提到的 nginx.ingress.kubernetes.io/rewrite-target 属性 的行为变化有关 - https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/rewrite

我有 3 个应用程序,我想根据条件进行路由。

一年前的工作示例是

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: frontend-cluster-ip-service
              servicePort: 3000
          - path: /api/connect4/
            backend:
              serviceName: connect-four-cluster-ip-service
              servicePort: 8080
          - path: /api/battleship/
            backend:
              serviceName: battleship-cluster-ip-service
              servicePort: 8080

但是,这不再有效,只能路由到 / ,即到 frontend-cluster-ip-service 正在工作。路由到其他服务失败,我收到 404。

然后我才知道nginx.ingress.kubernetes.io/rewrite-target的变化。

当时我试过

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: frontend-cluster-ip-service
              servicePort: 3000
          - path: /api/connect4(/|$)(.*)
            backend:
              serviceName: connect-four-cluster-ip-service
              servicePort: 8080
          - path: /api/battleship(/|$)(.*)
            backend:
              serviceName: battleship-cluster-ip-service
              servicePort: 8080

现在到 connect-four-cluster-ip-servicebattleship-cluster-ip-service 的路由正常,但 frontend-cluster-ip-service 不工作,很少有 js 文件加载显示错误:

我遇到了同样的问题,但重写有点复杂(只是针对一条不同的路径)。

为每条路径制作多个 Ingresses 对我有用,但可能不是最干净的解决方案。

我的入口定义: https://github.com/FORTH-ICS-INSPIRE/artemis/blob/master/artemis-chart/templates/ingresses.yaml