IT/Docker

[Docker] 도커 재시작 없이 CA 인증서만 업데이트하는 방법

wookiist 2021. 5. 28. 05:00

Prologue

그동안 사내에서 Private Registry를 구축해서 사용하다보니, HTTPS 인증 때문에 인증서 파일을 업데이트하고 도커 데몬을 재시작해주어야 하는 경우가 종종 있었습니다. 만약에 도커 데몬을 재시작하지 않은 상태로 Login을 시도하면 아래와 같은 에러가 발생합니다.

Error response from daemon: Get https://192.168.1.1/v1/users/: x509: certificate signed by unknown authority

하지만 매우 중요한 프로세스가 운용되고 있는 노드에 대해선 도커 데몬을 재시작하는 것이 상당히 부담이 되었습니다. 경험상 도커를 재시작하고나서 정상적으로 실행되지 않는 프로세스들이 몇몇 있었기 때문입니다. 때문에 Private Registry에서 이미지를 받아와야 하는 경우, 특정 노드에 대해선 해당 작업을 수행하지 않도록 Labeling을 해두는 방식으로 우회해서 사용하고 있었습니다.

그러다 혹시나 하는 마음에 "without restarting docker" 라는 검색어를 필수로 해서 구글링한 결과 발견한 엄청난 글......

https://bugzilla.redhat.com/show_bug.cgi?id=1713333

https://user-images.githubusercontent.com/16011260/119792726-e3f81380-bf10-11eb-8f7b-1ed8fd891ebf.png

인증서 등록 작업

우선 등록하고자 하는 Private Registry의 IP로 /etc/docker/certs.d/ 디렉터리 아래에 새 디렉터리를 생성합니다. 본 포스트에서는 예시를 위해 192.168.1.1이라고 하겠습니다. 만약 포트 번호까지 필요하다면 다음의 이름으로 디렉터리를 생성하면 됩니다. 192.168.1.1:5000

$ sudo mkdir -p /etc/docker/certs.d/192.168.1.1

등록하고자 하는 Private Registry의 공개키를 암호화한 CA의 공개키를, 생성한 디렉터리에 복사, 붙여넣기 합니다. CA의 공개키 이름을 ca.crt 라고 가정하겠습니다. 또한 공개키 파일은 현재 홈 디렉터리에 위치해있다고 가정하겠습니다.

$ sudo cp ~/ca.crt /etc/docker/certs.d/192.168.1.1/

이제 모든 절차가 끝났습니다. 이래도 되는 건가 싶지만, 정말 끝났습니다. 마지막으로 등록하고자 한 Private Registry에 로그인을 해주면 됩니다.

$ docker login -u xxx -p yyy 192.168.1.1
# Login Succeeded

이렇게 해서 도커 데몬을 재시작하지 않고도 인증서 업데이트가 이루어졌습니다!

마무리

여기까지 따라오시느라 고생이 많으셨습니다. 만약 이 튜토리얼이 도움이 되셨다면 글 좌측 하단의 하트❤를 눌러주시면 감사하겠습니다.

혹시라도 튜토리얼에 이상이 있거나, 이해가 가지 않으시는 부분, 또는 추가적으로 궁금하신 내용이 있다면 주저 마시고 댓글💬을 남겨주세요! 빠른 시간 안에 답변을 드리겠습니다 😊

참고

반응형