用入口重写Kubernetes中的URL

用入口重写Kubernetes中的URL,kubernetes,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,我正在将传统网站迁移到Kubernetes,这些网站使用的URL类似于,www.app2.com, 由于所有这些都部署在一个K8s集群中,所以我想使用类似www.myapp.com/app1等URL。但是当我访问时,它会路由到而不是 Try1: apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 nam

我正在将传统网站迁移到Kubernetes,这些网站使用的URL类似于www.app2.com,

由于所有这些都部署在一个K8s集群中,所以我想使用类似
www.myapp.com/app1
等URL。但是当我访问时,它会路由到而不是

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: /$1
  name: rewrite
spec:
  rules:
  - host: www.myapp.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /app1/?(.*)
apiVersion:extensions/v1beta1
种类:入口
元数据:
注释:
nginx.ingres.kubernetes.io/rewrite-target://2美元
nginx.ingres.kubernetes.io/configuration-snippet:rewrite^(/app1)$$1/永久;
名称:重写
规格:
规则:
-主持人:www.myapp.com
http:
路径:
-后端:
serviceName:http svc
服务端口:80
路径:/app1(/|$)(*)
这使我进入登录页面,但页面上的所有URL仍然有类似或的URL,而不是

看起来我必须在我的应用程序中做一些事情,但是我们不能在不更改应用程序代码的情况下在ingress中做一些事情吗

更新1: 入口日志: 在浏览器中,当我访问它时,它会打印以下日志

[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/app1
➡️ <代码>www.myapp.com/app1/login

因此,如果您希望在Ingress资源中有相同的行为,则必须删除
nginx.Ingress.kubernetes.io/rewrite target:
注释

然后在你的路径上,你可以有这样的东西:

apiVersion:extensions/v1beta1
种类:入口
元数据:
名称:重写
规格:
规则:
-主持人:www.myapp.com
http:
路径:
-后端:
serviceName:http svc
服务端口:80

路径:/app1是否可以改为尝试/app1/(.+)@Rohit没有改进,相同的结果请尝试此站点的选项。我自己也没试过。不过,你为什么不保留以前的主机名?@BogdanL现在我们想以这种方式公开我的答案是假设你想点击
www.myapp.com/app1/login
,而不是
www.myapp.com/login
哪一个?是的,正确,我想点击www.myapp.com/app1/login,但当我访问www.myapp.com/app1时,它会重定向到www.myapp.com/login,而不是www.myapp.com/app1/login,但在更新1中,你说你点击的是
www.myapp.com/login
“当我访问www.myapp.com/app1时,它会重定向到www.myapp.com/login”该重定向似乎来自应用程序本身,因此您可能需要让它知道路径中额外的
/app1
。或者您想点击
www.myapp.com/app1
,然后神奇地让它与
www.myapp.com/login
一起工作?这也行不通(除非你修改你的应用程序),当你使用
app2
时会发生什么?最好将域
www.myapp1.com
www.myapp2.com
分开。