我使用 AWS ECR 创建了一个私有 Docker 注册表。我想将其与 Rancher 管理的 Kubernetes 集群一起使用,但 AWS 每 12 小时会更改一次注册表的密码。如何将其作为集群中的机密保持更新?
答案1
在 Rancher 2.x 中为 AWS ECR repo 创建和更新 docker-registry secret 的最简单方法是设置使用 AWS CLI 和 Kubectl 的 CRON 作业。
- 登录集群运行的主机
- 安装 AWS CLI 并将其配置为使用可以读取 ECR 凭证的 IAM 角色。
- 使用以下命令测试 CLI 配置:
aws ecr --region <你的ecr区域> 获取登录密码
- 安装 kubectl 并使用您想要定义秘密的集群的 yaml 对其进行配置,然后运行
kubectl get pods
以确保一切正常。 - 创建一个像这样的 shell 脚本(删除是必要的,因为由于某种原因无法更新/覆盖秘密):
kubectl delete secret <name_of_the_docker_registry_secret> kubectl create secret docker-registry <name_of_the_docker_registry_secret> \ --docker-server=<your_ecr_registry_uri> \ --docker-username=AWS \ --docker-password=$(aws ecr --region <your_ecr's_region> get-login-password) \ --docker-email=<your_notification_email>
- 设置一个 cron 作业,每 6 小时运行一次此 shell 脚本(AWS 每 12 小时重置一次密码,以确保安全)。
该密钥将显示在集群的默认项目中,并且每当 Kubernetes 想要执行与您的 ECR 注册表相关的事情时都会使用它。