我在位于GCP上的kubernetes集群中的nginx pod遇到了一些麻烦,该集群应该能够访问位于应用引擎上的服务。
我在应用程序引擎中设置了防火墙规则以拒绝所有防火墙,并且只允许某些IP,但是击中我的应用程序引擎服务的IP不是我的Nginx负载均衡器的IP,而是某个节点之一的IP的集群。
一张图片胜过1000个字,这是我们的体系结构图片:
问题是:击中应用程序引擎防火墙的IP是IP A,而我以为我是IPB。每次我杀死/创建群集时,IP A都会更改。如果是IP B,我可以轻松地在App引擎的防火墙规则中打开该IP,因为我已将其设为静态。任何人都知道如何拥有IP B而不是IP A吗?
谢谢
答案 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环境中不适用。