【问题标题】:Kubernetes ingress-nginx rewrite without changing browser urlKubernetes ingress-nginx 重写而不更改浏览器 url
【发布时间】:2023-03-07 03:07:01
【问题描述】:

我们想在 site.abc.com 中加载 example.xyz.com。最好的方法是将所有请求从 site.abc.com 重定向/重写到 example.xyz.com。但是,我们不希望更改浏览器 URL。 From this similar SO problem 我们知道我们需要一个如下的 Nginx 位置配置

server {
    servername site.abc.com;
    listen        80;
    ....
    ....
    ....
    ....
    location / {                  
        proxy_pass  http://example.xyz.com;
        rewrite /(.*)$ /$1 break;
    }
}

但是,我不确定如何在 Kubernetes ingress-nginx 中创建类似的规则,因为它为每个规则添加了 proxy_pass,这会阻止我们在 nginx.ingress.kubernetes.io/configuration-snippet: 注释中添加 proxy_pass 配置。

还在 ingress 中提供nginx.ingress.kubernetes.io/rewrite-target: http://example.xyz.com/$1 注释,如下所示,重定向到 example.xyz.com 而不是在 site.abc 中加载 example.xyz.com .com.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: http://example.xyz.com/$1
  name: url-rewrite
  namespace: default
spec:
  rules:
  - host: site.abc.com
    http:
      paths:
      - backend:
          service:
            name: service
            port:
              number: 80
        path: /(.*)
        pathType: ImplementationSpecific

在这种情况下,我们如何在 site.abc.com 中加载 example.xyz.com 而不会使用 ingress-nginx 更改浏览器 URL?

【问题讨论】:

  • 你好@Mani。你有没有碰巧看到this solution
  • @WytrzymałyWiktor 我试过了,它正在工作。谢谢。
  • @WytrzymałyWiktor 对答案中提到的 SSL 重定向问题有何想法?
  • 你好@Mani。很高兴它有帮助。至于 SSL 重定向,为了清楚起见,我建议提出一个单独的问题。社区可以更轻松地帮助您。

标签: url kubernetes url-rewriting kubernetes-ingress nginx-ingress


【解决方案1】:

this solution 为参考,@WytrzymałyWiktor 指出,我能够进行更改并且效果很好。 这是更新的入口文件。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
      location ~ "^/(.*)" {
        proxy_pass http://example.xyz.com;
        rewrite /(.*)$ /$1 break;
      }
  name: url-rewrite
  namespace: default
spec:
  rules:
  - host: site.abc.com

虽然这里有一个问题是使 SSL 重定向工作。在某些情况下,目标(http://example.xyz.com) 将返回302 /some/other/path,在这种情况下http://site.abc.com 被重定向为http://site.abc.com/some/other/path。不知道如何使它重定向为https://site.abc.com/some/other/path。 设置nginx.ingress.kubernetes.io/ssl-redirect: "true"nginx.ingress.kubernetes.io/force-ssl-redirect: "true" 似乎不起作用。

将此添加为文档的答案,因为它对有类似问题的人有帮助。添加proxy_pass 时引用的解决方案地址不可能重复,而此地址是在不更改浏览器 URL 的情况下重写 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多