마이의 개발 블로그

[Linux] 도커(Docker) 동작 중 firewalld를 켜면 서비스가 동작하지 않는 현상(RHEL 8.8) 본문

개발지식/인프라

[Linux] 도커(Docker) 동작 중 firewalld를 켜면 서비스가 동작하지 않는 현상(RHEL 8.8)

개발자마이 2024. 11. 22. 10:41
반응형

배경

도커 동작 중 방화벽 적용을 위해 리눅스의 방화벽 프로그램인 firewalld를 켜면 서비스가 동작하지 않는 현상이 관찰되었습니다. 처음에는 방화벽 정책때문에 도커 네트워크가 차단되는 문제라고 생각되어 방화벽 정책을 들여다보았고, 이후 컨테이너 재시작 시 출력되는 '기존에 생성해놓은 도커 네트워크 인터페이스를 찾을 수 없다'는 오류메시지를 관찰한 후에는 도커 네트워크가 관리되는 부분을 살펴봐야겠다고 판단했습니다.

 

문제의 원인은 도커 네트워크 인터페이스는 디폴트로 iptables에서 관리되는데 반해 firewalld는 nftables를 디폴트로 사용하기 때문이었습니다. 방화벽이 내려가있을 때는 도커가 도커용 네트워크 인터페이스(docker0, br-... 등)정보를 iptables에 등록하게 되는데, firewalld를 구동하며 nftables가 켜지면 iptables가 내려가면서 기존에 등록했던 도커 네트워크 인터페이스를 사용할 수 없게된 것입니다. 또한 nftables를 사용했다가 iptables로 다시 돌아올 경우에도 동작이 원활하지 않음을 추가적으로 관찰할 수 있었습니다.

방법

도커의 iptables 사용 옵션을 꺼 도커 네트워크가 nftables에서 관리되도록 변경합니다.

 

  1. 도커 설정 변경
    • daemon.json(없으면 생성)을 수정하여 도커에서 iptables 미사용하도록 설정합니다.
    • 명령어: vi /etc/docker/daemon.json
    • daemon.json 파일 내용을 아래와 같이 수정:
      {
        "iptables": false
      }
    • 명령어: systemctl restart docker
  2. firewalld 재기동
    • 명령어: systemctl restart firewalld

Note

1. iptables
iptables는 리눅스에서 방화벽 및 네트워크 패킷 필터링을 담당하는 오래된 도구입니다. Netfilter 프레임워크 위에서 동작하며, 패킷 필터링 규칙을 추가, 삭제, 수정할 수 있습니다.

특징:
- 테이블(필터, NAT 등)과 체인(INPUT, OUTPUT 등)을 기반으로 규칙 정의
- 규칙 추가/삭제가 상대적으로 간단하지만, 복잡한 환경에서는 관리가 어려울 수 있음
- 규칙을 추가하면 커널에 바로 적용되어, 기존 규칙을 다시 로드하거나 수정하기 힘듦


2. nftables
nftables는 iptables의 현대적인 대체 도구로, 더 효율적이고 유연하게 네트워크 트래픽을 관리할 수 있도록 설계되었습니다.

특징:
- 단일 커맨드라인 인터페이스(nft)로 관리
- iptables보다 간결한 문법과 높은 가독성 제공
- 규칙을 배치 파일로 작성하여 한 번에 로드 가능
- 커널과의 통신이 더 효율적이고, 성능이 향상됨
- iptables와 호환성을 유지하면서도 기존 문제점 개선

반응형
Comments