사설 대역 사용 시, docker 주의사항
Techchallengearena
사설 네트워크가 복잡하게 얽혀있는 서비스를 운영하는 경우, 이를 중간에서 중계하기 위해서 별도의 라우팅 작업을 하는 경우가 있습니다. 사설 대역의 경우 IP가 겹치는 경우가 종종 발생하기 때문입니다.
이때, 무심코 docker를 설치하게 되면 다음과 같은 장애가 발생할 수 있습니다.
1/ docker를 설치하면 dockerd(도커 데몬)이 함께 설치되는데, 그 과정에서 bridge 네트워크를 생성합니다. 별도로 옵션이 없다면 기본적으로 "bridge"라는 이름으로 네트워크가 생성되는 것을 확인하실 수 있습니다.
2/ bridge의 게이트웨이가 되는 docker0는 호스트와 컨테이너 간의 통신을 중계해주는 역할을 합니다. docker0는 별도의 로컬 네트워크 인터페이스로 등록됩니다. ip addr show를 통해 확인해보면 docker0의 인터페이스를 확인할 수 있습니다.
3/ 네트워크 대역을 할당하고 나면, iptable의 NAT 설정을 변경합니다. 그 과정에서 loopback 인터페이스를 제외한 로컬 네트워크로 향하는 모든 트래픽이 docker0로 향하게 됩니다. 이렇게 설정을 마치고 나서 dockerd가 실행됩니다.
4/ docker가 bridge 네트워크를 위해 할당하는 네트워크가 정해져 있습니다. 별도로 설정을 하지 않으면, "172.17.0.0/16" 을 시작으로 /16 크기의 네트워크를 순차적으로 배정합니다. daemon이 뜨면서 bridge 네트워크를 가장 먼저 생성하기 때문에 해당 네트워크 대역은 주로 "172.17.0.0/16"로 설정됩니다.
5/ 만약 다른 프로세스에서 기존에 172.17.0.0/16 대역과 통신을 하고 있었다면, 이제부터는 패킷이 모두 docker0로 향하게 됩니다. 이는 iptable에서 제어되기 때문에, 호스트 밖의 설정을 확인해서는 찾아내기 쉽지 않습니다.
6/ 기본 네트워크 대역을 바꾸려면 설치할 때 default-address-pools 라는 옵션을 추가해주면 됩니다. 해당 설정을 /etc/docker/daemon.json에 추가하고 docker를 재시작하면, 기존에 세팅했던 bridge 네트워크 대역을 직접 설정한 대역으로 변경합니다. 이때도, 당연히 기존에 통신하고 있던 대역과 겹치지 않도록 설정해야 합니다.
크게 고민하지 않고 설정했는데, 딱 걸리는 경우가 발생해서, 이번 기회에 정리해보았습니다.
https://blog.techchallengearena.com/p/docker
#docker #network #devops
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 6월 20일 오후 4:19
추
... 더 보기피클은 지난달 하루 200명씩 신규 유입, 불과 한 달 만에 사용자 수 5배라는 폭발적 성장세를 보이고 있다. 전체 이용자 중 70%가 미국, 20%가 유럽에 분포하며, 평균 주 5회 이상 회의·온라인 모임에 피클 아바타를 활용하고 있다.
... 더 보기