一年前,我有一个可行的项目示例,该项目不再有效。
这基本上与此处提到的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-service
和battleship-cluster-ip-service
的路由有效,但是frontend-cluster-ip-service
无效,并且几乎没有js文件加载显示错误:
答案 0 :(得分:1)
我遇到了同样的问题,只是重写更加复杂(仅适用于一条不同的路径)。
为每个路径创建多个Ingress对我来说很有效,但可能不是最干净的解决方案。
我的入口定义: https://github.com/FORTH-ICS-INSPIRE/artemis/blob/master/artemis-chart/templates/ingresses.yaml