Docker Swarm의 네트워크
네트워크 종류
Overlay: 스웜 모드에서 사용하며, 여러 호스트 간에 네트워크를 생성하여 서비스가 서로 통신할 수 있게 합니다.
Ingress: 서비스가 클러스터 외부에서 접근할 수 있도록 지원하는 네트워크입니다.
Host: 컨테이너가 호스트 네트워크를 직접 사용하여 통신합니다.
Bridge: 단일 Docker 호스트에서만 사용 가능한 네트워크입니다.
docker network create --driver overlay <network_name>
Docker Swarm에서 네트워크 작업하기
Docker Swarm 클러스터에 overlay 네트워크를 생성하면,
클러스터 내의 여러 노드에서 실행되는 컨테이너들이 서로 통신할 수 있습니다.
docker network create --driver overlay my-overlay-network
4e1d4e9b7bfa1742fcb8de3a7382e5cb6c3ebfbe0b52bdfecb0cb85f7b1376cf
docker network ls
NETWORK ID NAME DRIVER SCOPE
9b90eafbbc72 bridge bridge local
c4f67a0a758b docker_gwbridge bridge local
f21aace50a3f host host local
a621f2f503cd ingress overlay swarm
4e1d4e9b7bfa my-overlay-network overlay swarm
서비스에 네트워크 연결
nginx 서비스를 Swarm 클러스터에 배포하고, 위에서 생성한 overlay 네트워크에 연결하여 배포합니다.
docker service create \
--name nginx-service \
--network my-overlay-network \
--replicas 3 \
nginx
# 서비스 상태 확인
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
xe9ae10jcr2p nginx-service replicated 3/3 nginx:latest
# 서비스의 작업 상태 확인
docker service ps nginx-service
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ze1qi2ys8g2p nginx-service.1 nginx:latest worker-1 Running Running 2 minutes ago
huej2oxgrvjv nginx-service.2 nginx:latest worker-2 Running Running 2 minutes ago
sxo1dvszkg82 nginx-service.3 nginx:latest worker-3 Running Running 2 minutes ago
docker network inspect <network_name>
네트워크에 연결된 컨테이너 확인
어떤 컨테이너들이 네트워크에 연결되었는지 확인하려면 docker network inspect 명령을 사용합니다.
docker network inspect my-overlay-network
[
{
"Name": "my-overlay-network",
"Id": "4e1d4e9b7bfa1742fcb8de3a7382e5cb6c3ebfbe0b52bdfecb0cb85f7b1376cf",
"Created": "2024-09-28T10:14:09.2280398Z",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Containers": {
"b5e59af6c22d61b6dd1e414eaffb75e01c9c9dcaa0c3aef1b3cbab2909d69b74": {
"Name": "nginx-service.1.ze1qi2ys8g2p9b5ltcjei3oc1",
"EndpointID": "1f74fda4d8f7482d2c44ab8396d8655cde7383bcfa236a345cbab5e2c68c0285",
"MacAddress": "02:42:0a:00:00:03",
"IPv4Address": "10.0.0.3/24",
"IPv6Address": ""
},
"e4ff5678bc4b19a14c41c229edc57c4bbac0eeb540f6f2b2ec9e6ad262e59d6d": {
"Name": "nginx-service.2.huej2oxgrvjv9b5ltcjei3oc1",
"EndpointID": "f4da3bd4d835bcf9c2c8bb57c2d2065bc07ebfb1a6c631c94e63f2af28d4ed59",
"MacAddress": "02:42:0a:00:00:04",
"IPv4Address": "10.0.0.4/24",
"IPv6Address": ""
},
"7a734a3b3c1675c32c3ff8828b848ebdbff202bce318f448b8b228dbd37f7eb6": {
"Name": "nginx-service.3.sxo1dvszkg82f9b5ltcjei3oc1",
"EndpointID": "e276d7ad164c2b8e4a256c8fd92c9d9e08935f5b36d1dc5c8ed3e46b616a5919",
"MacAddress": "02:42:0a:00:00:05",
"IPv4Address": "10.0.0.5/24",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
출력에서 각 컨테이너(nginx-service)가 my-overlay-network에 연결된 상태와 IP 주소를 확인할 수 있습니다.
각각의 컨테이너는 이 네트워크 내에서 서로 통신할 수 있습니다.
docker network rm <network_name>
네트워크 제거
네트워크를 더 이상 사용하지 않는 경우, 네트워크를 제거할 수 있습니다.
단, 네트워크에 연결된 서비스가 있으면 제거할 수 없으므로 서비스를 먼저 제거해야 합니다.
docker service rm nginx-service
docker network rm my-overlay-network
Docker Swarm 로드밸런서
Docker Swarm에서 로드밸런서는 자동으로 내장되어 있어,
Swarm 내에서 생성된 서비스가 여러 개의 복제본(컨테이너)으로 분산 배포될 때,
요청을 각 복제본으로 균등하게 분배하는 역할을 수행합니다.
즉, 별도의 로드밸런서를 추가로 구성할 필요 없이
Docker Swarm 자체에서 기본적으로 로드밸런싱 기능을 제공합니다.
로드밸런서의 기본 작동 방식
Docker Swarm의 로드밸런서는 Ingress 네트워크를 통해
외부로부터 들어오는 요청을 Swarm 내의 여러 노드로 분배합니다.
각 서비스가 여러 복제본을 가질 경우,
Swarm의 서비스 디스커버리와 내부 로드밸런서가 모든 복제본에 트래픽을 자동으로 분배합니다.
'Infra > Docker' 카테고리의 다른 글
| Docker Swarm - 시크릿 (0) | 2024.09.29 |
|---|---|
| Docker Swarm - 스택 (0) | 2024.09.29 |
| Docker Swarm - 서비스 배포 및 확장 (0) | 2024.09.29 |
| Docker Swarm - 노드의 승격, 레이블, 가용성 (0) | 2024.09.28 |
| Docker Swarm - 시작 및 노드추가 (0) | 2024.09.25 |