如何解决用Ingress在Kubernetes中重写URL
我正在将旧网站迁移到Kubernetes,该网站正在使用 www.app1.com , www.app2.com 这样的URL。
由于所有组件都部署在一个K8s集群中,因此我想使用诸如www.myapp.com/app1
之类的URL。但是当我访问 www.myapp.com/app1 时,它会路由到 www.myapp.com/login 而不是 www.myapp.com/app1/login
Try1:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
name: rewrite
spec:
rules:
- host: www.myapp.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /app1/?(.*)
我尝试了路径:/app1(.*),但是它总是以这种方式路由:
Try2:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/configuration-snippet: rewrite ^(/app1)$ $1/ permanent;
name: rewrite
spec:
rules:
- host: www.myapp.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /app1(/|$)(.*)
这使我进入登录页面,但是页面上的所有URL仍具有www.myapp.com/page1或 www.myapp.com/page2 之类的URL,而不是 www.myapp.com/app1/page1 或 www.myapp.com/app1/page2 。
看起来我必须在我的应用程序中做些什么,但是我们不能在不更改应用程序代码的情况下在入口中做些什么吗?
更新1: 入口日志: 在浏览器中,当我访问www.myapp.com/app1时,它会显示以下日志
[13/Aug/2020:21:19:25 +0000] "GET /app1 HTTP/2.0" 303 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.105 Safari/537.36" 503 0.005 [my-ns-http-svc-80] [] x.x.x.x:80 5 0.005 303 d5da4ff09ee26c83fe67519c98f5eb50
,在浏览器中它会显示404错误,并且在URL栏中URL为 www.myapp.com/login
解决方法
您的应用中似乎发生了以下重定向:
www.myapp.com/app1
➡️www.myapp.com/app1/login
因此,如果您希望Ingress资源具有相同的行为,则必须删除nginx.ingress.kubernetes.io/rewrite-target:
批注。
然后在您的路径上,您可能会遇到类似这样的事情:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rewrite
spec:
rules:
- host: www.myapp.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /app1 ? Handles the initial request
- backend:
serviceName: http-svc
servicePort: 80
path: /app1/.* ? Handles the redirect your app is doing.
✌️
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。