问题描述
我以前使用过从AWS ECR存储库中提取docker映像时遇到了问题
con <- DBI::dbConnect(odbc::odbc(),driver = params.sql.driver,server = params.sql.server,database = params.sql.database,encoding = params.sql.encoding)
部署YAML文件
kubectl create secret docker-registry regcred --docker-server=https://index.docker.io/v1/ --docker-username=kammana --docker-password=<your-password> --docker-email=hari.kammana@gmail.com
但是现在,当您为ECR生成密码时,密码仅在12个小时内有效,我每次都必须手动更改密码。这太忙了,我读了中等article。
它可以创建某种cron作业,但我想通过登录ECR在运行时提取图像。
如果您可以提供一些有关通过Kubernetes进行ECR直接登录的相关示例,并且我的集群不在同一AWS账户中,那么AWS IAM角色就毫无疑问。
解决方法
我遇到了同样的问题,我在 cron 中使用了它:
# KUBECTL='kubectl --dry-run=client'
KUBECTL='kubectl'
ENVIRONMENT=sandbox # yes,typo
AWS_DEFAULT_REGION=moon-west-1
EXISTS=$($KUBECTL get secret "$ENVIRONMENT-aws-ecr-$AWS_DEFAULT_REGION" | tail -n 1 | cut -d ' ' -f 1)
if [ "$EXISTS" = "$ENVIRONMENT-aws-ecr-$AWS_DEFAULT_REGION" ]; then
echo "Secret exists,deleting"
$KUBECTL delete secrets "$ENVIRONMENT-aws-ecr-$AWS_DEFAULT_REGION"
fi
PASS=$(aws ecr get-login-password --region $AWS_DEFAULT_REGION)
$KUBECTL create secret docker-registry $ENVIRONMENT-aws-ecr-$AWS_DEFAULT_REGION \
--docker-server=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com \
--docker-username=AWS \
--docker-password=$PASS \
--docker-email=infra@setu.co --namespace collect
,
有一个名为k8s-ecr-login-renew
的小工具可以完全满足您的需求。
这是事实,通常的方法是每次您希望登录ECR时都获取密码。这是AWS文档中的片段,
生成的令牌有效期为12个小时,这意味着开发人员 运行和管理容器映像必须每12个重新进行一次身份验证 小时手动操作,或编写脚本以生成新令牌,该令牌可以是 在CI / CD环境中有些麻烦。例如,如果您 使用Jenkins将docker镜像构建并推送到ECR,您必须设置 每个Jenkins实例使用get-login进行ECR重新认证 12小时。
link to the full AWS documentation
下面是用于获取密码和登录的命令。
aws ecr get-login-password --region <<someregion>> | docker login --username <<someusername>> --password-stdin https://<<someaccount>>.amazonaws.com
根据您的情况,您将必须在助手窗格中编写一些脚本,以执行以下步骤。
- 获取登录密码并将其保存在变量中。
aws ecr get-login-password --region <<someregion>>
- 删除您现有的秘密
kubectl delete secret <<secretname>>
- 使用新密码重新创建机密。
kubectl create secret docker-registry regcred --docker-server=https://index.docker.io/v1/ --docker-username=kammana --docker-password=<newpassword> --docker-email=hari.kammana@gmail.com
您可以尝试cronjob每隔12小时重置一次