通常,入口重写目标的工作方式如下:
nginx.ingress.kubernetes.io/rewrite-target: /
这将重写您的服务名称的目标,因为它们位于根目录中。如果我有这个:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: demo-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
rules:
http:
paths:
- path: /
backend:
serviceName: front-main
servicePort: 80
- path: /api
backend:
serviceName: back-main
servicePort: 80
我的服务将接收/
中的数据。但是,我希望我的服务front-main
发送根/
,并让服务器back-main
发送/someotherpath/
。我怎么能这样做?
是否有类似以下的内容?
nginx.ingress.kubernetes.io/rewrite-target: "front-main: / ; back-main: /someotherpath"
我似乎没有在文档中找到答案。
答案 0 :(得分:7)
不幸的是,基于免费版Nginx的Ingress没有这个功能。
但是,如果您可以使用Nginx Plus based Ingress,则可以通过注释来完成。
这是来自官方回购的example:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
nginx.org/rewrites: "serviceName=tea-svc rewrite=/;serviceName=coffee-svc rewrite=/beans/"
spec:
rules:
- host: cafe.example.com
http:
paths:
- path: /tea/
backend:
serviceName: tea-svc
servicePort: 80
- path: /coffee/
backend:
serviceName: coffee-svc
servicePort: 80
下面是如何重写tea-svc
的请求URI的示例(注意/ tea请求被重定向到/ tea /)。
/tea/ -> /
/tea/abc -> /abc
下面是如何重写coffee-svc
的请求URI的示例(注意/ coffee请求被重定向到/ coffee /)。
/coffee/ -> /beans/
/coffee/abc -> /beans/abc
答案 1 :(得分:1)
另一种解决方案是创建两个入口Yaml文件
每个使用不同的注释。可行!