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 操作员提供了一种便利的变通方案。
前置条件
- 拥有必要 ECR 权限的 AWS 用户或角色。
- 集群中可用的有效 AWS 凭证(例如
AWS_ACCESS_KEY_ID和AWS_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 仓库进行身份验证。
必要的修复步骤
- 创建一个 Secret,存放
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。 - 获取 ECR 身份验证令牌。这正是
ecr-creds-refresher所自动化的工作。
ecr-creds-refresher 的工作原理
- 启动时: 从配置的 Secret 中读取 AWS 凭证(该 Secret 可以位于任意命名空间)。
- 监听: 监视
ECRPullSecret自定义资源。创建、更新或恢复时,它会:- 从 AWS 获取新的 ECR 令牌。
- 更新保存令牌的 Secret。
- 为自定义资源指定的命名空间中的默认
ServiceAccount打补丁。
- 周期性刷新: 定期更新 ECR 令牌,并在目标命名空间中更新所有相关的 Secret。
目标命名空间 是指你计划运行从私有 ECR 仓库拉取镜像的 Pod 所在的命名空间。这些命名空间可以通过操作员的自定义资源进行配置。
演示 & 仓库
- 演示:
🔄 Operator 👉 demo - 源代码:
ecr-creds-refresher(GitHub repository)