从 ECR 拉取镜像到 Kubernetes 部署文件

sks*_*245 2 amazon-web-services docker kubernetes rancher amazon-ecr

我在从 AWS ECR 存储库中提取 docker 映像时遇到了这个问题,我之前使用过

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
Run Code Online (Sandbox Code Playgroud)

部署 YAML 文件

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: privateapp
    image: kammana/privateapp:0.0.1
  imagePullSecrets:
  - name: regcred
Run Code Online (Sandbox Code Playgroud)

但是现在,当您为 ECR 生成时,密码的有效期仅为 12 小时,我每次都必须手动更改密码。这很忙,我读了一篇Medium文章

它可以创建某种 cron 作业,但我想在运行时通过登录 ECR 来提取图像。

如果您可以提供一些有关通过 Kubernetes 进行 ECR 直接登录的相关示例,并且我的集群不在同一个 AWS 账户中,因此 AWS IAM 角色是不可能的,那将会很有帮助。

ixa*_*aar 6

我有同样的问题,我在 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
Run Code Online (Sandbox Code Playgroud)