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

在Github Runner中使用Terratest调用HttpGet方法出现连接被拒绝报错

问题原因及解决方法

核心触发原因

按优先级从高到低排列:

  • AWS ALB安全组访问限制:你本地的公网IP提前配置在了ALB安全组的80端口入站允许列表中,但Github托管Runner的公网IP是动态分配的,默认不在ALB的入站允许规则内,ALB会直接拒绝来自Runner IP的访问请求,返回连接被拒绝报错。Runner能通过80端口拉取依赖是因为请求走的是官方预设的代理/允许的域名规则,不属于直接访问自定义ALB的场景。
  • ALB未完全就绪就发起请求:Terratest执行Http请求时,ALB刚部署完成,还未完成健康检查、后端实例挂载或节点预热,此时访问80端口会被拒绝。本地测试通常和资源部署有时间差,ALB已经完成就绪,所以访问正常。
  • Runner代理配置冲突:如果你的Runner配置了HTTP/HTTPS代理,拉取依赖的域名在代理允许列表中,但ALB域名未被加入允许列表,或未配置在NO_PROXY规则中,会导致请求被代理拦截,返回连接拒绝。
  • DNS解析差异:刚创建的ALB DNS记录存在区域同步延迟,Runner侧解析到的是未就绪的ALB节点IP,而本地已经解析到可用IP,导致两端访问结果不一致。

排查&修复方案

  • 先在CI的Terratest执行步骤前增加调试命令,确认Runner侧的访问状态:
# 打印Runner侧的ALB域名解析结果
nslookup xxxx-EPAJpE-12249xxxxx.us-west-1.elb.amazonaws.com
# 打印Runner侧的代理配置
echo $HTTP_PROXY $HTTPS_PROXY $NO_PROXY
# 直接用curl测试访问,输出详细日志
curl -v http://xxxx-EPAJpE-12249xxxxx.us-west-1.elb.amazonaws.com
  • 替换原生http.Get为Terratest自带的带重试的Http请求方法,避开ALB未就绪的时间窗口:
// 示例:最多重试15次,每次间隔10秒,预期返回200状态码
resp, err := http_helper.HttpGetWithRetry(t, url, nil, 200, 15, 10*time.Second)
  • 临时放开ALB安全组的80端口入站规则到0.0.0.0/0测试,如果放开后请求正常,就确认是安全组限制问题。后续可以用两种方案处理:
    1. 测试前先调用AWS API获取当前Runner的公网IP,动态添加到ALB安全组的允许列表,测试完成后自动删除规则
    2. 把Github官方公布的托管Runner所属的Azure IP段配置到ALB安全组中
  • 如果是代理导致的问题,把你的ALB域名添加到CI的NO_PROXY环境变量中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:57:02