迁移EC2实例后Concourse无法访问GitHub与S3资源问题求助
你提到之前在旧EC2 Ubuntu实例上运行的Concourse(含web和worker节点)一切正常,迁移到新实例后就没法访问GitHub和S3资源了,而且数据库和流水线凭据都没改动——那咱们从两个报错的细节入手,一步步拆解问题:
先解决S3的DNS解析问题
看S3的报错信息:
resource script '/opt/resource/check []' failed: exit status 1 stderr: [31merror listing files: RequestError: send request failed caused by: Get https://s3.amazonaws.com/xxxx-bucket?marker=&prefix=pipeline-configurations%2Fmaven%2F: dial tcp: lookup s3.amazonaws.com on [::1]:53: read udp [::1]:45952->[::1]:53: read: connection refused [0m
这个错误直接点出核心问题:Concourse节点在解析s3.amazonaws.com时,默认调用了本地IPv6的DNS服务([::1]:53),但该服务并未运行,导致连接被拒绝。这说明新EC2实例的DNS配置存在问题。
排查&修复步骤:
- 手动测试DNS解析:在新EC2实例上执行以下命令,验证能否正常解析S3域名:
如果这两个命令都失败,实锤是DNS配置的问题。nslookup s3.amazonaws.com dig s3.amazonaws.com - 调整系统DNS配置:打开
/etc/resolv.conf文件,检查nameserver配置。如果只有nameserver ::1,需要添加有效的DNS服务器:- 手动添加公共DNS(比如Google或Cloudflare的):
echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf - 或者使用AWS VPC默认DNS:VPC的DNS服务器通常是网段的第二个IP(比如VPC网段为10.0.0.0/16,DNS即为10.0.0.2),可将其添加到
resolv.conf中。
- 手动添加公共DNS(比如Google或Cloudflare的):
- 验证修复效果:DNS配置修改后,用curl测试能否访问你的S3桶:
如果返回curl -I https://s3.amazonaws.com/xxxx-bucketHTTP/1.1 200 OK类的响应,说明S3的网络问题已解决。
再处理GitHub的仓库访问问题
GitHub的报错显示私钥已加载但克隆失败:
resource script '/opt/resource/check []' failed: exit status 128 stderr: Identity added: /tmp/git-resource-private-key (/tmp/git-resource-private- key) Cloning into '/tmp/git-resource-repo-cache'... fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
私钥已成功加载但无法克隆,可能有以下几个排查方向:
排查&修复步骤:
- 检查网络连通性:测试新EC2实例能否连接到GitHub的SSH端口(22):
如果连接超时,说明实例的安全组或NACL阻止了出站SSH流量。前往AWS控制台检查EC2安全组规则,确保允许出站到# 将流水线中的私钥内容保存为临时文件测试 echo "你的私钥内容" > temp-key.pem chmod 600 temp-key.pem ssh -T git@github.com -i temp-key.pem0.0.0.0/0的22端口(或更严格的GitHub IP段)。 - 验证私钥有效性:如果上述ssh命令返回
Hi 你的GitHub用户名! You've successfully authenticated, but GitHub does not provide shell access.,说明私钥有效,可能是Concourse传递私钥时出现问题——比如流水线中的私钥配置有多余换行、空格或格式错误。 - 确认仓库权限:检查私钥对应的GitHub账号,是否拥有目标仓库的读取权限(注意仓库名区分大小写,需确保拼写完全正确)。
小结
建议优先解决S3的DNS问题,因为网络基础配置错误可能会连锁影响其他外部资源的访问。DNS修复后再测试GitHub的连接,逐步排查网络规则、私钥配置和仓库权限这几个关键点,应该就能解决问题了。
内容的提问来源于stack exchange,提问作者Gerardo




