6.11 광주에서 서울로 잠깐 방문한 동생이 docker-compose 문제를 물어봤었습니다.
통신이 안된다는 문제였는데.. 금방 해결하겠지라고 생각했지만, 약 3시간 이상 시간을 투자해서 문제를 해결했습니다.
1. 문제
마주쳤던 문제는 일방향 컨테이너 통신만 가능했습니다.
큰 아키텍처는 애플리케이션(app), mariadb를 docker-compose 아래 그림처럼 구성되어 있었습니다.자세한 설정은 보안상 생략했습니다. 애플리케이션→mariadb로 ping이 안되었지만, mariadb→app으로 ping은 되었습니다. 디버깅을 위한 busybox는 양방향 통신이 가능했습니다.
2. 문제 원인 찾는 과정
2.1 docker service discovery
먼저, app→mariadb에서 ping이 안된 것을 확인했습니다.
그래서, busybox 컨테이너를 생성해서 ping을 시도했더니 성공했습니다.
ping오류 로그를 자세히 보니 DNS오류가 보여서, mariadb IP로 직접 ping통신을 했더니 성공했습니다.
2.2 docker internal dns 통신 확인
internal dns문제인지, ping통신을 시도했고 성공적으로 pingpong되었습니다.
외부 서버로 통신을 해보니 dns가 제대로 동작을 안했습니다. 결국 dns문제여서 mariadb 통신이 안되는 것을 확인했습니다.
3. 해결방법 찾는 과정
왜 dns가 문제가 있는지 네트워크 관점에서 생각했습니다.
3.1 default gateway 확인
[챕터 2.2]에서 확인한 것처럼 dns로 나가는 트래픽이 문제가 있어서 게이트웨이를 확인했습니다.
ping통신이 되는 busybox 디폴트 게이트웨이는 docker1로 설정되어 있었습니다.
문제가 되는 애플리케이션 컨테이너는 다른 게이트웨이로 설정되어 있었습니다.
3.2 docker-compose.yaml 확인
디폴트 게이트웨이가 수정되어서 통신이 안되었네요. 누가 변경했을까를 추적해보니 privileged가 true로 설정되어 있었습니다. 호스트 권한을 컨테이너가 얻으면서, 알 수 없는 이유로 디폴트 게이트웨이가 수정되었습니다.
'회고모음' 카테고리의 다른 글
6월 3주차 회고 (0) | 2022.06.19 |
---|---|
빌드/배포 시스템 VS CI/CD 시스템 (0) | 2022.06.19 |
5월 3주차 회고 (2) | 2022.05.22 |
SK OOO AWS 프로젝트를 마치며 (0) | 2022.05.15 |
4월 2주차 회고 (0) | 2022.04.18 |