Container/Kubernetes

[Kubernetes] 쿠버네티스 Docker Hub-Private Image 가져오는 방법

Nirsa 2020. 2. 27. 15:54
반응형

 

  • 쿠버네티스 Docker Hub-Private Image 가져오는 방법

Private Image를 가져와야 할 때 쿠버네티스의 secret을 이용하면 됩니다. 이 글에서는 Docker Hub을 기준으로 작성 합니다. 우선 Private Image 가져오는 방법인 만큼 아래와 같이 이미 Docker Hub에 이미지가 등록되어 있다는 가정하에 진행 합니다.

 

  • 쿠버네티스 매니페스트 파일 작성

저는 아래와 같이 간단한 Deployment를 설정해주는 매니페스트 파일(.yaml)을 작성 하였습니다.

Private Image를 가져와서 사용할 매니페스트 파일을 vi편집기로 여신 후 spec.template.spec.ImagePullSecrets.name 필드에 임의의 값을 설정 해줍니다. 이 값은 이후 생성할 secret name 이므로 참고하여 작성해주시면 됩니다. 또한 image 명도 재대로 입력 해주셔야 합니다.

* 매니페스트 파일에 필요한 필드만 작성 후 아직 apply는 하지 말아주세요.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nirsa/nginx		## docker hub 이미지 지정
        ports:
        - containerPort: 80
      imagePullSecrets:			## 참조할 secret name
      - name: dockersecret
  • spec.template.spec.containers.image → Docker Hub에 등록된 이미지의 이름을 등록 합니다. 일반적으로 [DockerHub사용자명]/[이미지이름] 의 형태를 가지며 뒤에 버전이 추가될 수 있습니다. 이미지명을 모른다면 docker hub 홈페이지에 접속하여 로그인 후 확인하시면 됩니다. 
  • spec.template.spec.ImagePullSecrets.name → 어떤 name을 가진 secret을 참조할 지 설정하는 부분 입니다. 이후 커맨드를 통해 생성할 name을 지정하게 되는데, 우선 저는 dockersecret으로 설정 하였습니다.

 

  • 쿠버네티스 secret 생성

쿠버네티스의 마스터 노드에서 아래와 같이 명령어를 입력 해줍니다. []으로 묶어준 부분들은 모두 상황에 따라 작성 해주셔야 하는 부분 입니다. 아래 내용을 참고하여 커맨드 작성 후 엔터를 치시면 secret이 생성된걸 확인할 수 있습니다.

  • [secret name] 은 위에서 작성했던 매니페스트 파일에 기입한 name을 작성해주셔야 합니다. (~ImagePullSecrets.name 부분에 작성한 내용으로, 저같은 경우 dockersecret 이 됩니다.)
  • Docker Hub 계정과 패스워드는 실제로 Private Image가 등록되어 있는 Docker Hub의 계정과 패스워드를 작성해주어야 합니다.
kubectl create secret docker-registry [secret name] --docker-username="[Docker Hub 계정]" \
--docker-password="[Docker Hub 패스워드]" --docker-server=https://index.docker.io/v1/

 

  • Private Image 파일을 잘 가져오는지 확인

이제 Docker Hub의 Private Image 파일을 가져올 준비는 모두 되었으니, 작성해두었던 매니페스트 파일을 apply 하여 실제로 잘 가져오는지 확인만 하면 됩니다.

kubectl describe [pod name] | grep Image 명령어를 통해 정상적으로 원하는 이미지 파일을 가져 왔는지도 볼 수 있습니다.

 

  • ImagePullBackOff 발생 시

만약 매니페스트 파일에 작성한 spec.template.spec.ImagePullSecrets.name 필드에 작성한 secret name이 다르다면 정상적으로 이미지 파일을 가져올 수 없습니다. 또는 secret에 등록한 docker hub 계정 정보가 달라 docker hub에 접근할 수 없어 이미지를 못가져와서 발생할수도 있습니다.

  1. 매니페스트 파일에 작성한 secret name과 생성한 secret name이 같은지 다시 한번 확인 해보세요. (secret name은 kubectl get secret 으로 확인할 수 있습니다. 만약 없다면 생성되지 않은것입니다)
  2. secret을 생성할때 등록한 docker hub의 계정 정보가 맞는지 확인 해보세요.

 

아래 예시는 secret name이 dockersecret으로 되어 있지만, 매니페스트 파일에는 dockersecret2로 저장하였고 그 후 apply 할 때 secret을 참조할 수 없어 이미지를 못가져오고 ImagePullBackOff가 발생합니다.

 

반응형