본문 바로가기
Docker

[Docker] 서로 다른 서버의 컨테이너 간 통신

by Yoon_estar 2024. 10. 1.
728x90
반응형

아래 방법 중 Docker Overlay Network가 가장 간단하고 유지보수하기 쉬운 방법이므로 이를 먼저 시도해 보시길 권장합니다.

1. Docker Overlay Network 사용

Overlay 네트워크는 Docker Swarm이나 Docker 네트워크 플러그인을 사용하여 여러 호스트 간의 컨테이너 통신을 가능하게 해줍니다. 이 방법을 사용하면 두 호스트 간의 네트워크가 쉽게 연결됩니다.

1.1 클러스터 정보가 담긴 옵션 지우기(서비스 파일 수정)

--cluster-store , --cluster-advertise 옵션 지우기

# vi /lib/systemd/system/docker.service

```
#ExecStart=/usr/bin/dockerd --cluster-store=etcd://192.168.207.90:3001 --cluster-advertise=192.168.207.90:3000 --config-file /APP/docker/daemon.json
ExecStart=/usr/bin/dockerd --config-file /APP/docker/daemon.json
```

systemctl daemon-reload
systemctl restart docker

1.2 Overlay 네트워크 설정 방법

master90에서 docker swarm 초기화 후 docker95에서 클러스터 가입

  • master90
# docker swarm init --advertise-addr 192.168.207.90
Swarm initialized: current node (njmfa4judyqjnxtuxyw98ok3g) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-20ic7jjt2s69zxqehww6mq7bqrqnpq6ugobis268nyz378vbfb-e6tadnbci9cx0f2wvgquurn4i 192.168.207.90:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
  • docker95

마스터 노드에서 나온 키값을 그대로 복사 붙여넣기 해준다.

  • Overlay 네트워크 생성master 서버에서 Overlay 네트워크 생성)
docker network create --driver overlay --attachable my-overlay
  • 각 컨테이너에 네트워크 연결
(master90)# docker network connect my-overlay Devops02

(docker95)# docker network connect my-overlay BACK02

1.3  상태 비교

  • Docker swarm에 가입되지 않은 컨테이너
# docker exec -it 1141ae498949 /bin/bash
root@1141ae498949:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:16:00:03
          inet addr:172.22.0.3  Bcast:172.22.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3573 (3.5 KB)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
  • Docker swarm 가입된 컨테이너
# docker exec -it 59c106f45ef1 /bin/bash
root@59c106f45ef1:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:16:00:02
          inet addr:172.22.0.2  Bcast:172.22.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3983 (3.9 KB)  TX bytes:4592 (4.5 KB)

eth1      Link encap:Ethernet  HWaddr 02:42:0a:00:01:04
          inet addr:10.0.1.4  Bcast:10.0.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:462 (462.0 B)  TX bytes:588 (588.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:392 (392.0 B)  TX bytes:392 (392.0 B)

2. Docker Compose와 Overlay Network 사용

Docker Compose를 사용하여 Overlay 네트워크를 설정할 수도 있습니다. Docker Compose 파일을 생성하여 여러 컨테이너가 같은 네트워크를 공유하도록 설정할 수 있습니다.

  • yaml 코드 작성
vi docker-compose.yml

version: '3.7'
services:
  devops02:
    image: ubuntu:14.04
    networks:
      - my-overlay
  back02:
    image: ubuntu:14.04
    networks:
      - my-overlay

networks:
  my-overlay:
    external: true
  • Docker compose 네트워크 배포
[root@docker95 ~]# docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Creating root_devops02_1 ... done
Creating root_back02_1   ... done

3. OpenVPN 또는 GRE 터널링 사용

만약 Overlay 네트워크 사용이 불가능하다면, 두 서버 간의 네트워크 통신을 위해 OpenVPN 또는 GRE(Generic Routing Encapsulation) 터널을 설정하여 호스트 간의 가상 네트워크를 구성할 수 있습니다.

 

  • OpenVPN 설치 및 구성 각 호스트에 OpenVPN을 설치하고, 네트워크 터널을 설정하여 두 호스트 간의 네트워크가 연결되도록 설정합니다.
  • GRE 터널 설정 GRE 터널을 사용하여 두 호스트 간의 네트워크 인터페이스를 가상화하고, 두 호스트 간의 패킷이 GRE 터널을 통해 전달되도록 설정합니다.

 

  • master 90 세팅(docker95에서는 반대로 세팅하면 된다.)
ip tunnel add gre1 mode gre remote <docker95 IP> local <master90 IP> ttl 255
ip link set gre1 up
ip addr add 192.168.10.1/24 dev gre1

4. 기본 브리지 네트워크와 iptables 설정

기본 브리지 네트워크를 사용하여 각 호스트 간에 통신이 가능하게 하려면 iptables를 사용하여 NAT와 포트 포워딩을 설정해 줄 수 있습니다. 예를 들어, 두 호스트 간의 네트워크 인터페이스가 통신하도록 라우팅 규칙을 설정합니다.

iptables -A FORWARD -i br-Front -o br-DB -j ACCEPT
iptables -A FORWARD -i br-DB -o br-Front -j ACCEPT
반응형