ECR-凭证刷新器

发布: (2025年12月22日 GMT+8 03:40)
3 min read
原文: Dev.to

Source: Dev.to

私有镜像仓库的认证方式

  • 在每个节点上配置容器运行时 – 例如,k3s 会检查 /etc/rancher/k3s/registries.yaml 是否存在,并将其设置合并到 containerd 配置中,以便对私有仓库进行身份验证。
  • 使用 kubelet 凭证提供者插件 – 配置 kubelet 调用插件二进制文件,动态获取仓库凭证。

动机

本例的目标是从 AWS Elastic Container Registry (ECR) 拉取镜像,但无法修改上述集群级别的配置。ecr-creds-refresher 操作员提供了一种便利的变通方案。

前置条件

  1. 拥有必要 ECR 权限的 AWS 用户或角色。
  2. 集群中可用的有效 AWS 凭证(例如 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY,或在假设角色时使用的临时凭证)。

注意: ECR 身份验证令牌授予对 IAM 主体能够访问的任何 Amazon ECR 仓库的访问权限,且有效期为 12 小时

未提供正确凭证时会失败的示例 Pod

kubectl run test \
  --image=255656399702.dkr.ecr.us-east-1.amazonaws.com/os/alpine:latest \
  --image-pull-policy=Always \
  -- sleep 5

该 Pod 会进入 ImagePullBackOff,因为它无法对私有 ECR 仓库进行身份验证。

必要的修复步骤

  1. 创建一个 Secret,存放 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
  2. 获取 ECR 身份验证令牌。这正是 ecr-creds-refresher 所自动化的工作。

ecr-creds-refresher 的工作原理

  • 启动时: 从配置的 Secret 中读取 AWS 凭证(该 Secret 可以位于任意命名空间)。
  • 监听: 监视 ECRPullSecret 自定义资源。创建、更新或恢复时,它会:
    1. 从 AWS 获取新的 ECR 令牌。
    2. 更新保存令牌的 Secret。
    3. 为自定义资源指定的命名空间中的默认 ServiceAccount 打补丁。
  • 周期性刷新: 定期更新 ECR 令牌,并在目标命名空间中更新所有相关的 Secret。

目标命名空间 是指你计划运行从私有 ECR 仓库拉取镜像的 Pod 所在的命名空间。这些命名空间可以通过操作员的自定义资源进行配置。

演示 & 仓库

  • 演示:🔄 Operator 👉 demo
  • 源代码:ecr-creds-refresher (GitHub repository)
Back to Blog

相关文章

阅读更多 »