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

Posted

技术标签:

【中文标题】无法使用自定义网络启动 GKE(Google 容器引擎)集群【英文标题】:Unable to launch a GKE (Google Container Engine) cluster with a custom network 【发布时间】:2016-10-29 15:37:24 【问题描述】:

我正在尝试使用“自定义”类型网络而不是“自动”类型网络启动 GKE 集群。

我使用以下命令来启动我的集群:

$ 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 地址范围的网络或子网,因此该命令应该理想地工作,但它没有。

这很奇怪,因为这是我的网络的样子:

测试网络:

$ 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

ttest 子网:

$ 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 中突出以下sn-p:

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

Google 托管虚拟机:仅在自动子网网络上受支持。无法部署在自定义子网网络中。

GKE 是否在后台使用托管虚拟机?这是造成问题的原因吗?

【问题讨论】:

【参考方案1】:

GKE 确实支持自定义子网。您遇到的问题是,GKE 强制要求 cluster-ipv4-cidr 范围与分配虚拟机 IP 的所有子网不相交,因为这会导致数据包在内部网络上的路由位置不明确。

cluster-ipv4-cidr 确定哪些 CIDR 范围应用于集群中的容器,而使用的子网确定哪些 IP 地址用于该网络中创建的所有 VM。

要解决此问题,只需停止在 gcloud 命令中指定 --cluster-ipv4-cidr 标志即可。然后,GKE 将为您选择一个安全的 cluster-ipv4-cidr 范围。

【讨论】:

嗨亚历克斯,我试过这个,它适用于我创建的新网络(如上所示),但它不适用于我拥有的另一个网络,我得到同样的错误(当我不'不指定 CIDR),知道还有什么问题吗? 可能是其他网络没有足够的可用空间来分配 /14。这可能是因为子网填满了 10.0.0.0/8 空间,或者来自使用整个空间的高级路由。您看到的确切错误消息是什么? @CJCullen 我看到的确切错误消息是The network "mynetwork" does not have available private IP space in 10.0.0.0/8 to reserve a /14 block for this cluster。我昨晚很晚才找到答案,该网络的***在某一时刻配置为Remote IP Network Ranges0.0.0.0/0,然后在另一时刻配置为10.0.0.0/8,GKE可能会看这个(我不知道怎么做)和发现它没有自己的空间并抱怨。不过令人惊讶的是,我可以很好地计算出计算引擎实例。 将此标记为已接受的解决方案,因为 Alex 的回答对于我提出的问题是正确的。 是的,GKE 检查现有路由并假设它们正在用于重要的事情,并避免在那里分配集群 CIDR。无论网络的 IP 范围是什么,Compute Engine 实例都已经“认领”了,因此它们不需要小心翼翼地绕过后来发生的事情。

以上是关于无法使用自定义网络启动 GKE(Google 容器引擎)集群的主要内容,如果未能解决你的问题,请参考以下文章

无法使用自定义容器在 Google AI Platform 上加载动态库 libcuda.so.1 错误

使用自定义网络的 gke 集群部署

GKE 自动缩放无法缩放

与 Google SQL 的 TCP 连接给出 OperationalError(来自 GKE 中的容器化应用程序)

如何在 GKE 自动驾驶仪中基于自定义指标实现水平自动缩放

Google端点在日志中为GET /提供了无效的HTTP模板/