sil*_*gon 6 kubernetes kubernetes-ingress
通常,入口重写目标的工作方式如下:
nginx.ingress.kubernetes.io/rewrite-target: /
Run Code Online (Sandbox Code Playgroud)
这将重写您的服务名称的目标,因为它们位于根目录中.所以,如果我有这个:
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
Run Code Online (Sandbox Code Playgroud)
我的服务将接收数据/.但是,我希望我的服务front-main发送root /和服务器back-main发送/someotherpath/.我怎样才能做到这一点?
有类似下面的行吗?
nginx.ingress.kubernetes.io/rewrite-target: "front-main: / ; back-main: /someotherpath"
Run Code Online (Sandbox Code Playgroud)
我似乎没有在文档中找到答案.
小智 13
另一个解决方案是创建两个 ingress yaml 文件
每一个都使用不同的注释。有用!
不幸的是,基于免费版Nginx的Ingress没有这个功能.
但是,如果你可以使用基于Nginx Plus的Ingress,你可以通过注释来实现.
以下是官方回购的示例:
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
Run Code Online (Sandbox Code Playgroud)
下面是如何tea-svc重写对请求的URI的示例(注意/ tea请求被重定向到/ tea /).
/tea/ -> /
/tea/abc -> /abc
Run Code Online (Sandbox Code Playgroud)
下面是如何coffee-svc重写对请求的URI的示例(注意/ coffee请求被重定向到/ coffee /).
/coffee/ -> /beans/
/coffee/abc -> /beans/abc
Run Code Online (Sandbox Code Playgroud)
重写注释的新语法允许您使用捕获组来定义rewrite-target,这可以在某些情况下用于实现您正在寻找的内容。
例如,如果您希望其中一项服务在其重写中保留匹配的 url ,而不是其他服务,则可以使用匹配组,如下所示:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-ingress
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1$2 # Here we concatenate the two matched groups
spec:
rules:
- http:
paths:
- path: /front()(.*) # Here the first matching group is always empty
pathType: Prefix
backend:
service:
name: front-main
port:
number: 80
- path: /(back)(.*) # Here the first matching group matches 'back'
pathType: Prefix
backend:
service:
name: back-main
port:
number: 80
Run Code Online (Sandbox Code Playgroud)
因此/back/foo会重定向到back-serviceon /back/foo,但/front/foo会重定向到front-servicesimple to /foo。
据我所知,这不能用于您要求的更一般的情况,例如重写/back/foo为/some-completely-different-path.
| 归档时间: |
|
| 查看次数: |
3870 次 |
| 最近记录: |