我尝试使用kubernetes和gcloud
重写目标,但似乎并没有得到尊重。我的代码如下。也许还有一些我没见过的东西:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: demo-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.global-static-ip-name: projectip
spec:
rules:
- host: mycustomdomain.com
http:
paths:
- path: /*
backend:
serviceName: frontend
servicePort: 80
- path: /api/*
backend:
serviceName: backend
servicePort: 80
当我curl mycustomdomain.com/api/something
时,我的后端总是收到backend/api/something
而不是backend/something
。我真的没有想法,我可以使用一些帮助。
答案 0 :(得分:1)
我假设你正在使用kubernetes ingress-nginx。
查看您的入口清单,似乎重写注释是错误的。
根据文件,我应该: nginx.ingress.kubernetes.io/rewrite-target
这是指向文档的链接:
https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/annotations.md#rewrite
答案 1 :(得分:1)
术语rewrite-target
具有误导性:它与传入请求的路径有关。
这可能有效:只使用一个入口rewrite-target: /
和path: /
作为前端,一个入口仅使用rewrite-target: /api
和path: /
作为后端。
答案 2 :(得分:1)
如果您已经使用helm安装了nginx ingress,则还可以查看helm chart目录中的重写示例。可以在<helm-chart-directory>/examples/rewrite
上找到。应该有一个README.md会有所帮助。
在我的情况下,必需的注释为nginx.org\rewrite:"<service-name-1>:<rewrite-target-1>;<service-name-2>:<rewrite-target-2>"