能否让GKE管理托管节点池外节点?如何将外部节点加入GKE集群?
GKE外部节点管理与kubeadm加入问题解答
一、GKE能否管理托管节点池外的节点?
标准托管GKE集群不支持直接管控托管节点池之外的节点(如其他GCP项目的GCE实例、AWS EC2实例),因为托管集群的控制平面和节点生命周期由GCP完全托管,仅允许管理同项目内的自定义/托管节点池。
但可以通过以下方案实现跨云/跨项目节点的统一管理:
- 使用Anthos GKE:Anthos支持混合云集群部署,可将其他GCP项目的GCE、AWS EC2等外部节点注册到GKE集群中,纳入统一的管控体系,包括调度、监控和运维。
- 若无需完全纳入GKE管控,可搭建独立Kubernetes集群,通过Anthos Config Sync实现配置的统一同步,但这类节点不属于GKE集群的一部分。
二、无法通过kubeadm获取令牌,如何让外部节点加入GKE?
GKE托管集群的控制平面由GCP托管,用户无权限直接执行kubeadm token create等操作,可通过以下两种方式解决:
方法1:使用Anthos注册命令(推荐,适用于混合云场景)
若使用Anthos,直接通过gcloud命令完成节点注册,无需手动处理kubeadm凭证:
# 注册外部节点到GKE Anthos集群 gcloud anthos clusters register CLUSTER_NAME \ --gke-cluster=projects/PROJECT_ID/locations/ZONE/clusters/GKE_CLUSTER_NAME \ --agent-file=agent.yaml
执行命令后,将生成的agent.yaml部署到外部节点即可完成注册。
方法2:手动生成凭证执行kubeadm join
如果不使用Anthos,可手动获取集群凭证并生成可用的join令牌:
- 获取集群CA证书和API地址
# 获取集群CA证书,保存到ca.crt gcloud container clusters describe CLUSTER_NAME --zone ZONE --format="value(masterAuth.clusterCaCertificate)" > ca.crt # 获取API服务器地址 API_ENDPOINT=$(gcloud container clusters describe CLUSTER_NAME --zone ZONE --format="value(endpoint)") - 创建节点加入专用ServiceAccount并生成令牌
# 创建ServiceAccount kubectl create sa node-joiner -n kube-system # 绑定节点引导所需的ClusterRole kubectl create clusterrolebinding node-joiner-binding --clusterrole=system:node-bootstrapper --serviceaccount=kube-system:node-joiner # 生成有效期24小时的令牌 JOIN_TOKEN=$(kubectl create token node-joiner -n kube-system --duration=24h) - 计算CA证书哈希值
CA_HASH=$(openssl x509 -pubkey -in ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //') - 在外部节点执行kubeadm join
kubeadm join ${API_ENDPOINT}:443 --token ${JOIN_TOKEN} --discovery-token-ca-cert-hash sha256:${CA_HASH}
内容的提问来源于stack exchange,提问作者tskuzzy
相关产品推荐
相关产品推荐

