用Inress重写Kubernetes中的URL [英] Rewrite URL in Kubernetes with Ingress

查看:12
本文介绍了用Inress重写Kubernetes中的URL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将旧网站迁移到Kubernetes,这些网站使用的URL包括www.app1.comwww.app2.com、

因为所有的都部署在一个K8S集群中,所以我想使用www.myapp.com/app1之类的URL。但当我访问www.myapp.com/app1时,它会转到www.myapp.com/login,而不是www.myapp.com/app1/login

try 1:

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/page1www.myapp.com/page2的URL,而不是www.myapp.com/app1/page1www.myapp.com/app1/page2

看起来我必须在我的应用程序中执行一些操作,但我们不能在不更改应用程序代码的情况下在Inress中执行一些操作吗?

更新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

因此,如果您希望在Inress资源中执行相同的行为,则必须删除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.

✌️

这篇关于用Inress重写Kubernetes中的URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆