簡體   English   中英

從 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 小時內有效,我每次都必須手動更改密碼。 這很忙,我讀了一篇 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 文檔的鏈接

以下是獲取密碼和登錄的命令。

aws ecr get-login-password --region <<someregion>> | docker login --username <<someusername>> --password-stdin https://<<someaccount>>.amazonaws.com

在您的情況下,您必須在幫助程序 pod 中編寫一些腳本才能執行以下步驟。

  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 小時重置一次

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM