본문 바로가기

개발관련/Kubernetes

Kubernetes에서 AWS ECR의 이미지를 내려받을 때 rpc error: code = Unknown desc = failed to pull and unpack image 에러 발생 경우 해결방법

반응형

참고 : https://stackoverflow.com/questions/53852007/kubectl-pod-fails-to-pull-down-an-aws-ecr-image

 

kubectl pod fails to pull down an AWS ECR image

step 1 sudo $(aws ecr get-login --no-include-email --region xx-xxxx-x) step 2 curl -LSs https://github.com/fermayo/ecr-k8s-secret/raw/master/gen-secret.sh | bash - step 3 kubectl describe secret ...

stackoverflow.com

https://managedkube.com/kubernetes/k8sbot/troubleshooting/imagepullbackoff/2019/02/23/imagepullbackoff.html

 

Kubernetes Troubleshooting Walkthrough - imagepullbackoff

k8sBot makes Kubernetes easier to use. A Slack app that provides Kubectl-like information with a point-and-click user interface.

managedkube.com

 

이미지가 비공개(Private)인 경우 이미지를 가져오려면 적절한 인증을 가진 비밀을 Pod에 제공해야한다.

 

따라서 아래와 같은 작업이 필요하다.

- Kubernetes에 자격 증명 secret 추가

- Pod 정의에 사용할 secret 참조 추가

 

Kubernetes에 자격 증명 secret 추가

#!/bin/bash

ACCOUNT=222333666777 # AWS ECR 이미지 URL 맨 앞에 기재되어있는 12자리 숫자
REGION=ap-northeast-2 # 서울 리젼(예시)
SECRET_NAME=${REGION}-ecr-registry # 생성될 secret의 이름. 여기서 생성될 이름은 ap-northeast-2-ecr-registry가 되겠다.
EMAIL=bsc0227@naver.com # 임의의 이메일

TOKEN=`aws ecr --region=$REGION get-authorization-token --output text --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2`

# Create or replace registry secret

microk8s.kubectl delete secret --ignore-not-found $SECRET_NAME
microk8s.kubectl create secret docker-registry $SECRET_NAME \
--docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \
--docker-username=AWS \
--docker-password="${TOKEN}" \
--docker-email="${EMAIL}"

 

Pod 정의에 사용할 secret 참조 추가

apiVersion: v1
kind: Pod
metadata:
  name: foo
  namespace: awesomeapps
spec:
  containers:
    - name: foo
      image: 222333666777.dkr.ecr.ap-northeast-2.amazonaws.com/bar:latest
  imagePullSecrets:
    - name: ap-northeast-2-ecr-registry # 위에서 생성한 secret을 기입한다.

 

반응형