【问题标题】:scaling GKE K8s Cluster breaks networking扩展 GKE K8s 集群中断网络
【发布时间】:2020-08-11 15:30:22
【问题描述】:

各位, 尝试将 GKE 集群从 1 个节点增加到 3 个节点时,在不同的区域(us-centra1-a、b、c)中运行。以下似乎很明显:

安排在新节点上的 Pod 无法访问 Internet 上的资源...即无法连接到条带 api 等(可能与 kube-dns 相关,尚未测试尝试在没有 DNS 查找的情况下离开的流量)。

同样,我无法按预期在 K8s 中的 pod 之间进行路由。 IE。似乎跨az调用可能会失败?使用 openvpn 进行测试时,无法连接到新节点上安排的 pod。

我注意到的另一个问题是 Metrics 服务器似乎不稳定。 kubectl top nodes 显示新节点未知。

在撰写本文时,掌握k8s版本1.15.11-gke.9

正在关注的设置:

VPC-native (alias IP) - disabled
Intranode visibility - disabled

gcloud 容器集群描述 cluster-1 --zone us-central1-a

clusterIpv4Cidr: 10.8.0.0/14
createTime: '2017-10-14T23:44:43+00:00'
currentMasterVersion: 1.15.11-gke.9
currentNodeCount: 1
currentNodeVersion: 1.15.11-gke.9
endpoint: 35.192.211.67
initialClusterVersion: 1.7.8
instanceGroupUrls:
- https://www.googleapis.com/compute/v1/projects/skilful-frame-180217/zones/us-central1-a/instanceGroupManagers/gke-cluster-1-default-pool-ff24932a-grp
ipAllocationPolicy: {}
labelFingerprint: a9dc16a7
legacyAbac:
  enabled: true
location: us-central1-a
locations:
- us-central1-a
loggingService: none

....

masterAuthorizedNetworksConfig: {}
monitoringService: none
name: cluster-1
network: default
networkConfig:
  network: .../global/networks/default
  subnetwork: .../regions/us-central1/subnetworks/default
networkPolicy:
  provider: CALICO
nodeConfig:
  diskSizeGb: 100
  diskType: pd-standard
  imageType: COS
  machineType: n1-standard-2
  ...
nodeIpv4CidrSize: 24
nodePools:
- autoscaling: {}
  config:
    diskSizeGb: 100
    diskType: pd-standard
    imageType: COS
    machineType: n1-standard-2
    ...
  initialNodeCount: 1
  locations:
  - us-central1-a
  management:
    autoRepair: true
    autoUpgrade: true
  name: default-pool
  podIpv4CidrSize: 24
  status: RUNNING
  version: 1.15.11-gke.9
servicesIpv4Cidr: 10.11.240.0/20
status: RUNNING
subnetwork: default
zone: us-central1-a

下一个故障排除步骤是创建一个新池并迁移到该池。也许答案正盯着我的脸……会不会是nodeIpv4CidrSize a /24?

谢谢!

【问题讨论】:

  • 我创建了一个与您发布的设置完全相同的集群,它有效。使用 1 个节点创建,对其进行测试,扩展到 3 个节点,其他节点上的 pod 也具有出口访问权限。我注意到您启用了 networkpolicy (calico),您可以粘贴 kubectl describe networkpolicy 的输出吗?如果您测试 ping 其他 pod 和 ping/curling 外部资源并将输出粘贴到此处,那也很好。
  • 谢谢!在 UI 中,它说网络策略已禁用,这就是为什么我没有关注 calico。这完全有道理! kubectl describe networkpolicy 什么都不返回...但我现在清楚地看到 gcloud container clusters describe cluster-1 --zone us-central1-a 输出中的印花布设置。叹息....我不想建立一个新的集群:)。有没有掉印花布的命令? :)
  • 运行gcloud container clusters update cluster-1 --no-enable-network-policy,如果它解决了您的问题,请告诉我,如果可以,我会写一个答案来解释其背后的原因,好吗?
  • 当我更新集群以禁用网络策略插件时,describe 命令显示networkPolicyConfig: disabled: true 我想知道您是否发送命令启用它然后再次禁用它会更新到正确的状态。由于我需要向您传递一些命令,所以我会写作为答案,但如果它解决了您的问题,我会等待您的反馈,如果没有,我们会继续挖掘 ;)

标签: kubernetes google-cloud-platform google-kubernetes-engine


【解决方案1】:
  • 在您的问题中,您的集群的描述具有以下网络策略:
name: cluster-1
network: default
networkConfig:
  network: .../global/networks/default
  subnetwork: .../regions/us-central1/subnetworks/default
networkPolicy:
  provider: CALICO
  • 我尽可能地部署了一个类似的集群:
gcloud beta container --project "PROJECT_NAME" clusters create "cluster-1" \
--zone "us-central1-a" \
--no-enable-basic-auth \
--cluster-version "1.15.11-gke.9" \
--machine-type "n1-standard-1" \
--image-type "COS" \
--disk-type "pd-standard" \
--disk-size "100" \
--metadata disable-legacy-endpoints=true \
--scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \
--num-nodes "1" \
--no-enable-ip-alias \
--network "projects/owilliam/global/networks/default" \
--subnetwork "projects/owilliam/regions/us-central1/subnetworks/default" \
--enable-network-policy \
--no-enable-master-authorized-networks \
--addons HorizontalPodAutoscaling,HttpLoadBalancing \
--enable-autoupgrade \
--enable-autorepair
  • 之后我得到了和你一样的配置,我分两部分:
addonsConfig:
  networkPolicyConfig: {}
...
name: cluster-1
network: default
networkConfig:
  network: projects/owilliam/global/networks/default
  subnetwork: projects/owilliam/regions/us-central1/subnetworks/default
networkPolicy:
  enabled: true
  provider: CALICO
...
  • 在您提到的 cmets 中,“在 UI 中,它说网络策略已禁用...是否有删除 calico 的命令?”。然后我给了你命令,你得到的错误是Network Policy Addon is not Enabled

这很奇怪,因为它已应用但未启用。我在我的集​​群上DISABLED它并查看:

addonsConfig:
  networkPolicyConfig:
    disabled: true
...
name: cluster-1
network: default
networkConfig:
  network: projects/owilliam/global/networks/default
  subnetwork: projects/owilliam/regions/us-central1/subnetworks/default
nodeConfig:
...
  • NetworkPolicyConfig{} 变为disabled: truenodeConfig 上方的NetworkPolicy 部分现在消失了。因此,我建议您再次启用和禁用它,以查看它是否更新了正确的资源并修复了您的网络策略问题,我们将这样做:

  • 如果您的集群未投入生产,我建议您将其重新调整为 1,进行更改然后再次扩展,更新会更快。但如果它正在生产中,请保持原样,但可能需要更长时间,具体取决于您的 pod 中断策略。 (default-pool 是我的集群池的名称),我将在我的示例中调整它的大小:

$ gcloud container clusters resize cluster-1 --node-pool default-pool --num-nodes 1
Do you want to continue (Y/n)?  y
Resizing cluster-1...done.
  • 然后启用网络策略插件本身(它不会激活它,只会使其可用):
$ gcloud container clusters update cluster-1 --update-addons=NetworkPolicy=ENABLED
Updating cluster-1...done.                                                                                                                                                      
  • 我们启用(激活)网络策略:
$ gcloud container clusters update cluster-1 --enable-network-policy
Do you want to continue (Y/n)?  y
Updating cluster-1...done.                                                                                                                                                      
  • 现在让我们撤消它:
$ gcloud container clusters update cluster-1 --no-enable-network-policy
Do you want to continue (Y/n)?  y
Updating cluster-1...done.    
  • 禁用后,等待池准备就绪,然后运行最后一条命令:
$ gcloud container clusters update cluster-1 --update-addons=NetworkPolicy=DISABLED
Updating cluster-1...done.
  • 如果您已缩小比例,则将其重新缩小为 3:
$ gcloud container clusters resize cluster-1 --node-pool default-pool --num-nodes 3
Do you want to continue (Y/n)?  y
Resizing cluster-1...done.
  • 最后再次检查描述是否匹配正确的配置,并测试 pod 之间的通信。

以下是此配置的参考: Creating a Cluster Network Policy

如果之后您仍然遇到问题,请使用最新的集群描述更新您的问题,我们将进一步挖掘。

【讨论】:

  • 太棒了,将尝试回发。谢谢!
  • 嘿,这真的有帮助吗?我在使用 GKE 和托管 Calico 的生产集群中遇到了类似的问题,这些集群通过许多网络策略和类似的多区域设置(如上)激活,只是更大。很遗憾,我无法访问上面的聊天。
猜你喜欢
  • 1970-01-01
  • 2021-04-22
  • 2018-12-04
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多