Docker DNS
- Docker ์ปจํ ์ด๋๋ IP๋ฅผ ์ฌ์ฉ์ ์ ์ ๋คํธ์ํฌ์ ์ปจํ ์ด๋ ์ด๋ฆ์ผ๋ก ์๋ ํ์ธํ๋ DNS ์๋ฒ๊ฐ Docker ํธ์คํธ์ ์์ฑ๋๋ค.
- ๋์ผ ๋คํธ์ํฌ alias ํ ๋น์ ํตํด ํ๋์ ํ๊ฒ ๊ทธ๋ฃน์ ๋ง๋ค์ด ์์ฒญ์ Round Robin ๋ฐฉ์์ผ๋ก ์๋ตํ๋ค.
์์ ๋ก ๋ง๋๋ณด์
- ์ฌ์ฉ์ ์ ์ ๋คํธ์ํฌ ์์ฑ
docker network create fc-net
- ํ๋์ fc-net ๋คํธ์ํฌ์ ํฌํจ๋ ์ปจํ ์ด๋ 2๊ฐ ์์ฑ, ๋ ผ๋ฆฌ์ ์ธ ํ๊ฒ ๊ทธ๋ฃน ์์ฑ
docker run -d --name=es1 --net=fc-net --net-alias=esnet-tg -p 9201:9200 -p 9301:9300 -e "discovery.type=single-node" elasticsearch:7.17.10
docker run -d --name=es2 --net=fc-net --net-alias=esnet-tg -p 9202:9200 -p 9302:9300 -e "discovery.type=single-node" elasticsearch:7.17.10
- esnet-tg์ dns๋ฅผ ํ์ธํ๊ธฐ ์ํด busybox๋ฅผ ์คํํด๋ณด์
- ๊ฒฐ๊ณผ๋ ์์์ ๋ฑ๋กํ ๋๊ฐ์ ์ปจํ ์ด๋๊ฐ ๋ฐ ๊ฒ์ด๋ค.
docker run -it --rm --name=request-container --net=fc-net busybox nslookup esnet-tg
ํ๊ฒ ๊ทธ๋ฃน์ ์๋๋ก ์ฌ๋ฌ๊ฐ์ ์์ฒญ์ ๋์ง๋ฉด ํ๊ฒ ๊ทธ๋ฃน ์์ ์๋ n๊ฐ์ ์ปจํ ์ด๋๊ฐ R-Rํ์์ผ๋ก ์์ฒญ์ ๋ฐ๋๋ค.
์ปจํ ์ด๋ Proxy
๋ง์ฝ ํ๋ก์๊ฐ ์๋ค๋ฉด (๋ก๋๋ฐธ๋ฐ์๊ฐ ์๋ค๋ฉด)
- ํ๋ก์ ๊ตฌ์ฑ์ด ์์ผ๋ฉด ์ฌ์ฉ์์ ์์ฒญ์ ์ง์ ์น ์๋ฒ์ ์ ๋ฌ๋์ด ์๋ฒ ๋ถ๋ด์ ๊ฐ์คํ๊ฒ ๋๋ค.
- ๋จ์ผ ์น ์๋ฒ ๊ตฌ์ฑ์ ์ฅ์ ๋ฐ์ ์ ์๋น์ค ๊ฐ์ฉ์ฑ์ ์น๋ช ์ ์ด๋ค.
- ์ฌ๋ฌ ์ฌ์ฉ์์ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ๊ฒฝ์ฐ์๋ ์์ฒญํ ๋ถํ๋ฅผ ์ ์ ํ ๋ถ์ฐ์์ผ์ฃผ์ง ๋ชปํ๋ค๋ฉด ํ ์๋ฒ์ ๋ถํ๊ฐ ๋ชฐ๋ฆฌ๋ Hotspot์ด ๋ฐ์ํ๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ์๋ค.
- ์ฌ์ฉ์ ๊ด์ ์์ ์๋ต ์๊ฐ ๋ง์กฑ๋๋ฅผ ์ป๊ธฐ ํ๋ฆ
Nginx
- ๊ธฐ๋ณธ ๊ตฌ์ฑ ๊ฐ์ผ๋ก "์น ์๋ฒ"๋ฅผ ์คํํ๋ค. ๋์ผ ๊ณ์ด ์ ์ ์จ์ด ๊ฐ์ฅ ๋์
- ์ถ๊ฐ ๊ตฌ์ฑ์ผ๋ก "Reverse Proxy"๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
- API ํธ๋ํฝ ์ฒ๋ฆฌ๋ฅผ ๊ณ ๊ธ HTTP ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ "API Gateway" ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ค.
- MSA ํธ๋ํฝ ์ฒ๋ฆฌ๋ฅผ ์ํ MicroGateway๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ์ค์ ์ /etc/nginx ํ์์ nginx.conf ๋ณ๊ฒฝ์ ํตํด ๊ตฌ์ฑํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ ์์ฒญ์ด 80ํฌํธ๋ก ๋ค์ด์ค๋ฉด ์ค๋นํด์ด ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์ฃผ์๋ก ๊ฐ ์๋ฒ๋ก ํธ๋ํฝ์ ๋ถ๋ฐฐํ๋ค.
- ๊ธฐ๋ณธ ๋ถ๋ฐฐ ๋ฐฉ์์ R-R(Round Robin)๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
HAproxy๋ฅผ ํ์ฉํ์ฌ proxy๋ฅผ ๊ตฌํํ ์ ์์ง๋ง ์ด๋ฒ ๊ธ์๋ Nginx๋ง ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
์ค์ต
- nginx ์ค์น
~$ sudo apt update
~$ sudo apt -y install nginx
~$ sudo nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
- running ์ค์ธ์ง ํ์ธ (active (running))
sudo systemctl status nginx.service
- 3๊ฐ์ ์ปจํ ์ด๋ ์คํ
docker run -it -d -e SERVER_PORT=5001 -p 5001:5001 -h alb-node01 -u root --name=albnode01 dbgurum/nginxlb:1.0
docker run -it -d -e SERVER_PORT=5002 -p 5002:5002 -h alb-node02 -u root --name=albnode02 dbgurum/nginxlb:1.0
docker run -it -d -e SERVER_PORT=5003 -p 5003:5003 -h alb-node03 -u root --name=albnode03 dbgurum/nginxlb:1.0
- ์ ๋์ํ๋์ง ํ์ธ
~$ sudo netstat -nlp | grep 5001
~$ sudo netstat -nlp | grep 5002
~$ sudo netstat -nlp | grep 5003
- nginx์ ์ค์ ํ์ผ์ ๋ณ๊ฒฝํ์ฌ 80ํฌํธ๋ก ๋ค์ด์จ ์์ฒญ์ 5001,5002,5003 ํฌํธ๋ก ํฌ์๋ฉ ์์ผ์ค ๊ฒ์ด๋ค.
~$ sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org //๋ฐฑ์
~$ sudo vi /etc/nginx/nginx.conf
- config ํ์ผ (Round Robin ํํ๋ก backend-alb์ ํฌ์๋ฉํ๋ค.
events { worker_connections 1024; }
http {
# List of application servers
upstream backend-alb {
server 127.0.0.1:5001;
server 127.0.0.1:5002;
server 127.0.0.1:5003;
}
# Configuration for the server
server {
# Running port
listen 80 default_server;
# Proxying the connections
location / {
proxy_pass http://backend-alb;
}
}
}
- ์ ์ฉ์ ์ํด nginx restart
~$ sudo systemctl restart nginx.service
~$ sudo systemctl status nginx.servic
์ ์ค์ต์์ Nginx๋ฅผ host์ ์ค์นํ์๋ค. Nginx๋ํ ์ปจํ ์ด๋๋ก ๋์์ reverse proxy๋ฅผ ๊ตฌ์ฑํด๋ณด์.
- Nginx ์ปจํ ์ด๋ ์คํ ํ config ํ์ผ ๊ตฌ์ฑ
~$ docker run -d -p 8001:80 --name=proxy-container nginx:1.25.0-alpine
~$ vi nginx.conf
- ๊ฐ์ค์น๋ฅผ ๋ reverse proxy ๊ตฌ์ฑ
http {
upstream backend-alb {
server 192.168.56.101:5001 weight=60;
server 192.168.56.101:5002 weight=20;
server 192.168.56.101:5003 weight=20;
}
server {
listen 80 default_server;
location / {
proxy_pass http://backend-alb;
}
}
}
- ์์์ ๋ง๋ config ํ์ผ์ Nginx ์ปจํ ์ด๋ ๋ด๋ถ๋ก cp ํ ๋ค์ ์ ์ฉ์ ์ํ restart
~$ docker cp nginx.conf proxy-container:/etc/nginx/nginx.conf
~$ docker restart proxy-container