无法通过云 NAT 访问 LB

无法通过云 NAT 访问 LB

我们在 GCP 上运行私有 GKE 集群。我们的服务通过 nginx-ingress 和 service.yaml 定义中的 TCP LB 白名单向互联网公开。

我们的一个 Pod 正在尝试通过公共 LB 访问另一个 Pod。(我知道这不是最佳做法,但让我们假设应用程序只需要以这种方式工作,并且我们无法处理集群通信。)

我还将 NAT 静态 IP 添加到 LB 白名单,并且我可以将该 IP 视为连接到 GKE 节点的防火墙规则。

我尝试调试该问题的方法:

创建新实例,安装 nginx,并通过添加防火墙规则仅允许来自 NAT IP 的连接。我还尝试将 tcp LB 连接到此 nginx 实例,从 pod A 和 B 访问 nginx 示例页面都没有问题。

当我尝试从其他白名单源连接到 pod 时,我完全没有遇到任何问题。

答案1

由于 kube-proxy 不遵循代理协议,集群内的 nginx 永远不会知道它需要阻止或允许的真实公共 IP。

NGINXingress 不使用服务 (kube-proxy) 将流量路由到 pod。相反,它使用 Endpoints API。因此,使用代理协议应该可行,但您还需要使用配置图

不过,需要有堡垒主机才能通过 SSH 进入您的实例。检查您是否创建了允许 SSH 连接的防火墙规则。检查您是否遵循此文档中的说明:格克纳特

相关内容