[英]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 小時內有效,我每次都必須手動更改密碼。 這很忙,我讀了一篇 Medium 文章。
它可以創建一種 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 實例以每隔 12 小時使用 get-login to ECR 重新進行身份驗證。
以下是獲取密碼和登錄的命令。
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 小時重置一次
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.