我试图理解 GKE 中的不同 IP 范围,即主要 IP 范围(子网)、创建子网时的次要 IP 范围。然后是创建集群时的服务和 Pod 范围。
看这个例子创建私有集群
my-subnet-0: 10.0.0.0/22
Pod secondary range: 10.52.0.0/14
VM address: 10.128.0.3
我不明白为什么 Pod IP 完全在子网之外,为什么 VM 地址看起来是随机的。
在典型的物理网络中,我希望使用子网掩码,以便路由器知道将流量路由到哪个网络。所以在这种情况下,我希望 Pod 和 VM 地址都在
10.0.0.0
- 10.0.4.255
之内。我也希望 Pod IP 以类似的方式位于节点/VM IP 内。
有人可以解释为什么不是这样吗?
我建议仔细阅读文档。 doc 说 VM 是 GKE 集群之外的 VM,并展示了如何将其自动化以连接到集群的控制平面。它不像 GKE 集群的虚拟机在子网外获得随机 IP,只是位于另一个子网中的虚拟机试图连接到集群:
例如,假设您在 my-subnet-0 的主要范围内创建了一个 VM。然后在该 VM 上,您可以将 kubectl 配置为使用控制平面的内部 IP 地址。
如果要从 my-subnet-0 外部访问控制平面,则必须授权至少一个地址范围才能访问私有端点。
假设您有一个虚拟机位于默认网络中,与您的集群位于同一区域,但不在 my-subnet-0 中。
例如:
- 我的子网-0:
10.0.0.0/22
- Pod 二级射程:
10.52.0.0/14
- 虚拟机地址:
10.128.0.3
您可以使用以下命令授权VM访问控制平面:
gcloud container clusters update private-cluster-0 \ --enable-master-authorized-networks \ --master-authorized-networks 10.128.0.3/32
关于次要范围,您可以查看文档但本质上:
使用 IP 别名,您可以配置多个内部 IP 地址,代表虚拟机中托管的容器或应用程序,而无需定义单独的网络接口。您可以从子网的主要或次要范围分配 VM 别名 IP 范围。
这是真的;最后,Pod 的网络和服务的网络位于集群的 VM 内,并进一步简化了路由流量。