docker 컨테이너 내부에서 self Load Balencer를 구현해 보자

yk hi·2021년 8월 10일
0

docker

목록 보기
9/16

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을 구현해 보았다

profile
엔지니어의 실력은 고통의 총합이다 <임백준 칼럼>

0개의 댓글

관련 채용 정보