如何从自托管GitHub Actions Runner访问私有GKE控制平面
问题:自托管GitHub Actions Runner无法访问私有GKE控制平面(超时)
我正在尝试让自托管GitHub Actions Runner部署至私有GKE集群,目前Runner已成功启动,kubectl等工具也已安装,但执行kubectl命令时一直超时,推测是网络配置问题,但没找到解决办法。
流水线配置
deploy: name: Deploy runs-on: arc-runner-set environment: production permissions: id-token: write contents: read actions: read steps: - id: auth uses: "google-github-actions/auth@v2" with: credentials_json: "${{ secrets.GCP_CREDENTIALS }}" - uses: azure/setup-kubectl@v3 with: version: "latest" - uses: google-github-actions/get-gke-credentials@v2 with: cluster_name: ${{ env.GKE_CLUSTER }} location: ${{ env.GKE_ZONE }} - id: "get-pods" run: "kubectl get pods"
集群环境
这是一个私有Autopilot GKE集群,控制平面允许全局访问,我已经把本地笔记本IP加入集群授权网络,本地kubectl能正常运行。
错误信息
E0313 04:58:11.751123 108 memcache.go:265] couldn't get current server API group list: Get "https://34.28.33.63/api?timeout=32s": dial tcp 34.28.33.63:443: i/o timeout Unable to connect to the server: dial tcp 34.28.33.63:443: i/o timeout Error: Process completed with exit code 1.
注:34.28.33.63是集群的公开端点,可通过gcloud beta container clusters describe命令获取
解决方案
1. 将自托管Runner的IP加入GKE集群授权网络
- 定位自托管Runner所在机器的公网IP:如果是GCE虚拟机,执行
gcloud compute instances describe <instance-name> --zone <zone>获取;其他环境可通过curl ifconfig.me等命令获取 - 登录GCP控制台,进入目标GKE集群详情页
- 找到「授权网络」配置项,将Runner的公网IP以
x.x.x.x/32格式添加到列表中 - 保存配置后等待3-5分钟生效,重新触发流水线测试
2. 检查Runner所在网络的出站规则
- 如果Runner部署在GCP VPC内,确认VPC防火墙规则允许出站访问TCP 443端口到GKE控制平面IP
- 若使用Cloud NAT,验证NAT配置覆盖了Runner所在子网,且NAT网关具备公网访问权限
- 排查是否有第三方安全组、防火墙设备阻断了Runner到GKE控制平面的流量
3. 手动验证Runner的网络连通性
- 在Runner机器上执行
telnet 34.28.33.63 443,若能连通则网络层面无问题;若无法连通,进一步排查路由、防火墙规则 - 也可执行
curl -v https://34.28.33.63/api,查看具体连接失败原因
4. 确认GKE凭证获取正确性(可选)
- 在流水线中添加步骤,查看kubeconfig内容,确认server地址正确:
- run: cat ~/.kube/config
- 确保
google-github-actions/auth步骤已正确获取GCP权限,可添加gcloud auth list步骤验证身份
内容的提问来源于stack exchange,提问作者ArkadyB
相关产品推荐
相关产品推荐

