가상화/Kubernetes
[Docker] Priviate registry 구성 #4 - imagePullSecrets 작성
날았다 고양이
2020. 4. 9. 00:18
반응형
개요
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> |
반응형