无法使用自定义网络启动GKE(Google容器引擎)集群

6
我将尝试启动一个GKE集群,使用“custom”类型的网络,而不是“auto”类型的网络。
我使用以下命令来启动我的集群:
$ gcloud container clusters create --cluster-ipv4-cidr=10.0.0.0/14 --network=ttest --subnetwork=ttest --num-nodes=1 jt

我收到以下错误:
Creating cluster jt...done.
ERROR: (gcloud.container.clusters.create) Operation [<Operation
 name: u'operation-1467037655793-e319dc5e'
 operationType: OperationTypeValueValuesEnum(CREATE_CLUSTER, 1)
 selfLink: u'https://container.googleapis.com/v1/projects/TRUNCATED/zones/us-east1-b/operations/operation-1467037655793-e319dc5e'
 status: StatusValueValuesEnum(DONE, 3)
 statusMessage: u'Requested CIDR 10.0.0.0/14 is not available in network "ttest".'
 targetLink: u'https://container.googleapis.com/v1/projects/TRUNCATED/zones/us-east1-b/clusters/jt'
 zone: u'us-east1-b'>] finished with error: Requested CIDR 10.0.0.0/14 is not available in network "ttest".

似乎需要一个带有/14地址范围的网络或子网络,因此命令理论上应该可以工作,但实际上并没有。

这非常奇怪,因为我的网络看起来像这样:

ttest网络:

$ gcloud compute networks describe ttest

autoCreateSubnetworks: false
creationTimestamp: '2016-06-27T07:25:03.691-07:00'
id: '5404409453117999568'
kind: compute#network
name: ttest
selfLink: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/ttest
subnetworks:
- https://www.googleapis.com/compute/v1/projects/myproject/regions/us-east1/subnetworks/ttest
x_gcloud_mode: custom

测试子网络:

$ gcloud compute networks subnets describe ttest

creationTimestamp: '2016-06-27T07:25:21.649-07:00'
gatewayAddress: 10.0.0.1
id: '6237639993374575038'
ipCidrRange: 10.0.0.0/14
kind: compute#subnetwork
name: ttest
network: https://www.googleapis.com/compute/v1/projects/myproject/global/networks/ttest
region: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-east1
selfLink: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-east1/subnetworks/ttest

我曾尝试使用手动创建的遗留网络,其中--range=10.0.0.0/8,然后尝试在该网络中创建群集,但似乎也不起作用。

看起来 /14 规则已经硬编码到 GKE 配置中的某个地方,但我不知道它想要在自定义网络中启动容器。

GKE 容器启动命令适用于任何模式/类型为 "auto" 的网络。

我查阅了相关文档,但没有太大的收获。唯一引人注目的是this page中的以下片段:

在与其他产品一起使用子网时,存在以下限制:

  • Google 托管 VM:仅支持自动子网网络。无法部署在自定义子网网络中。

GKE 在幕后使用托管 VM 吗?这是导致问题的原因吗?

1个回答

7
GKE支持自定义子网网络。你遇到的问题是GKE强制要求cluster-ipv4-cidr范围与VM可能分配其IP的所有子网不相交,因为这会导致内部网络中数据包路由的不确定性。 cluster-ipv4-cidr确定集群中容器应使用哪些CIDR范围,而所使用的子网确定了在该网络中创建的所有VM所使用的IP地址。
要解决问题,只需停止在gcloud命令中指定--cluster-ipv4-cidr标志即可。GKE将为您选择一个安全的cluster-ipv4-cidr范围。

嗨Alex,我尝试了一下,并且它在我创建的新网络上运行正常(如上所示),但是在另一个网络上却不起作用,我得到了相同的错误(当我没有指定CIDR时),你有什么其他可能出错的想法吗? - ffledgling
1
可能是因为子网填满了10.0.0.0/8空间,或者高级路由使用了整个空间,导致另一个网络没有足够的可用空间来分配/14。您看到的确切错误消息是什么? - CJ Cullen
@CJCullen 我看到的确切错误消息是网络“mynetwork”在10.0.0.0/8中没有可用的专用IP空间来保留此集群的/14块。昨晚我很晚才找到答案,这个网络的VPN曾经配置为Remote IP Network Ranges0.0.0.0/0,然后又配置为10.0.0.0/8,GKE可能会查看这个(我不知道如何),并发现它没有自己的空间而抱怨。但令人惊讶的是,我可以正常地计算引擎实例。 - ffledgling
将此标记为已接受的解决方案,因为Alex的答案对我提出的问题是正确的。 - ffledgling
你期望通过 VPN 隧道路由的 CIDR 范围是什么?它不应与 GKE 用于其 Pod 的范围冲突。如果发生冲突,Pod 可能无法彼此通信。我有误解吗? - CJ Cullen
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接