使用入口路由流量
Route traffic using 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: /
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-service
和 battleship-cluster-ip-service
的路由正常,但 frontend-cluster-ip-service
不工作,很少有 js 文件加载显示错误:
我遇到了同样的问题,但重写有点复杂(只是针对一条不同的路径)。
为每条路径制作多个 Ingresses 对我有用,但可能不是最干净的解决方案。
我的入口定义:
https://github.com/FORTH-ICS-INSPIRE/artemis/blob/master/artemis-chart/templates/ingresses.yaml
一年前我有一个项目的工作示例,现在已经不工作了。
这基本上与此处提到的 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: /
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-service
和 battleship-cluster-ip-service
的路由正常,但 frontend-cluster-ip-service
不工作,很少有 js 文件加载显示错误:
我遇到了同样的问题,但重写有点复杂(只是针对一条不同的路径)。
为每条路径制作多个 Ingresses 对我有用,但可能不是最干净的解决方案。
我的入口定义: https://github.com/FORTH-ICS-INSPIRE/artemis/blob/master/artemis-chart/templates/ingresses.yaml