- 이 컨테이너는 ingress 로 연결되어 Ip 를 부여받았다
- Ingress 는 overlay Network 로 클러스터 전체에 영향을 미친다
- 주소를 보면 10.0.0.X 를 컨테이너에 할당해준다
- 외부 사용자가 ingress 에 접근하면, 컨테이너에 직접 접속하는 것이 아닌, vip 를 통해서 라운드 로빈 방식을 통해 컨테이너에 접속한다
docker network create --subnet 20.20.20.0/24 -d overlay testoverlay
- Network 가 생성은 되있지만, 정보 출력을 못하는 것이다
docker service create --name test3 --network testoverlay -p 8002:80 --mode global nginx
- Swarm 환경에서 Service 배포시 -p 옵션을 사용하면, 무조건 Ingress Network 와 연결된다
전체적인 구조는 위와 같다
Swarm 환경에서 eth0 는 docker0 와 docker_gwbridge, 2 개와 연결된다. 이 두 가지는 둘 다 NAT 를 해준다
- Cluster 환경의 컨테이너 배포시 gwbridge 쪽에 연결되며, Cluster 환경이 아닌 일반 컨테이너 배포시 docker0 에 연결된다
docker_gwbridge 는 bridge Type 이다. 이 gwbridge 는 외부와의 연결에 관여한다. 즉, Ingress Network 를 물리적 Network 와 연결해준다
- 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 가 생긴다
우리가 생성한 사설 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 와 연결된다
- etcd 는 manager Node 에만 존재한다
- 스케쥴 조정을 통해 Node 들의 컨테이너 배치와 Service 상태를 확인하고, 이를 조정한다
- VIP 에 대한 정보도 가지고 있어서, 접근하는 트래픽을 어디 VIP 로 갈지도 알려준다