도커 tcp 포트 개방 및 기본 설정

1vl·2024년 2월 21일
0

삽질기록

목록 보기
2/2
post-thumbnail

서론: 예전부터 사용하던 오라클 클라우드 무료 인스턴스 2개가 있었다. 항상 간단한 도커 이미지를 통해 24시간 돌아가는 작업을 하는데 쓰기 딱 좋았는데, 2개로 나뉘어져 있다보니 관리가 귀찮았다.
그래서 도커 스웜이나 쿠버네티스 같은 거창한 변경 없이, 기존 도커 데몬을 외부에서 접근 가능하도록 하고, 이미 설치된 포테이너와 젠킨스에서 서로 관리하도록 하기로 했다.

하지만 내 소중한 인스턴스를 그냥 오픈하기엔 너무 두려웠으므로, self-signed tls 인증서를 통해 보호받도록 세팅하기로 했다.

본론: https://docs.docker.com/ 의 도커 공식문서대로 도커가 설치된 위치에서 발급받아 진행해 주면 된다. 인증서를 모두 발급받으면 대략 아래와 같은 파일들이 생성된다.

처음 공식문서를 따라가서 외부 접속이 잘 되게 설정을 끝마쳤지만, 젠킨스에서 인증서 Certificate를 등록하는데 문제가 생겼었다.
Dashboard > Jenkins 관리 > Credentials > X.509 Client Certificate

이 때 CA.PEM의 값을 넣어야 하는 칸을 sercer-ca.pem을 넣어야 한다고 오해하고, 오류를 해결하고자 재발급, 설정 변경을 진행하며 여러 가이드를 참고하다 보니, 인증서 파일명이 다르게 설정된 가이드의 서로 다른 부분을 참조하다가 문제가 발생한 적이 있었다.

공식문서에는 server-key.pem, server-cert.pem였지만, 다른 가이드에서는 key.pem, cert.pem로 안내된 것을 놓치고 지나쳤던 것이다.

certificate is not valid for any names, but wanted to match $hostname

# 

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 \
  --tlsverify --tlscacert={인증서 경로}/ca.pem \
  --tlskey={인증서 경로}/server-key.pem \ <- 이 부분을 key.pem으로, 
  --tlscert={인증서 경로}/server-cert.pem <- 이 부분을 cert.pem으로 입력했었다.

드디어 문제점을 인지하고 수정한 결과, 원하던 대로 잘 작동하게 되었다.

결론: 인증서 이름을 잘 확인하고, 특히 여러 가이드를 짜집기해서 따라할 때는 두 번씩 읽어보자.

참고링크:
https://docs.docker.com/config/daemon/remote-access/
https://docs.docker.com/config/daemon/systemd/
https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket
https://riptutorial.com/docker/example/17079/enable-remote-access-with-tls-on-systemd
https://epozen-dt.github.io/docker-remote-api-security/

profile
React-Native, Flutter, Java, Spring, lua

0개의 댓글