docker container self Load Balancer(--net-alias(target group) >>이게 자체 dns를 구성해준다)
사용자 정의 브릿지 네트워크 와 docker run 수행 시 --net-alias 옵션으로 묶인 모든 컨테이너에는 기본적으로
모든 서비스를 검색할 수 있는 내장 DNS 서버가 구현
내장 DNS서버 안에 dig라는 기능이 Load Balancer를 구현할 수 있게 해준다
그럼 한번 구현해보자
1.도커 네트워크 생성
root@hostos1:~# docker network create \
> --driver bridge \
> --subnet 172.200.1.0/24 \
> --ip-range 172.200.1.0/24 \
> --gateway 172.200.1.1 \
> netlb
e91a5cbcbd0a58144c22afb61dcbc7e7be3de8db65ea3dfdd74fccc8c9c601cb
생성된 네트워크 확인
root@hostos1:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
e91a5cbcbd0a netlb bridge local
2. netlb 브릿지 네트워크에 nlb-net이라는 타겟그룹으로 묶은 컨테이너 생성
--net-alias 이름 컨테이너들을 하나의 대상그룹으로 묵는다( 같은 네트워크만!!!!)
root@hostos1:~# docker run -itd --name=nlbtest1 --net netlb --net-alias nlb-net ubuntu:14.04
50d55cc86c3fe2a6451d7c0492b1ac98cc505aa034e318be4c0c1ddbdfad255c
root@hostos1:~# docker run -itd --name=nlbtest2 --net netlb --net-alias nlb-net ubuntu:14.04
317aeccc82d99b17fe2bc5e97e6b2c596eb875212ed2f77f9e8fb6fb615f1b9b
root@hostos1:~# docker run -itd --name=nlbtest3 --net netlb --net-alias nlb-net ubuntu:14.04
f0a8cd97b9390a59af4894b25847dac3a8dbc301d62cb64d4afee53f9433766f
3.생성된 컨테이너 ip 조회
root@hostos1:~# docker inspect nlbtest1 | grep IPA
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAMConfig": null,
"IPAddress": "172.200.1.2",
root@hostos1:~# docker inspect nlbtest2 | grep IPA
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAMConfig": null,
"IPAddress": "172.200.1.3",
root@hostos1:~# docker inspect nlbtest3 | grep IPA
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAMConfig": null,
"IPAddress": "172.200.1.4",
4.핑을 날릴 프론트 컨테이너를 생성
root@hostos1:~# docker run -it --name=frontend --net=netlb ubuntu:14.04 bash
5.nlb-net이라는 같은 브릿지 내에 타겟그룹으로 핑을 날렸을 때 어디로 핑이 가는지 확인
root@86ab740d6db3:/# ping nlb-net
PING nlb-net (172.200.1.4) 56(84) bytes of data.
64 bytes from nlbtest3.netlb (172.200.1.4): icmp_seq=1 ttl=64 time=0.136 ms
PING nlb-net (172.200.1.3) 56(84) bytes of data.
64 bytes from nlbtest2.netlb (172.200.1.3): icmp_seq=1 ttl=64 time=0.067 ms
root@86ab740d6db3:/# ping nlb-net
PING nlb-net (172.200.1.4) 56(84) bytes of data.
64 bytes from nlbtest3.netlb (172.200.1.4): icmp_seq=1 ttl=64 time=0.093 ms
같은 타겟그룹 내부에 속한 컨테이너들중 하나를 무작위로 선정해서 핑을 날린다
6.target group으로 지정된 컨테이너 핑 패킷을 전달 확인하기 위해 dns의 dnsutils dig 기능 사용
root@86ab740d6db3:/# apt update
root@86ab740d6db3:/# apt -y install dnsutils
root@86ab740d6db3:/# dig nlb-net
;; QUESTION SECTION:
;nlb-net. IN A
;; ANSWER SECTION:
nlb-net. 600 IN A 172.200.1.2
nlb-net. 600 IN A 172.200.1.3
nlb-net. 600 IN A 172.200.1.4
내장 DNS 서버는
QUESTION SECTION nlb-net으로 들어오는 요청을
ANSWER SECTION에 등록된 nlb-net에 속한 ip들로 랜덤 배분한다!
끝!!
도커 컨테이너를 이용하여 self loadbalancing을 구현해 보았다