具有多目标重写的kubernetes入口
通常,ingress重写目标的工作方式如下:具有多目标重写的kubernetes入口,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,通常,ingress重写目标的工作方式如下: nginx.ingress.kubernetes.io/rewrite-target: / 这将重写服务名称的目标,因为它们位于根目录中。如果我有这个: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: demo-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec:
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
我的服务将接收/
中的数据。但是,我想让我的服务前端main
发送根/
,让服务器后端main
发送/someotherpath/
。我该怎么做
有类似下面这行的东西吗
nginx.ingress.kubernetes.io/rewrite-target: "front-main: / ; back-main: /someotherpath"
我似乎在文档中找不到答案。不幸的是,基于Nginx免费版本的入口没有该功能 但是,如果可以使用,可以通过注释来实现 以下是一份来自官方回购协议的报告:
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/)
下面是如何重写coffee svc
请求的URI的示例(请注意,/coffee请求被重定向到/coffee/)
另一个解决方案是创建两个入口yaml文件
每个都使用不同的注释。它起作用了 事实上,我以前使用过nginxinc/kubernetes-ingres,但我希望有更好的解决方案。由于发布了这篇文章,Nginx-ingres 0.22.0发布了一个新的重定向语法()。我认为OP的问题现在可以通过选择正确的捕获组来解决。也许安东的例子也可以用两个单独的入口和两个不同的重写规则来解决。有人已经发现了如何用这种新语法来解决这个问题吗?有工作实例吗?看看如何使用同一台主机来实现这一点将是有益的。在野外有这样的例子吗@JuanEnciso你能详细说明这是如何实现的吗?我希望它可以在同一个“主机”上完成,我不想让我的API在一个单独的端点上。在这个场景中。对不起,再看一遍,是的,我刚让它工作起来。负载均衡器IP应该保持不变,只是更好地重定向流量。我真的应该想一想,这些只是在另一个服务中将配置传递给nginx,真的。
/tea/ -> /
/tea/abc -> /abc
/coffee/ -> /beans/
/coffee/abc -> /beans/abc