【发布时间】:2020-08-14 14:51:46
【问题描述】:
我正在将旧网站迁移到 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
试一试:
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.
看起来我必须在我的应用程序中做一些事情,但我们不能在不更改应用程序代码的情况下在 ingress 中做一些事情吗?
更新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
【问题讨论】:
-
你可以试试 /app1/(.+) 吗?
-
@Rohit 没有改善,结果相同
-
试试这个网站的选项。我自己没有尝试过。 linuxrecruit.co.uk/…
-
你为什么不保留以前的主机名呢?
-
@BogdanL 现在我们要公开这种方式
标签: kubernetes kubernetes-ingress nginx-ingress