본문 바로가기
컨테이너/도커

05 서비스 디스커버리

by ^..^v 2020. 9. 17.
728x90
반응형

같은 컨테이너를 여러 개 만들어 사용할 때 새로 생성된 컨테이너 발견(Service Descovery) 혹은 없어진 컨테이너 감지가 중요

일반적으로 주키퍼, etcd 등의 분산 코디네이터를 외부에 두고 사용해서 해결하지만 스웜 모드는 서비스 발견 기능을 자체적으로 지원

스웜 모드에서는 서비스 이름으로 해당 서비스의 모든 컨테이너에 접근이 가능 ⇒ 서비스의 컨테이너 IP 주소를 알 필요도 없고 새롭게 생성된 사실도 알 필요 없음



#1 예제 서비스에서 사용할 오버레이 네트워크 생성

 

#2 server 서비스 생성 - 컨테이너의 호스트 이름을 출력하는 웹 서버 컨테이너 2개를 생성



#3 client 서비스 생성 - server 서비스에 http 요청을 보낼 컨테이너를 생성

 

#4 client 서비스 컨테이너 실행 노드 확인



#5 client 서비스 컨테이너가 생성된 노드에서 컨테이너 ID 확인 후 컨테이너 내부로 진입



#6 컨테이너 내부에서 curl 명령으로 server 서비스에 접근

 

→ 오버레이 네트워크에 속하도록 서비스를 생성했다면 도커 스웜의 DNS가 이를 자동으로 변환(resolve)

→ 요청을 보낼 때 마다 다른 컨테이너에 접근하는 것을 확인 

server라는 호스트 이름을 자동으로 server 서비스의 컨테이너 IP 중 하나로 라운드 로빈 방식으로 변환 



#7 swarm-manager 노드에서 server 서비스의 컨테이너 레플리카 수를 3개로 늘림



#8 #6과 같이 컨테이너 내부에서 curl 명령으로 server 서비스로 접근하면 새롭게 생성된 컨테이너에 접근할 수 있음



#9 server 서비스의 VIP 확인

 

→ server라는 호스트 이름이 3개의 IP를 가지고 있는 것이 아니라 서비스의 VIP(Virtual IP)를 가지고 있음

→ 스웜 모드가 활성화된 도컨 엔진의 내장 DNS 서버는 server라는 호스트 이름을 10.0.1.2라는 IP로 변환

→ 컨테이너의 네트워크 네임스페이스 내부에서 실제 server 서비스의 컨테이너의 IP로 포워딩



#10 VIP 방식이 아닌 도커의 내장 DNS 서버 기반으로 라운드 로빈 적용

 

→ 애플리케이션에 따라 캐시 문제로 인해 서비스 발견이 정상적으로 작동하지 않을 때가 있으므로 가급적 VIP를 사용

 

728x90
반응형

댓글