从 ECR 拉取镜像到 Kubernetes 部署文件
Pull image from ECR to Kubernetes deployment file
我在从 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
部署 YAML 文件
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: privateapp
image: kammana/privateapp:0.0.1
imagePullSecrets:
- name: regcred
但现在生成ECR时密码的有效期只有12小时,我每次都得手动改密码。这很忙,我读了一篇中等文章 article。
它可以创建某种 cron 作业,但我想通过登录 ECR 在运行时拉取图像。
如果您能提供一些关于通过 Kubernetes 直接登录 ECR 的相关示例,并且我的集群不在同一个 AWS 帐户中,因此 AWS IAM 角色不存在问题,这将很有帮助。
有一个名为 k8s-ecr-login-renew
的小工具可以满足您的需求。
这是真的,通常的方法是每次登录 ECR 时获取密码。这是来自 AWS 文档的片段
The generated token is valid for 12 hours, which means developers
running and managing container images have to re-authenticate every 12
hours manually, or script it to generate a new token, which can be
somewhat cumbersome in a CI/CD environment. For example if you’re
using Jenkins to build and push docker images to ECR, you have to set
up Jenkins instances to re-authenticate using get-login to ECR every
12 hours.
link to the full AWS documentation
下面是获取密码和登录的命令。
aws ecr get-login-password --region <<someregion>> | docker login --username <<someusername>> --password-stdin https://<<someaccount>>.amazonaws.com
在您的情况下,您必须在帮助程序 pod 中编写一些脚本来执行以下步骤。
- 获取登录密码并保存在变量中
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 小时重置一次
我有同样的问题,我在 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
我在从 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
部署 YAML 文件
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: privateapp
image: kammana/privateapp:0.0.1
imagePullSecrets:
- name: regcred
但现在生成ECR时密码的有效期只有12小时,我每次都得手动改密码。这很忙,我读了一篇中等文章 article。
它可以创建某种 cron 作业,但我想通过登录 ECR 在运行时拉取图像。
如果您能提供一些关于通过 Kubernetes 直接登录 ECR 的相关示例,并且我的集群不在同一个 AWS 帐户中,因此 AWS IAM 角色不存在问题,这将很有帮助。
有一个名为 k8s-ecr-login-renew
的小工具可以满足您的需求。
这是真的,通常的方法是每次登录 ECR 时获取密码。这是来自 AWS 文档的片段
The generated token is valid for 12 hours, which means developers running and managing container images have to re-authenticate every 12 hours manually, or script it to generate a new token, which can be somewhat cumbersome in a CI/CD environment. For example if you’re using Jenkins to build and push docker images to ECR, you have to set up Jenkins instances to re-authenticate using get-login to ECR every 12 hours.
link to the full AWS documentation
下面是获取密码和登录的命令。
aws ecr get-login-password --region <<someregion>> | docker login --username <<someusername>> --password-stdin https://<<someaccount>>.amazonaws.com
在您的情况下,您必须在帮助程序 pod 中编写一些脚本来执行以下步骤。
- 获取登录密码并保存在变量中
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 小时重置一次
我有同样的问题,我在 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