我已将 AWS EKS 升级到 1.24,从那时起使用 github docker 注册表的身份验证失败。
我在詹金斯中运行以下 Ansible 任务:
- name: Login to github docker registry
community.general.docker_login:
registry: ghcr.io
username: "{{ github_cred.user }}"
password: "{{ github_cred.token }}"
reauthorize: yes
并出现以下错误:
19:04:41 redirecting (type: modules) community.general.docker_login to community.docker.docker_login
19:04:41 redirecting (type: modules) community.general.docker_login to community.docker.docker_login
19:04:42 fatal: [localhost]: FAILED! => changed=false
19:04:42 msg: 'Error connecting: Error while fetching server API version: (''Connection aborted.'', ConnectionRefusedError(111, ''Connection refused''))'
我知道这client.authentication.k8s.io/v1alpha1
在 1.24 中已被弃用,但不确定是否相关。
有谁知道可能是什么问题吗?
答案1
您遇到的错误消息,
连接错误:获取服务器 API 版本时出错:(“连接中止。”,ConnectionRefusedError(111,“连接被拒绝”))
表示在 Jenkins 中运行的 Ansible 脚本与 Docker 注册表之间存在连接问题。有几个潜在原因和解决方案可供探索:
- 网络连接:
检查防火墙:确保没有防火墙规则阻止 Jenkins 服务器和 GitHub 容器注册表(ghcr.io)之间的通信。
DNS 解析:验证 DNS 是否可以正确将主机名“ghcr.io”解析为 IP 地址。您可以nslookup ghcr.io
在终端中使用它进行测试。
网络可达性:确保 Jenkins 和互联网之间有正确的网络连接。您可以 ping 一个公共网站(如“8.8.8.8”)进行测试。
- 身份验证问题:
证书:
仔细检查字典中的值github_cred
。确保“用户”是用于访问 GitHub 容器注册表的正确用户名,并且“令牌”是具有“read_repository”和“write_repository”范围的有效个人访问令牌 (PAT)。
机密管理: 如果您将凭据存储在 Jenkins 凭据存储或环境变量中,请确认它们被正确注入到 Ansible 任务中。
- Ansible 配置:
Docker 模块:
虽然您的代码片段显示community.general.docker_login
,但 Ansible 2.9 及以上版本使用community.docker.docker_login
。按照错误消息所示更新模块名称。
Docker 版本: 使用较旧的 Docker 客户端版本可能会导致兼容性问题。如果可能,请考虑升级 Jenkins 服务器上的 Docker 客户端。
- 删除的功能(不太可能):
尽管您提到了 的弃用client.authentication.k8s.io/v1alpha1
,但它不太可能直接导致您的问题。此功能与集群内的 Kubernetes 身份验证有关,而不是 Docker 注册表访问。
故障排除步骤:
- 首先验证网络连接并解决任何防火墙或 DNS 问题。
- 仔细检查您的凭据并确保 Jenkins 中运行的 Ansible 任务可以访问它们。
- 如果使用 Ansible 2.9 或更高版本,请将 Ansible 模块名称更新为 community.docker.docker_login。
- 如果可能,请考虑升级 Jenkins 服务器上的 Docker 客户端版本。
如果尝试这些解决方案后问题仍然存在,请考虑提供有关您的环境的更多详细信息,包括特定的 Ansible 版本和 EKS 集群中的任何相关安全配置。这些附加信息可能有助于进一步诊断问题。