개요
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> |
'가상화 > Kubernetes' 카테고리의 다른 글
[kubernetes] Kubernetes에서 Ingress 와 Tomcat 연동 (0) | 2020.04.10 |
---|---|
[kubernetes] 노드 유지보수 (0) | 2020.04.09 |
[kubernetes] Pod 재시작 (1) | 2020.04.08 |
[kubernetes] 인그레스(Ingress)를 사용하여 HTTP(S) 부하 분산기 구성 #2 - HTTPS 부하 분산 (0) | 2020.04.07 |
[Docker] 컨테이너와 로컬 파일 시스템간에 파일 / 폴더 복사 (0) | 2020.04.06 |