kubernetes 升级到 1.24 后无法通过 GHCR 进行身份验证

kubernetes 升级到 1.24 后无法通过 GHCR 进行身份验证

我已将 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 注册表之间存在连接问题。有几个潜在原因和解决方案可供探索:

  1. 网络连接:

检查防火墙:确保没有防火墙规则阻止 Jenkins 服务器和 GitHub 容器注册表(ghcr.io)之间的通信。

DNS 解析:验证 DNS 是否可以正确将主机名“ghcr.io”解析为 IP 地址。您可以nslookup ghcr.io在终端中使用它进行测试。

网络可达性:确保 Jenkins 和互联网之间有正确的网络连接。您可以 ping 一个公共网站(如“8.8.8.8”)进行测试。

  1. 身份验证问题:

证书: 仔细检查字典中的值github_cred。确保“用户”是用于访问 GitHub 容器注册表的正确用户名,并且“令牌”是具有“read_repository”和“write_repository”范围的有效个人访问令牌 (PAT)。

机密管理: 如果您将凭据存储在 Jenkins 凭据存储或环境变量中,请确认它们被正确注入到 Ansible 任务中。

  1. Ansible 配置:

Docker 模块: 虽然您的代码片段显示community.general.docker_login,但 Ansible 2.9 及以上版本使用community.docker.docker_login。按照错误消息所示更新模块名称。

Docker 版本: 使用较旧的 Docker 客户端版本可能会导致兼容性问题。如果可能,请考虑升级 Jenkins 服务器上的 Docker 客户端。

  1. 删除的功能(不太可能):

尽管您提到了 的弃用client.authentication.k8s.io/v1alpha1,但它不太可能直接导致您的问题。此功能与集群内的 Kubernetes 身份验证有关,而不是 Docker 注册表访问。

故障排除步骤:

  • 首先验证网络连接并解决任何防火墙或 DNS 问题。
  • 仔细检查您的凭据并确保 Jenkins 中运行的 Ansible 任务可以访问它们。
  • 如果使用 Ansible 2.9 或更高版本,请将 Ansible 模块名称更新为 community.docker.docker_login。
  • 如果可能,请考虑升级 Jenkins 服务器上的 Docker 客户端版本。

如果尝试这些解决方案后问题仍然存在,请考虑提供有关您的环境的更多详细信息,包括特定的 Ansible 版本和 EKS 集群中的任何相关安全配置。这些附加信息可能有助于进一步诊断问题。

相关内容