본문 바로가기

가상화/Kubernetes

[Docker] Priviate registry 구성 #2 - TLS 구성

반응형

개요

Registry 서버는 디폴트로 HTTP 통신을 하여 이미지를 업로드 및 다운로드를 한다. 근데 클라이언트는 기본적으로 이미지를 다운로드 할때 HTTPS를 이용한다. 이럴 경우 클라이언트의 daemon.json 파일에 Registry 주소를 추가해는 약간의 번거러움이 있을 뿐만아니라, 안전한 통신을 위해서라도  HTTPS를 추천한다. 

구성환경

Docker 19.03, Regsitry 2.7.1

참조 : https://docs.docker.com/registry/deploying/

 

구성절차

1. Registry 설치
2. 인증서 생성(사설 인증서)
3. TLS 인증서를 사용해서 Registry 컨테이너 시작
4. 이미지 업로드, 다운로드 테스트

 

1. Registry 설치

shell> docke pull registry:2.7.1

2. 인증서 생성(사설 인증서)

  - HTTPS에 사용될 개인키(domain.key), 서버인증서(domain.crt), RootCA(rootca.crt)  3개의 파일을 만든다. 단 개인키에서 패스워드를 제거하도록 한다. 개인키에 패스워드가 있을 경우 registry 컨테이너 구동시 패스워드 입력을 받기 위해  restarting 상태로 된다.

  SSL 인증서 설치 바로 가기

3. TLS 인증서를 사용하도록 Registry 컨테이너 시작

  - 개인키, 서버인증서는 /opt/registry/certs 폴더에 저장한다.

  - RootCA 인증서는 서버,클라이언트의 /etc/docker/certs.d/registry_ip_or_registry_url/ 디렉토리에 저장( 예 , registry URL이  registry.domain.com 이라고 하면 디렉토리는 /etc/docker/certs.d/registry.domain.com/ 이 된다.) RootCA 인증서를 추가한 후에는 Docker를 재시작 해야 적용이 된다.

docker run -d \
  --restart=always \
  --name registry \
  -v /opt/registry/certs:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -e REGISTRY_STORAGE_DELETE_ENABLED=true \
  -p 443:443 \
  registry:2.7.1

*  -e REGISTRY_STORAGE_DELETE_ENABLED=true 옵션은 curl 명령어의 DELETE 메소드를 이용한 삭제를 허용

4. 이미지 업로드, 다운로드 테스트

shell> docker pull ubuntu:18.04 
shell> docker tag ubuntu:18.04 myregistry.domain.com/my-ubuntu:18.04 
shell> docker push myregistry.domain.com/my-ubuntu:18.04 
shell> docker pull myregistry.domain.com/my-ubuntu:18.04

* myregistry.domain.com이 registry 서버 URL 이 된다.

 

트러블 슈팅

증상) Registry URL이 인증서의 CN(common Name) 또는 주체(대체)이름과 일치하지 않을 경우 아래와 같은 오류 발생

 Warning  Failed     10s              kubelet, mydebian2  Failed to pull image "192.168.0.167/ubuntu": rpc error: code = Unknown desc = Error response from daemon: Get https://192.168.0.167/v2/: x509: cannot validate certificate for 192.168.0.167 because it doesn't contain any IP SANs

- 조치 : 서버 인증서의 CN 또는 주체(대체)이름을 Registry URL과 일치 시킨다.

 

증상) RootCA 인증서 미등록시

Warning  Failed     4s (x2 over 17s)   kubelet, mydebian2  Failed to pull image "registry.hoya.com/ubuntu": rpc error: code = Unknown desc = Error response from daemon: Get https://registry.hoya.com/v2/: x509: certificate signed by unknown authority

- 조치 : RootCA를 서버와 클라이언트의 /etc/docker/certs.d/registry.domain.com/ 디렉토리에 추가 한다.

 

Private registry 구성 #1 - 설치

Private registry 구성 #3 - 인증 구성

반응형

'가상화 > Kubernetes' 카테고리의 다른 글

[Docker] Private registry 이미지 삭제  (4) 2020.04.02
[kubernetes] NFS 구성  (0) 2020.04.01
[Docker] Priviate registry 구성 #1 - 설치  (0) 2020.03.31
[kubernetes] TroubelShooting  (0) 2020.03.27
[Docker] Image Build  (0) 2020.03.25