You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GitHub Actions访问AWS EKS内部的unpub私有URL?

让GitHub Actions访问AWS私有unpub服务的可行方案

方案1:AWS Session Manager端口转发

无需额外VPN客户端,利用AWS SSM实现端口转发,将GitHub Actions runner的本地端口映射到unpub的私有地址。

  • 前置准备:

    • 为GitHub配置AWS OIDC身份提供商,创建具备以下权限的IAM角色:ssm:StartSession、ssm:PortForwardingSessionToRemotePort、eks:DescribeCluster(用于定位EKS资源)。
    • 确保EKS节点已安装SSM Agent,且节点IAM角色包含AmazonSSMManagedInstanceCore权限。
  • GitHub Actions workflow步骤:

    1. 配置AWS OIDC认证:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::ACCOUNT_ID:role/GitHubActionsSSMRole
          aws-region: YOUR_REGION
      
    2. 获取unpub服务的内网地址(若通过K8S Service暴露):
      UNPUB_ADDR=$(kubectl get svc unpub -n YOUR_NAMESPACE -o jsonpath='{.spec.clusterIP}:{.spec.ports[0].port}')
      
    3. 启动SSM端口转发会话:
      aws ssm start-session \
        --target <EKS_NODE_INSTANCE_ID> \
        --document-name AWS-StartPortForwardingSessionToRemoteHost \
        --parameters '{"host":["'"$(echo $UNPUB_ADDR | cut -d: -f1)"'"], "portNumber":["'"$(echo $UNPUB_ADDR | cut -d: -f2)"'"], "localPortNumber":["8080"]}' &
      sleep 10 # 等待连接建立
      
    4. 访问映射后的本地地址:
      curl http://localhost:8080
      

注意:需提前获取EKS节点的实例ID,可通过kubectl get nodes -o jsonpath='{.items[0].spec.providerID}'提取。

方案2:部署Self-hosted Runner到VPC内部

将GitHub Actions runner部署在AWS VPC内网环境中,直接访问unpub私有地址。

  • 部署步骤:

    1. 进入GitHub仓库的「Settings > Actions > Runners」,点击「New self-hosted runner」,获取对应系统的安装脚本。
    2. 在VPC内的EC2实例或EKS Pod中执行安装脚本,完成runner注册。确保该实例/Pod所在子网能访问unpub.internal.abc。
  • Workflow配置:
    指定使用self-hosted runner执行任务:

    jobs:
      build:
        runs-on: self-hosted
        steps:
          - name: Checkout code
            uses: actions/checkout@v4
          - name: Access unpub
            run: curl http://unpub.internal.abc
    

注意:需自行维护runner的可用性、安全性(如定期更新、权限控制),适合长期稳定的构建需求。

方案3:AWS PrivateLink连接(企业级)

通过AWS PrivateLink建立GitHub Actions与VPC的私有连接,无需中转。

  • 配置步骤:
    1. 在AWS VPC中创建端点服务,关联unpub服务的负载均衡器或K8S Service。
    2. 利用GitHub Enterprise计划的网络配置功能,将Actions的出站流量导向该PrivateLink端点。
    3. 在workflow中直接访问http://unpub.internal.abc即可。

注意:需GitHub Enterprise支持,配置成本较高,适合大规模、高安全要求的场景。

方案4:临时AWS VPN连接

在GitHub Actions runner中通过CLI建立临时VPN连接,模拟本地VPN访问。

  • Workflow步骤:
    1. 将AWS VPN的配置文件(.ovpn)存储为GitHub Secret(如VPN_CONFIG)。
    2. 安装VPN客户端并建立连接:
      - name: Install OpenVPN
        run: sudo apt-get update && sudo apt-get install -y openvpn
      - name: Establish VPN connection
        run: |
          echo "${{ secrets.VPN_CONFIG }}" > vpn.ovpn
          sudo openvpn --config vpn.ovpn --daemon
          sleep 15 # 等待连接稳定
      - name: Access unpub
        run: curl http://unpub.internal.abc
      

注意:需处理SSO认证逻辑(如通过AWS CLI获取临时凭证注入VPN配置),连接稳定性受网络影响较大,适合临时测试场景。

内容的提问来源于stack exchange,提问作者Faisal Shani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:13:29