1번 2번으로 이중화 되어있는 서버에 도커로 웹 서비스를 띄어논 상황에서 2번 서버의 서비스가 작동하지 않아 문제부터 해결방법을 정리해 보았습니다.
문제
- 내부 포털 was 2번서버에 Docker로 띄어져 있는 서비스가 나오지 않는다.
- 방화벽 문제는 아님(curl -v 80 으로 접근 시 tcpdump로 확인이 가능하다.)
docker 문제로 판단중 😑😑😑
- 로컬에서 자신을 호출했을때는 서비스에 접근이 가능하다.
- 다른서버에서 2번서버를 호출하면 docker 네트워크로 포워딩이 안된다.
해결방법
- iptables 초기화 후 도커 재실행
sudo iptables -t filter -F sudo iptables -t filter -X systemctl restart docker
이 명령어는 Linux 시스템에서 iptables를 사용하여 네트워크 트래픽을 필터링하는 방법을 수정합니다.
- "sudo iptables -t filter -F" : 기존에 존재하는 모든 filter chains (INPUT, OUTPUT, FORWARD 등)에서 모든 룰을 삭제합니다.
- "sudo iptables -t filter -X" : filter 테이블에서 사용자 정의된 모든 chains를 삭제합니다.
즉, 이 명령어는 기존에 설정되어 있던 iptables 규칙을 초기화하고, 사용자가 정의한 chains를 모두 삭제하는 역할을 합니다. 이 명령어를 실행하면, 모든 인바운드 및 아웃바운드 트래픽이 허용됩니다.
Docker chain이란?
Docker는 컨테이너화된 애플리케이션을 빌드, 배포, 실행하기 위한 오픈소스 플랫폼입니다. Docker는 기본적으로 호스트 OS와 분리된 가상화된 환경을 제공하며, 이를 통해 애플리케이션을 격리시키고 보안을 강화할 수 있습니다.
Docker는 컨테이너화된 애플리케이션이 네트워크와 상호작용할 때 iptables를 사용하여 네트워크 패킷을 필터링합니다. 이때 Docker는 iptables의 "DOCKER" chain을 사용합니다. "DOCKER" chain에는 컨테이너가 생성될 때마다 자동으로 생성되는 "DOCKER-USER"와 "DOCKER-ISOLATION-STAGE-1"이라는 두 개의 서브체인이 있습니다.
- "DOCKER-USER" chain: 이 chain에는 사용자가 지정한 Docker 규칙이 저장됩니다. 이 chain은 Docker에 의해 변경되지 않으며, 사용자가 직접 수정할 수 있습니다.
- "DOCKER-ISOLATION-STAGE-1" chain: 이 chain은 Docker가 생성하는 chain으로, Docker 컨테이너의 가상화된 네트워크 인터페이스를 사용하여 컨테이너 간 통신을 제어합니다.
좀더 자세하게 알아보자면
"DOCKER-USER"는 사용자 정의 규칙을 포함하는 Docker의 첫 번째 서브체인입니다. 이 서브체인은 컨테이너와 호스트 OS 간의 네트워크 연결을 관리합니다. 예를 들어, 컨테이너가 호스트의 포트에 연결하거나 호스트가 컨테이너의 포트에 연결하려는 경우 "DOCKER-USER"에서 사용자 정의 규칙을 적용합니다.
"DOCKER-ISOLATION-STAGE-1"은 Docker의 두 번째 서브체인입니다. 이 서브체인은 각 컨테이너가 자체적인 네트워크 공간을 가지도록 하여 컨테이너 간의 간섭을 방지합니다. "DOCKER-ISOLATION-STAGE-1"은 각 컨테이너에 대해 고유한 네트워크 네임스페이스를 만들고, 해당 컨테이너에 대한 브릿지 네트워크와 IP 주소 범위를 할당합니다. 이를 통해 컨테이너는 완전히 격리된 네트워크 환경을 가지게 되어, 호스트 또는 다른 컨테이너와 충돌하지 않고 안전하게 실행될 수 있습니다.
Docker에서 컨테이너 간 통신을 가능하게 하는 방법 중 하나는 Docker의 "bridge" 네트워크 모드입니다. 이 모드에서는 "DOCKER-USER"와 "DOCKER-ISOLATION-STAGE-1" chain 외에도 다른 chain이 생성됩니다. 이러한 chain은 "br-" 접두사로 시작하며, 브리지 네트워크에서 컨테이너 간 통신을 가능하게 합니다.
'Docker' 카테고리의 다른 글
[Docker] 네트워크 변경(네트워크 중복으로 인한 접속 불가능), HTTP 허용, Root 경로 수정 daemon.json 설정 (0) | 2023.12.04 |
---|---|
[Docker] MariaDB 실행 방법 (0) | 2023.05.02 |
Docker에서 Ubuntu 20.04 시작하기 (0) | 2023.03.08 |
[DOCKER] Spring Boot .war파일 Docker Build 방법 #DokerFile (0) | 2022.12.23 |
[DOCKER] 도커 일반 사용자에게 권한 부여 (0) | 2022.12.14 |