gpt4 book ai didi

kubernetes - 如何在 Kubernetes 中使用 nginx-ingress 正确重定向

转载 作者:行者123 更新时间:2023-12-05 04:52:00 27 4
gpt4 key购买 nike

我是 kubernetes 和 nginx 的新手,无法理解如何为我的特定用例实现 Ingress (nginx-ingress)。

我想从我的集群中公开 pgadmin PostgreSQL 管理工具。

我的集群中有其他应用程序通过 nginx-ingress 公开,我喜欢每个应用程序都卡在自己的子目录下,例如:

  • myserver.com/purchasing/index.html
  • myserver.com/sales/index.html

我在使用 pgadmin 时遇到问题(尽管这个问题无疑同样适用于以相同方式运行的其他应用程序)

我已经设置了一个 Ingress 规则来相应地捕获和路由:

  annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2

rules:
- http:
paths:
- path: /pgadmin4(/|$)(.*)

它执行路由并命中后端。

然而,当 pgadmin 然后进行重定向时,我从重定向 URl 中丢失了 pgadmin/,即

  • 我将 GET 发送到 myserver.com/pgadmin
  • 我收到 302 重定向到 myserver.com/login

而我想重定向到:

  • myserver.com/pgadmin/login

实现此目标我缺少哪些部分 - 感觉它应该很简单?

谢谢

最佳答案

值得一提的是,就安全性而言,使用同一域名公开许多不同的服务可能不是最好的主意。许多网络安全机制依赖域名来确定什么是可信的,什么不是。因此,如果您的一个容器遭到破坏,共享同一域名的其他服务可能会受到影响。

无论如何,问题出在 pgadmin 上。它不知道它是从 myserver.com/pgadmin/ 提供服务的(这也是让多个服务使用相同域名不是最好主意的另一个原因),因此它发送了错误的重定向。

幸运的是,pgadmin documentation提供解决方案:

If you wish to host pgAdmin under a subdirectory rather than on the root of the server, you must specify the location and set the X-Script-Name header which tells the pgAdmin container how to rewrite paths:

server {
listen 80;
server_name _;

location /pgadmin4/ {
proxy_set_header X-Script-Name /pgadmin4;
proxy_set_header Host $host;
proxy_pass http://localhost:5050/;
proxy_redirect off;
}
}

所以看起来您只需要确保对 pgadmin 的调用是使用 X-Script-Name/pgadmin4 header 发送的,这是 nginx ingress controller knows how to do 的内容.

关于kubernetes - 如何在 Kubernetes 中使用 nginx-ingress 正确重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66636366/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com