使用入口路由流量

时间:2019-08-11 15:41:09

标签: kubernetes kubernetes-ingress

一年前,我有一个可行的项目示例,该项目不再有效。

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

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

  • /*到frontend-cluster-ip-service
  • /api/battleship/*到Battleship-cluster-ip-service
  • /api/connect4/*到connect-four-cluster-ip-service

一年前工作的例子是

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: /$2
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文件加载显示错误:

enter image description here

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,只是重写更加复杂(仅适用于一条不同的路径)。

为每个路径创建多个Ingress对我来说很有效,但可能不是最干净的解决方案。

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