Jenkins部署至GKE集群时构建失败问题求助
解决GKE集群恢复后Jenkins部署超时问题
核心问题定位
错误提示dial tcp 34.xxx.xxx.xxx:443: i/o timeout表明Jenkins所在集群无法与生产GKE集群的控制平面建立网络连接,大概率是项目恢复后网络或权限配置被重置导致。
排查与修复步骤
1. 验证网络连通性
- 登录Jenkins集群的任意节点或Jenkins代理Pod,执行以下命令测试TCP连通性:
如果命令超时,直接排查网络链路问题;若能连通,再检查权限配置。telnet 34.xxx.xxx.xxx 443 # 或使用nc工具 nc -zv 34.xxx.xxx.xxx 443
2. 检查VPC对等连接状态
- 登录GCP控制台,确认Jenkins集群所在VPC与生产GKE集群VPC的VPC对等连接是否处于激活状态:
- 若对等连接被删除,重新创建并确保两端子网CIDR无冲突。
- 检查对等连接的路由配置,确认生产GKE集群的控制平面IP段已被正确路由到Jenkins VPC。
3. 重置GKE控制平面授权网络
- 生产集群恢复后,控制平面的授权网络可能被重置:
- 进入GCP控制台的GKE集群详情页,找到「控制平面授权」配置项。
- 将Jenkins集群的VPC CIDR段或节点公网IP添加到允许列表中。
- 保存配置后等待5-10分钟,让控制平面生效新的授权规则。
4. 确认Jenkins服务账号权限
- 检查Jenkins用于访问GKE的服务账号:
- 确认该服务账号在生产项目中仍拥有
roles/container.admin或至少roles/container.developer的IAM角色。 - 用该服务账号密钥本地测试:
若命令执行失败,重新为服务账号绑定对应IAM角色。gcloud auth activate-service-account --key-file=<服务账号密钥文件> gcloud container clusters get-credentials <生产集群名称> --region=<区域> --project=<生产项目ID> kubectl get nodes
- 确认该服务账号在生产项目中仍拥有
5. 检查防火墙规则
- 确认生产项目的防火墙规则允许Jenkins集群访问GKE控制平面:
- 执行以下命令查看GKE默认的控制平面访问规则:
gcloud compute firewall-rules list --project=<生产项目ID> --filter="targetTags=master" - 确保规则的
source-ranges包含Jenkins集群的VPC CIDR,若缺失则添加对应条目。
- 执行以下命令查看GKE默认的控制平面访问规则:
临时应急方案
如果网络配置变更需要较长时间生效,可临时为Jenkins代理节点分配公网IP,将该IP添加到GKE控制平面授权网络中,验证部署流程是否能正常运行,待永久网络配置生效后再移除。
内容的提问来源于stack exchange,提问作者JohnR
相关产品推荐
相关产品推荐

