0부터 시작하는 Docker Swarm 공부 - 더 자세한 Docker Swarm Network

Jaehong Lee·2022년 8월 25일
0
post-thumbnail

1. Ingress Network

  • Service 로 배포한 컨테이너의 상세 정보를 확인하자
    • 이 컨테이너는 ingress 로 연결되어 Ip 를 부여받았다

  • manager Node 에서 Ingress Network 의 상세 정보를 확인하자
    • Ingress 는 overlay Network 로 클러스터 전체에 영향을 미친다
    • 주소를 보면 10.0.0.X 를 컨테이너에 할당해준다

  • Service 의 상세 정보를 확인하자
  • 마지막 부분을 확인하면, Endpoint Spec 의 Mode 는 vip 이며, vip 의 주소를 확인할 수 있다
    • 외부 사용자가 ingress 에 접근하면, 컨테이너에 직접 접속하는 것이 아닌, vip 를 통해서 라운드 로빈 방식을 통해 컨테이너에 접속한다

Service 생성시 별도의 네트워크를 지정하지 않는 경우, 클러스터 환경에서는 ingress 네트워크에 컨테이너가 연결되고, ingress 에서 제공하는 dhcp 기능을 통해 주소를 동적으로 할당 받는다

2. Port 지정과 Network

  • Port 를 지정한 test2 와 지정 안한 test1 Service 를 배포하자
  • 생성된 컨테이너를 확인해보자
  • Port 를 지정하지 않은 컨테이너는 172 대역이 할당되었다. Port 와 연결 Network 를 지정하지 않으면 docker0 에 연결된다. 이는 클러스터 환경에 배치되지 않은 것이다
  • Port 를 지정한 컨테이너는 10 대역으로 할당되었다. 이 컨테이너는 ingress Network 에 연결된 것이다

Swarm Cluster 환경에서 -p 를 하지 않으면, Ingress Network 가 아닌, docker0 Network 에 연결된다. docker0 Network 에 연결된 Cluster 환경은 Overlay Network 가 없는 Cluster 환경이다. 이는 자원 공유는 가능하지만, Container 끼리의 Network 가 안된다. 따라서 -p 옵션을 주어 Overlay Network 를 구성하는 것이 좋다

Swarm Cluster 환경에서 -p 를 하면, Ingress 에 연결되지만, Swarm Cluster 환경이 아닌 일반 Docker 환경에서 -p 를 하면 docker0 에 연결된다

3. Overlay Network 생성 및 사용

Overlay Network 생성

  • 추가적으로 Overlay Driver 를 이용한 Network 를 생성하자. 이 Network 는 전 클러스터 상에 동일한 네트워크 영역을 제공하고, 터널을 통해 물리적 위치와 상관없이 통신이 가능해진다
docker network create --subnet 20.20.20.0/24 -d overlay testoverlay

  • network 를 생성하고, 확인하자. Overlay Driver 를 사용하므로 SCOPE 가 swarm 이다. 이는 클러스터 전체에 영향을 미친다
  • 허나, 아직은 worker Node 에서 해당 Network 를 확인할 수 없다
    • Network 가 생성은 되있지만, 정보 출력을 못하는 것이다

Overlay Network 사용

docker service create --name test3 --network testoverlay -p 8002:80 --mode global nginx

  • network 를 지정하여 Service 를 배포하자
  • 생성한 컨테이너의 상세 정보를 확인하면, testoverlay Network 와 ingress Network 에 연결되있는 것을 확인할 수 있다. 총 2 개의 Ip 주소를 가진다
    • Swarm 환경에서 Service 배포시 -p 옵션을 사용하면, 무조건 Ingress Network 와 연결된다

  • worker Node 를 확인하면, 이제 testoverlay Network 를 확인할 수 있다. Network 생성시 생성한 Network 를 이용해 Service 를 한 번 배포한 후에 Container 가 배포된 해당 worker Node 에서 Network 를 확인할 수 있다

4. Swarm Network 구조 & etcd

  • 전체적인 구조는 위와 같다

  • Swarm 환경에서 eth0 는 docker0 와 docker_gwbridge, 2 개와 연결된다. 이 두 가지는 둘 다 NAT 를 해준다

    • Cluster 환경의 컨테이너 배포시 gwbridge 쪽에 연결되며, Cluster 환경이 아닌 일반 컨테이너 배포시 docker0 에 연결된다
  • docker_gwbridge 는 bridge Type 이다. 이 gwbridge 는 외부와의 연결에 관여한다. 즉, Ingress Network 를 물리적 Network 와 연결해준다

  • Ingress 는 Overlay Network 로 gwbridge 와 연결되어 외부로 나간다
    • Ingress Network 에는 Virtual Ip 가 있다. gwbridge 에서는 이 VIP 로 접근하여 Ingress Network 에 접근한다
    • Container 가 배치될 때, 이는 배치된 Node 의 위치와 상관없이, 전부 동일한 Ingress Network 위에 배치된다

  • 외부 사용자가 컨테이너에 접속하고 싶으면

    Node 에 접근 -> etcd 확인 - Cluster 환경의 Node 들은 하나의 Ingress 네트워크를 구성한다. 이를 통해 Ip 와 상관없이 Port 를 통해 VIP 를 구분한다. 따라서, 해당 Port 를 보고 어느 Service 로 갈지 VIP 를 지정해준다 -> gwbridge 에 접근 -> VIP 로 Ingress Network 에 접근한다. Ingress Network 에서는 VIP 를 확인하고, 연결된 컨테이너에게 전달 ( VIP 접근시 Ingress 에서 라운드 로빈 방식으로 컨테이너에 전달 )

    • 하나의 Service 당 하나의 VIP 가 생긴다

서로 다른 Service 는 같은 Ingress Port 를 공유해서 사용할 수 없다. 같은 Service 안에 다수의 컨테이너는 Port 를 공유하며, 라운드 로빈 방식으로 VIP 에서 트래픽을 전달한다

  • 우리가 생성한 사설 Overlay Network 는 gateway 설정을 하지 않았기에, 외부 통신에 관여하지 않는다. 이는 연결된 해당 Cluster 상에서만 통신 가능하다

    • 이를 통해 모니터링 / 로그 관리 를 할 수 있다. Ingress 에 연결되면 외부에 노출이 되는데, 모니터링이나 로그 관리는 외부 노출이 필요 없으므로, 사설 Network 를 사용한다
  • docker container run 을 통해 생성한 컨테이너는 네트워크를 myoverlay 로 지정하는 것이 불가능하다 ( 클러스터 환경 외부의 컨테이너는 클러스터 네트워크에 연결하는 것이 불가능하다 )

    • 모니터링 컨테이너는 클러스터 환경에 노출시키고 싶지 않을때, myoverlay Network 생성시 --attachable 을 사용하면, Cluster 환경에 연결되지 않은 컨테이너도 network 에 Overlay Network 지정하여 해당 Overlay Network 에 연결이 가능하다
    docker network create -d overlay --attachable myoverlay
    • 만약, 클러스터 환경 외부의 모니터링 컨테이너의 network 를 overlay Network 로 지정만 하면, docker0 에는 연결되지 않는다. 이때, -p 옵션을 주어 외부와 통신하게 설정하면 docker0 와 연결된다

  • Swarm Mode 는 자체 분산 코디네이터인 etcd 있다. etcd 안에는 클러스터 노드 정보, 컨테이너 ID / NAME / IP 등의 정보와 DNS 기능, 스케쥴 조정 기능이 있다
    • etcd 는 manager Node 에만 존재한다
    • 스케쥴 조정을 통해 Node 들의 컨테이너 배치와 Service 상태를 확인하고, 이를 조정한다
    • VIP 에 대한 정보도 가지고 있어서, 접근하는 트래픽을 어디 VIP 로 갈지도 알려준다
profile
멋진 엔지니어가 될 때까지

0개의 댓글