Docker Swarm 은 오케스트레이션 툴이다. Docker Swarm 또는 Docker 클러스터는 관리자 노드로 작동하는 하나 이상의 Dockerized 호스트와 여러 작업자 노드로 구성되어 있으며 호스트간의 연결 및 관리를 위해서는 서버의 방화벽을 설정해줘야 한다.
Docker Swarm 을 사용하기 위한 Port 는 다음과 같다.
- TCP 2376 Port : 도커 머신이 동작하기 위해 사용되는 포트이며, 도커 클라이언트가 통신할 때 사용됨
- TCP 2377 Port : Docker Swarm 또는 클러스터의 노드 간의 관리를 위해 사용되며 매니저 노드에서만 열어야 함
- TCP/UDP 7946 Port : 노드 간의 통신
- UDP 4789 Port : 클러스터에서 사용되는 Ingress 오버레이 네트워크 트래픽
해당 포트 외에도 22(SSH 용) 및 클러스터에서 실행 서비스 포트(80,443) 도 열려 있어야 한다.
서버 방화벽 구성
리눅스의 핵심 커널은 서버에 대한 클라이언트의 네트워크 접속을 제어하는 NetFilter 라는 모듈을 가지고 있다. 이 NetFilter를 사용하여 필터링을 수행하여 서버 접속에 대한 네트워크 정책을 세우는게 방화벽이다.
리눅스 방화벽중 가장 많이 사용되는 것으로 iptables 이 있으며, iptables의 작업을 간편화 해주는 소프트웨어가 UFW(Uncomplicated FireWall = 복잡하지 않은 방화벽) 가 있다.
firewalld 는 CentOS7부터 이전의 iptables를 대체한 패킷 필터링 방화벽 이다. firewalld도 netfilter 모듈 기능을 둔 방화벽으로서 설정에 대한 변경을 언제든지 할 수 있고, 변경 사항을 저장할 필요 없이 즉시 적용하기 때문에 iptables가 정적(static)인 반면 firewalld는 동적(dynamic) 방화벽인 점이 iptables와 차이점가 있다. iptables 가 INPUT, OUTPUT, FORWARD 같은 체인을 이용해 방화벽을 설정하는 반면 firewalld는 네트워크 인터페이스에 기초한 zone 을 통해 설정을 적용한다.
Docker Swarm 포트 열기
UFW 사용하기
매니저 노드에서 아래의 커멘드를 실행해야 한다.
ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 2377/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp
ufw reload
ufw enable
systemctl restart docker
워커 노드에서 아래의 커멘드를 실행해야 한다. 2377 의 경우 매니저 노드에서만 열어주면 되기에 워커 노드에서는 열지 않는다.
ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp
ufw reload
ufw enable
systemctl restart docker
FirewallD 사용하기
FirewallD는 Fedora, CentOS 및 이를 기반으로 하는 Linux 배포판의 기본 방화벽 소프트웨어이다. 다른 방화벽 소프트웨어와 충돌날 수 있으니 FirewallD 외의 방화벽은 삭제하거나 비활성화 해야하며 우분투에서도 사용이 가능하다.
# 기존에 활성화된 방화벽이 있다면 삭제한다.
apt-get purge ufw
apt-get install firewalld
systemctl status firewalld
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
# 삭제가 필요한 경우 실행
firewall-cmd --remove-port=<Port Number>/tcp —permanent
firewall-cmd --reload
systemctl restart docker
워커 노드에서 아래의 커멘드를 실행해야 한다. 2377 의 경우 매니저 노드에서만 열어주면 되기에 워커 노드에서는 열지 않는다.
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --reload
systemctl restart docker
IpTables 사용하기
Linux 배포판에서 IpTables 를 사용하기 위해서는 다른 방화벽 제거가 필요하다.
그런 다음 iptables-persistent IPtables 규칙의 자동 로드를 관리하는 패키지를 설치합니다.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT
netfilter-persistent save
sudo systemctl restart docker
워커 노드에서는 아래의 커멘드를 실행해야 한다. 2377 의 경우 매니저 노드에서만 열어주면 되기에 워커 노드에서는 열지 않는다.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT
netfilter-persistent save
sudo systemctl restart docker
'DevOps > 도커 (Docker)' 카테고리의 다른 글
[Docker] - 008. Docker Swarm 소규모 서비스 운영하기 (0) | 2024.05.06 |
---|---|
[Docker] - 006. Docker Swarm 이란 (0) | 2024.05.06 |
[Docker] - 005. Docker Compose 활용하기 (0) | 2024.05.04 |
[Docker] - 004. Multi Stage Build 와 Base 이미지 만들기 (0) | 2024.04.19 |
[Docker] - 003. DockerFile 캐싱 전략 (0) | 2024.04.19 |