将映像从ECR拉至Kubernetes部署文件

问题描述

我以前使用过从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

根据您的情况,您将必须在助手窗格中编写一些脚本,以执行以下步骤。

  1. 获取登录密码并将其保存在变量中。
aws ecr get-login-password --region <<someregion>> 
  1. 删除您现有的秘密
kubectl delete secret <<secretname>> 
  1. 使用新密码重新创建机密。
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小时重置一次

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...