从GCP kubernetes负载平衡器到App Engine服务的IP错误

时间:2018-09-15 14:20:28

标签: kubernetes google-cloud-platform google-kubernetes-engine

我在位于GCP上的kubernetes集群中的nginx pod遇到了一些麻烦,该集群应该能够访问位于应用引擎上的服务。

我在应用程序引擎中设置了防火墙规则以拒绝所有防火墙,并且只允许某些IP,但是击中我的应用程序引擎服务的IP不是我的Nginx负载均衡器的IP,而是某个节点之一的IP的集群。

一张图片胜过1000个字,这是我们的体系结构图片:

enter image description here

问题是:击中应用程序引擎防火墙的IP是IP A,而我以为我是IPB。每次我杀死/创建群集时,IP A都会更改。如果是IP B,我可以轻松地在App引擎的防火墙规则中打开该IP,因为我已将其设为静态。任何人都知道如何拥有IP B而不是IP A吗?

谢谢

1 个答案:

答案 0 :(得分:1)

分配给您的nginx“负载均衡器”的IP地址(可能)不是Kubernetes集群拥有或管理的IP。 GKE中类型为LoadBalancer的服务使用Google Cloud Load Balancers。这些是外部抽象,可终止Google前端基础架构中的入站连接,并将流量传递到群集中的各个k8s节点,以继续传递给您的k8s托管服务。

默认情况下,Kubernetes集群中的Pod将使用其主机节点的配置将出口流量路由出集群。在GKE中,此路由对应于其中存在群集(并扩展为Compute Engine实例)的VPC的网关。群集节点的公共IP将随着它们在池中的添加和删除而改变。

一种解决方法是使用带有静态外部IP的专用实例来处理离开您的VPC的出口流量(即,来自群集的出口)。 Google为此提供了一个教程:https://cloud.google.com/solutions/using-a-nat-gateway-with-kubernetes-engine

有k8s本机解决方案,但由于无法使用非临时公共IP维护任何节点,因此目前在GKE环境中不适用。