즐겁게 개발을...

개발보다 게임이 더 많이 올라오는 것 같은...

써드파티 도구/Docker

[2020.11] 다중호스트에서의 Docker 운용방식에 대한 고찰

다물칸 2020. 11. 12. 10:54
728x90
반응형

도커를 접한지 약 3년이 된 것 같습니다. 처음에는 Docker-Composer를 이용해서 개발이 시작됐는데요.

싱글 호스트에서는 당연히 잘됩니다. Depend On을 이용해서 컨테이너가 정상적으로 실행되야 다음 컨테이너가 실행되게 하는 기능을 이용해서 잘 개발이 됐는데, 멀티 호스트에서는 어떻게 해야 되지?? 

그래서 찾아보니 도커 스웜, 쿠버네티스 같은 것들이 나왔습니다. 대체 이게 뭔가?? 쿠버네티스는 수천개의 컨테이너를 운용하는 구글에서 관리목적으로 내부에서만 사용하려고 만들었다가 공개한 솔루션입니다. 그래서 그런지 러닝 커브가 극심하죠. 

밋업에서조차 운용하는 대상이 많을 경우에만 사용해야지 10개 미만의 컨테이너에서는 오버 스팩이라고도 들었습니다. 

근데 도커 스웜은 기술지원까지 종료가 되었죠. 아마 쿠버네티스의 독주때문이라고 사료됩니다. 

 

원리는 프록시를 운용해서 메인노드에 조인된 노드끼리의 네트워크를 가상으로 하나의 네트워크로 만드는 것이 주요 기능입니다. 

쿠버네티스는 이것에 더한 기능들이 많아서 러닝커브가 많은 겁니다. Helm차트부터 시작해서 해야 할 것들이 많다 라는 점때문에 좀 보다가 말았습니다. 

 

도커를 설치하면 도커 NAT(DHCP를 이용한 가상의 네트워크)가 호스트에 실행됩니다. 다른 호스트의 컨테이너에 직접적으로 붙을 수가 없죠.

서로 다른 NAT니까요. 보통 이런 네트워크에서는 포트포워딩을 합니다. 위에서 설명한 프록시도 포트포워딩을 좀더 세련되게 할뿐이라고도 할 수 있습니다. (프록시는 복잡합니다. 서로다른 호스트여도 가상의 망이기 때문에 포트를 서로 다르게 설정해야 합니다.)

 

자~ 서론이 길었습니다. 본론입니다. 

 

우선 각 호스트에 실행되는 컨테이너의 네트워크 모드는 브릿지로 설정해서 실행합니다. 

컨테이너간 접속은 호스트의 아이피 그리고 컨테이너의 포트를 이용하도록 설정하면 끝입니다. 

만약 아이피가 아닌 도메인(컨테이너명)으로 되어 있다면 컨테이너 내에 Extra-Host옵션을 이용해서 도메인 / 아이피를 설정하면 됩니다. 

컨테이너 내의 /etc/hosts에 추가되서 도메인명으로도 다른 컨테이너에 직접 붙는 효과를 만들 수 있습니다. 

 

호스트를 거치기 때문에 게이트웨이까지 갔다가 다른 호스트로 가는 방식이기 때문에 네트워크 레이턴시가 그만큼 늦을 수 있다라고 할 수 있지만 호스트의 망을 한정적으로 운용하면 되지 않을 까 합니다. 

 

쿠버네티스나 스웜같은 경우 프록시 방식이기 때문에 가는 길을 모두 설정하여 위보다 빠를 수는 있을 것 같지만, 수천대의 서버(호스트)를 가진 네트워크에서나 생각할 법하지, 10대 미만의 호스트에서는 미미합니다. (테스트는 하지 않음)

 

한 회사에서 운용하는 것이 아니라 여러 회사에 노드들이 설치되고 운용되는 상황이고 VPN이 아닌 프록시로 운용된다면 개찐도찐 일거라 생각됩니다.

 

반응형