我们运行一个托管数据库、各种微服务和 nginx
的 Kubernetes 集群。反向代理,全部在容器中。我们有一个谷歌 load balancer以及转发到反向代理的转发规则,并从那里将请求代理到适当的微服务。
这很好用,但是反向代理永远不会显示连接到它的客户端的 IP 地址。 (尽管 this documentation 表明可以通过 HTTP header 获取此信息,但我们运气不佳,只能在 GCP default
网络上看到 IP。)
根据另一个 SO question 中的建议 - 我暂时放错了链接 - 我想部署 nginx
而是在 VM 实例上,它确实可以访问连接客户端的 IP,然后将来自该实例的请求转发到集群中。
那么我的问题是:每个微服务都监听一个 TCP 端口并且有一个 k8s Service
配置。如何引用这些k8s Service
来自我的nginx
虚拟机?我可以通过 DNS 或入口 Controller 来实现吗?
或者,如果您实际上可以确定 Google 负载均衡器背后的外部 IP 地址,我宁愿这样做。我记得读过一篇很长的关于它的 k8s GitHub 问题,表明那还有一段路要走。
最佳答案
您要查找的内容称为 http proxy protocol
https://www.nginx.com/resources/admin-guide/proxy-protocol/
请注意,必须将 google 负载均衡器和您的 nginx 配置为同时使用代理协议(protocol)。
如果其中一个正在使用代理协议(protocol),而另一个不使用,则不会有任何效果。
关于kubernetes - GCP:Kubernetes 集群前虚拟机上的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47038275/