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

问题描述 投票:0回答:1

我已经使用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),用于与本地终结点(10.204.180.164)进行通信。我希望Pod应该在哪里使用节点的IP地址与本地端点进行通信。

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

networking google-cloud-platform google-kubernetes-engine firewall vpn
1个回答
0
投票

我发现IP伪装应用于GKE群集,因此当您的Pod一起聊天时,他们看到的是真实IP,但是如果一个Pod与Internet上的资源交谈,则会使用节点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

© www.soinside.com 2019 - 2024. All rights reserved.