Docker π
[Docker] λ컀 DNSμ 컨ν μ΄λ proxy(Nginx)
kreal
2023. 9. 10. 16:29
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