GKE Ubuntu系统集群中kubectl exec/logs操作失败求助
解决GKE Ubuntu节点执行kubectl exec/logs时的SSH隧道错误
我之前维护GKE Ubuntu节点集群时也碰到过一模一样的错误,这个问题本质是K8s API Server无法通过SSH隧道连接到节点,导致没法执行exec或查看日志操作。下面是我亲测有效的排查和解决步骤:
1. 确认项目SSH密钥配置
GKE节点依赖GCP项目级的SSH密钥建立隧道连接,先检查你的密钥是否已添加到项目中:
- 执行命令查看项目现有SSH密钥:
gcloud compute project-info describe | grep -A 20 ssh-keys - 如果找不到你的
<username>对应的公钥,生成并添加密钥:# 生成密钥(默认路径是~/.ssh/google_compute) gcloud compute ssh-keygen # 将公钥添加到项目元数据 gcloud compute project-info add-metadata --metadata ssh-keys="$(cat ~/.ssh/google_compute.pub)"
2. 验证节点SSH连通性
先尝试直接SSH到节点,确认基础连通性没问题:
# 先获取节点名称 kubectl get nodes # SSH到目标节点 gcloud compute ssh <node-name> --zone us-east1-c
- 如果SSH失败,去GCP控制台的Compute Engine > 实例 > 对应节点 > 日志查看启动日志,确认
sshd服务是否正常启动。Ubuntu节点默认会启用SSH,但偶尔会有初始化异常导致服务未启动。
3. 检查节点池SSH启用状态
确认默认节点池是否开启了SSH访问(默认是开启的,但可能被误配置):
- 查看节点池配置:
gcloud container node-pools describe default-pool --cluster gke-test-cluster --zone us-east1-c | grep enable-ssh - 如果输出是
enable-ssh: false,更新节点池开启SSH:gcloud container node-pools update default-pool --cluster gke-test-cluster --zone us-east1-c --enable-ssh
4. 重启节点或重建节点池
如果以上配置都没问题,可能是节点初始化时的临时异常:
- 尝试重启单个节点:
gcloud compute instances restart <node-name> --zone us-east1-c - 若重启无效,重建默认节点池(注意:会替换所有节点,确保你的应用有足够副本保证高可用):
gcloud container node-pools recreate default-pool --cluster gke-test-cluster --zone us-east1-c
5. 检查IAM权限
确保你的账号拥有足够权限访问节点:
- 至少需要
roles/container.developer(用于集群操作)和compute.instanceAdmin.v1(用于节点SSH访问)权限。可以通过以下命令查看你的权限:gcloud projects get-iam-policy <your-project-id> --filter="bindings.members:user:<your-email>" --format="value(bindings.role)"
补充说明
GKE的Ubuntu镜像节点和官方的Container-Optimized OS节点在SSH配置上有差异,Ubuntu节点更依赖项目级的SSH密钥,所以一定要确保密钥正确关联到你的用户。
内容的提问来源于stack exchange,提问作者kronjob
相关产品推荐
相关产品推荐

