본문 바로가기

가상화/Kubernetes

[Docker] Priviate registry 구성 #4 - imagePullSecrets 작성

반응형

개요

kubernetes cluster 환경에서 private registry에 사용자 인증이 설정되어 있을 경우, 작업 노드(woker node)에서 이미지를 pull 하기 위해서는 배치 파일에 imagePullSecrets 섹션을 설정해야만 이미지를 pull 할수 있다. 여기서는 secret 생성 및 배치에 imagePullSecret 섹션 설정 방법에 대해 알아보도록 한다.


구성환경

kubernetes v1.17.4, docker-ce-19.03.5, registry 2.7.1


1. 기존 존재하는 Docker 자격 증명을 기반으로 Secret 만들기

 docker login <private registry server> 명령어를 실행하면 $HOME/.docker/config.json 파일에 자격증명이 만들어 진다. 이 파일을 이용하여 Secret을 만들어 보자

Usage :

kubectl create secret generic regcred \
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
    --type=kubernetes.io/dockerconfigjson

예시) recred 라는 이름의 secret 생성

shell> kubectl create secret generic regcred \
 --from-file=.dockerconfigjson=/home/hoya/.docker/config.json \
 --type=kubernetes.io/dockerconfigjson
secret/regcred created
shell> kubectl get secret regcred
NAME      TYPE                             DATA   AGE
regcred   kubernetes.io/dockerconfigjson   1      25m
shell> kubectl get secret regcred --output=yaml
apiVersion: v1
data:
  .dockerconfigjson: ewoJImxxxxxxxxxxxxxxxxxxxxxJImF
0iCxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkiVXN
ci1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxIKCX0KfQ==
kind: Secret
metadata:
  creationTimestamp: "2020-04-08T14:11:17Z"
  name: regcred
  namespace: default
  resourceVersion: "2039468"
  selfLink: /api/v1/namespaces/default/secrets/regcred
  uid: 4bf80e2e-44c6-41cf-b9eb-565a1fda2f07
type: kubernetes.io/dockerconfigjson
shell>

2. 명령 행에서 Credetial 정보를 제공하여 secret 작성

Usage : 

kubectl create secret docker-registry regcred \
  --docker-server=<your-registry-server> --docker-username=<your-name> \
  --docker-password=<your-pword> --docker-email=<your-email>

예시) recred 라는 이름의 secret 생성

kubectl create secret docker-registry regcred \
  --docker-server=registry.hoya.com --docker-username=user1 \
  --docker-password=password123 --docker-email=user1@domain.com

3. 배치에 imagePullSecret 섹션 설정 방법

  예시) nginx-demo.yaml

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: nginx-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      hostNetwork: false
      containers:
      - name: nginx
        image: registry.hoya.com/developer/nginx
        ports: []
        resources:
          limits: {}
      imagePullSecrets:
      - name: recred

4. Troubleshooting

 -  kubernetes cluster 환경에서 Private Registr에 있는 이미지를 다운 받을려고 할경우 배치에 imagePullSecrets 를 지정하지 않았을 경우 아래와 같은 "no basic auth credentials" 오류 메시지가 발생한다.

shell> kubectl describe pod nginxnfs-deployment-b8647bf5b-qvr66
Name:         nginxnfs-deployment-b8647bf5b-qvr66
... 중략 ...
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  31s                default-scheduler  Successfully assigned default/nginxnfs-deployment-b8647bf5b-qvr66 to ubuntu3
  Normal   BackOff    28s (x2 over 29s)  kubelet, ubuntu3   Back-off pulling image "registry.hoya.com/nginxnfs:v3"
  Warning  Failed     28s (x2 over 29s)  kubelet, ubuntu3   Error: ImagePullBackOff
  Normal   Pulling    13s (x2 over 30s)  kubelet, ubuntu3   Pulling image "registry.hoya.com/nginxnfs:v3"
  Warning  Failed     13s (x2 over 30s)  kubelet, ubuntu3   Failed to pull image "registry.hoya.com/nginxnfs:v3": rpc error: code = Unknown desc = Error response from daemon: Get https://registry.hoya.com/v2/nginxnfs/manifests/v3: no basic auth credentials
  Warning  Failed     13s (x2 over 30s)  kubelet, ubuntu3   Error: ErrImagePull
shell>

 

반응형