Nat*_*tan 15 nginx kubernetes nginx-ingress
我正在尝试重写服务的路径,同时在 kubernetes 上使用 nginx 入口保留浏览器 URL。
我需要的是这样的:
http://example.com/path=>http://servicehttp://example.com/path/bar=>http://service/barhttp://example.com/path/file.css=>http://service/file.css也就是说,使其/path成为上游服务器中的根(或某个不同的 url)。
从我在这里看到的,这是使用 proxy_pass 上的尾部斜杠来完成的,但 nginx ingress 似乎没有这个选项。
这可能是 nginx 入口吗?
小智 14
Nginx Ingress 可以吗?
是的,为了实现它,您可以使用rewrite-target.
它将创建一个捕获组并将其发送到适当的服务。这是一个 Ingress 示例:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: "rewrite"
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http: example.com
paths:
- path: /foo(/|$)(.*)
backend:
serviceName: echo-svc
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
在此入口定义中,捕获的任何字符都
(.*)将分配给占位符$2,然后将其用作注释中的参数rewrite-target。
该入口将执行以下操作:
在 NGINX 中,正则表达式遵循首次匹配策略。为了实现更准确的路径匹配,ingress-nginx 首先按长度降序对路径进行排序,然后将它们作为位置块写入 NGINX 模板。
例子:
$ kubectl apply -f echo-ingress.yaml
ingress.networking.k8s.io/echo-ingress created
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
echo-ingress mydomain.com 35.188.7.149 80 48s
$ tail -n 1 /etc/hosts
35.188.7.149 mydomain.com
$ curl mydomain.com/foo/bar
{"path": "/bar",
...suppressed output...
"os": {"hostname": "echo-deploy-764d5df7cf-6m5nz"}
}
$ curl mydomain.com/foo
{"path": "/",
"os": {"hostname": "echo-deploy-764d5df7cf-6m5nz"}
}
Run Code Online (Sandbox Code Playgroud)
如果您有任何疑问,请在评论中告诉我。
| 归档时间: |
|
| 查看次数: |
44849 次 |
| 最近记录: |