[CKA] Private Registry 이미지 보안

Private Registry 이미지 보안의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.

파드 정의 파일에서 컨테이너 이미지 이름은 Docker의 이미지 명명 규칙을 따른 것입니다.
대표적으로 nginx는 이미지 혹은 저장소 이름으로 인식되며, 대부분의 이미지 이름 앞 부분은 사용자 또는 계정 이름이다. 그래서 사용자나 계정 이름을 제공하지 않으면 library라고 인식합니다.** library는 docker의 공식 이미지가 저장되는 기본 계정의 이름입니다.**
사용자 이름의 앞 부분은 레지스트리 이름으로, 레지스트리 이름이 지정되지 않았다면 Docker의 기본값 레지스트리인 Docker Hub로 추정됩니다.
Docker Hub의 DNS 이름은 docker.io이다.

레지스트리는 모든 이미지를 저장하는 곳 입니다.새 이미지를 생성하거나 이미지를 업데이트할 때마다 레지스트리에 푸시(push)하면 누군가 이 응용 프로그램을 배포할 때마다 레지스트리에서 끌어옵니다(pull).
Docker hub 이 외에도 구글의 gcr 등 유명한 레지스트리들이 많습니다. 일반인에게 공개되어서는 안되는 응용 프로그램이 있을 경우 private registry를 사용할 수 있으며 private registry에 접근하기 위해서는 자격 증명이 필요합니다.

파드 정의 파일에서 개인 레지스트리에 있는 이미지를 사용할 수 있습니다.
이런 경우, 개인 레지스트리에 접근하기 위한 자격 증명을 포함하는 Secret 개체를 생성하고 파드 정의 파일에서 imagePullSecrets 필드로 Secret 개체를 참조하게 함으로써 인증과정을 해결할 수 있습니다.


Private Registry 인증 정보로 Secret 생성

= 사이사이 공백이 없어야 합니다.

kubectl create secret docker-registry private-reg-cred \
--docker-server=registry.example.com:5000 \
--docker-username=dock_user \
--docker-password=dock_password \
--docker-email=user@example.com

spec은 Kubernetes 리소스의 “명세서” 또는 “설계도”입니다.
imagePullSecrets 는 spec 아래에 있어야합니다.

    spec:
      containers:
      - image: registry.example.com:5000/nginx:alpine
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      imagePullSecrets:
        - name: private-reg-cred