8

我试图进一步了解在 Google 的 Kubernetes Engine 中配置私有集群时到底发生了什么。

Google 在此处提供了一个配置私有集群的示例,其中控制平面服务(例如 Kubernetes API)位于172.16.0.16/28子网上。

https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters

gcloud beta container clusters create pr-clust-1 \
 --private-cluster \
 --master-ipv4-cidr 172.16.0.16/28 \
 --enable-ip-alias \
 --create-subnetwork ""

当我运行这个命令时,我看到:

  • 现在我的 VPC 中有一些 gke 子网属于节点和服务的集群子网。这些都在10.x.x.x/8范围内。
  • 172.16/16我在地址空间中没有任何子网。
  • 我确实有一些似乎相关的新配对规则和路线。例如,有一条新路由peering-route-a08d11779e9a3276,其目的地址范围为172.16.0.16/28,下一跳为gke-62d565a060f347e0fba7-3094-3230-peer。这个对等角色然后指向gke-62d565a060f347e0fba7-3094-bb01-net
gcloud compute networks subnets list | grep us-west1

#=>

default                     us-west1                 default  10.138.0.0/20
gke-insti3-subnet-62d565a0  us-west1                 default  10.2.56.0/22
gcloud compute networks peerings list

#=>

NAME                                     NETWORK  PEER_PROJECT              PEER_NETWORK                                        AUTO_CREATE_ROUTES  STATE   STATE_DETAILS
gke-62d565a060f347e0fba7-3094-3230-peer  default  gke-prod-us-west1-a-4180  gke-62d565a060f347e0fba7-3094-bb01-net              True                ACTIVE  [2018-08-23T16:42:31.351-07:00]: Connected.

Google 为 GKE 服务管理gke-62d565a060f347e0fba7-3094-bb01-net的 Kubernetes 管理端点(范围内的控制平面)是否存在于其中的对等 VPC ?172.16/16

进一步——我的请求是如何发送到 Kubernetes API 服务器的?

4

1 回答 1

14

GKE的私有集群功能依赖于 VPC 网络的Alias IP Ranges功能,因此在创建私有集群时会发生多种情况:

  • --enable-ip-alias标志告诉 GKE 使用具有两个辅助 IP 范围的子网:一个用于 pod,另一个用于服务。这允许 VPC 网络了解集群中的所有 IP 地址并适当地路由流量。

  • --create-subnetwork标志告诉 GKE 创建一个新的子网(在您的情况下为 gke-insti3-subnet-62d565a0)并自动选择其主要和次要范围。请注意,您可以使用--cluster-ipv4-cidr和自己选择次要范围--services-ipv4-cidr。或者您甚至可以自己创建子网并告诉 GKE 将其与标志--subnetwork--cluster-secondary-range-name--services-secondary-range-name.

  • --private-cluster标志告诉 GKE 在 Google 拥有的项目中创建一个新的 VPC 网络(在您的情况下为 gke-62d565a060f347e0fba7-3094-bb01-net),并使用VPC Network Peering将其连接到您的 VPC 网络。Kubernetes 管理端点位于您指定的范围内--master-ipv4-cidr(在您的情况下为 172.16.0.16/28)。在 Google 拥有的项目中还创建了一个内部负载均衡器,这就是您的工作节点与之通信的地方。在区域集群的情况下,此 ILB 允许跨多个 VM 对流量进行负载平衡。您可以在输出中找到此内部 IP 地址作为privateEndpoint字段gcloud beta container clusters describe. 需要理解的重要一点是,由于两个网络之间的 VPC 对等互连,主 VM 和工作节点 VM 之间的所有通信都通过内部 IP 地址进行。

  • 您的私有集群还有一个外部 IP 地址,您可以endpointgcloud beta container clusters describe. 工作节点不使用它,但客户通常使用它来远程管理他们的集群,例如,使用kubectl.

  • 您可以使用主授权网络功能来限制哪些 IP 范围(内部和外部)可以访问管理端点。此功能强烈建议用于私有集群,并在您使用gcloudCLI 创建集群时默认启用。

希望这可以帮助!

于 2018-08-24T23:29:04.357 回答