You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

迁移EC2实例后Concourse无法访问GitHub与S3资源问题求助

迁移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域名:
    nslookup s3.amazonaws.com
    dig s3.amazonaws.com
    
    如果这两个命令都失败,实锤是DNS配置的问题。
  • 调整系统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配置修改后,用curl测试能否访问你的S3桶:
    curl -I https://s3.amazonaws.com/xxxx-bucket
    
    如果返回HTTP/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.

私钥已成功加载但无法克隆,可能有以下几个排查方向:

排查&修复步骤:

  1. 检查网络连通性:测试新EC2实例能否连接到GitHub的SSH端口(22):
    # 将流水线中的私钥内容保存为临时文件测试
    echo "你的私钥内容" > temp-key.pem
    chmod 600 temp-key.pem
    ssh -T git@github.com -i temp-key.pem
    
    如果连接超时,说明实例的安全组或NACL阻止了出站SSH流量。前往AWS控制台检查EC2安全组规则,确保允许出站到0.0.0.0/0的22端口(或更严格的GitHub IP段)。
  2. 验证私钥有效性:如果上述ssh命令返回Hi 你的GitHub用户名! You've successfully authenticated, but GitHub does not provide shell access.,说明私钥有效,可能是Concourse传递私钥时出现问题——比如流水线中的私钥配置有多余换行、空格或格式错误。
  3. 确认仓库权限:检查私钥对应的GitHub账号,是否拥有目标仓库的读取权限(注意仓库名区分大小写,需确保拼写完全正确)。

小结

建议优先解决S3的DNS问题,因为网络基础配置错误可能会连锁影响其他外部资源的访问。DNS修复后再测试GitHub的连接,逐步排查网络规则、私钥配置和仓库权限这几个关键点,应该就能解决问题了。

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

火山引擎 最新活动