我如何在Kubernetes群集(GKE)中创建Pod以使用节点的IP地址与群集外的VM通信

时间:2019-05-14 07:36:20

标签: networking google-cloud-platform google-kubernetes-engine firewall vpn

我已经使用GK​​E服务在Google Cloud上创建了Kubernetes集群。

GCP环境具有一个VPC,该VPC使用VPN连接到本地网络。 GKE群集是在同一VPC的子网(例如subnet1)中创建的。子网1中的VM能够通过其内部(专用)IP地址与本地终结点计算机进行通信。整个子网的IP地址范围(10.189.10.128/26)已在本地防火墙中列入白名单。

GKE Pod使用分配给它们的辅助IP地址中的IP地址(10.189.32.0/21)。我在其中一个Pod中执行了exec,并尝试访问内部部署网络,但无法获得响应。当我检查网络日志时,我发现源ip是Pod的IP(10.189.37.18),该IP用于与本地终结点(10.204.180.164)进行通信。我希望Pod应该在哪里使用节点的IP地址与本地端点进行通信。

已经为Pods完成了部署,并且该部署作为ClusterIP服务公开。该服务已附加到GKE入口。

1 个答案:

答案 0 :(得分:0)

我发现IP伪装应用于GKE群集,因此当您的Pod一起聊天时,他们看到的是真实IP,但是如果一个Pod与互联网上的资源交谈,则会使用节点IP。

此规则在GKE上的默认配置为:10.0.0.0/8 因此,该范围内的任何IP均被视为内部IP,并将使用Pod的IP进行通信。

希望此范围可以轻松更改:

  • 您必须在集群上启用网络策略,这可以通过GCP控制台中的GKE UI完成,这将在集群上启用calico网络
  • 您创建一个配置图,calico将使用该配置图从此行为中排除某些IP范围:

apiVersion: v1 data: config: | nonMasqueradeCIDRs: - 10.149.80.0/21 <-- this IP range will now be considered as external and use nodes' IP resyncInterval: 60s kind: ConfigMap metadata: name: ip-masq-agent namespace: kube-system