Nginx를 활용한 컨테이너 proxy

wookja·2024년 6월 29일
0

Docker

목록 보기
2/3

Nginx reverse proxy

  • 클라이언트 요청이 ~ 포트로 들어오면 준비해둔 애플리케이션 서버의 주소로 트래픽을 분배한다
  • 기본 분배 방식 (로드밸런싱)은 RR(Round-Robin) 방식으로 처리
  • 요청이 적은 서버로 분배하는 least-connection, IP당 서버를 분배하는 IP_hash 등 여러가지 부하분산 알고리즘 사용 가능

실습 환경

  • NCP VM 사용 (Ubuntu 22.04 / vCPU2, RAM 4GB)
  • 사전에 Docker engine 설치 완료

Nginx Container reverse proxy

  • 공인 IP:8001로 접속 시 5001, 5002, 5003번 포트를 사용하는 노드들의 로드밸런싱 구현 해 보기

1. 5001, 5002, 5003 포트를 사용하는 nginx node 컨테이너 생성

~$ docker run -it -d -e SERVER_PORT=5001 -p 5001:5001 -h alb-node01 -u root --name=alb-
node01 dbgurum/nginxlb:1.0
~$ docker run -it -d -e SERVER_PORT=5002 -p 5002:5002 -h alb-node02 -u root --name=alb-
node02 dbgurum/nginxlb:1.0
~$ docker run -it -d -e SERVER_PORT=5003 -p 5003:5003 -h alb-node03 -u root --name=alb-
node03 dbgurum/nginxlb:1.0
~$ docker ps -a | grep node
84be5755c789 dbgurum/nginxlb:1.0 "/cnb/lifecycle/laun…" 5 seconds ago Up 4 seconds 0.0.0.0:5003-
>5003/tcp, :::5003->5003/tcp alb-node03
0eff7905f458 dbgurum/nginxlb:1.0 "/cnb/lifecycle/laun…" 8 seconds ago Up 8 seconds 0.0.0.0:5002-
>5002/tcp, :::5002->5002/tcp alb-node02
f6c4c0941d8b dbgurum/nginxlb:1.0 "/cnb/lifecycle/laun…" 12 seconds ago Up 11 seconds 0.0.0.0:5001-
>5001/tcp, :::5001->5001/tcp alb-node01
~$ sudo netstat -nlp | grep 5001
~$ sudo netstat -nlp | grep 5002
~$ sudo netstat -nlp | grep 5003
  • 공인 IP:포트번호로 각 노드 접속 테스트

2. Proxy를 담당할 nginx 컨테이너 생성

root@wookjin:~# docker run -d -p 8001:80 --name=proxy-container nginx:1.25.0-alpine
fac947af0f6d7b747b889a9f6be3c8afabb4938872a210918071a55e81bd8931
root@wookjin:~# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                    NAMES
fac947af0f6d   nginx:1.25.0-alpine   "/docker-entrypoint.…"   6 seconds ago    Up 6 seconds    0.0.0.0:8001->80/tcp     proxy-container
9a457a3f2181   dbgurum/nginxlb:1.0   "/cnb/lifecycle/laun…"   32 minutes ago   Up 32 minutes   0.0.0.0:5003->5003/tcp   alb-node03
546685c93357   dbgurum/nginxlb:1.0   "/cnb/lifecycle/laun…"   33 minutes ago   Up 33 minutes   0.0.0.0:5002->5002/tcp   alb-node02
a3da3eaffe4a   dbgurum/nginxlb:1.0   "/cnb/lifecycle/laun…"   47 minutes ago   Up 47 minutes   0.0.0.0:5001->5001/tcp   alb-node01

2. nginx.conf 파일 생성 및 proxy container에 복사 후 컨테이너 재시작

root@wookjin:~# cat nginx.conf 
events { 
    worker_connections 1024; 
}

http {
    upstream backend-alb {
        server 223.130.156.230:5001;
        server 223.130.156.230:5002;
        server 223.130.156.230:5003;
    }

    server {
        listen 80 default_server;
        
        location / {
            proxy_pass http://backend-alb;
        }
    }
}

root@wookjin:~# docker cp nginx.conf proxy-container:/etc/nginx/nginx.conf
Successfully copied 2.05kB to proxy-container:/etc/nginx/nginx.conf
root@wookjin:~# docker restart proxy-container 
proxy-container

3. curl로 테스트 해보기

root@wookjin:~# curl localhost:5001
Listening: 5001, Hosting: alb-node01
root@wookjin:~# curl localhost:5002
Listening: 5002, Hosting: alb-node02
root@wookjin:~# curl localhost:5003
Listening: 5003, Hosting: alb-node03

4. 브라우저에서 proxy 컨테이너로 접속 해보기

5. 부하분산 가중치 변경

nginx.conf 파일 내 upstream 블록에서 weight 설정

profile
차곡차곡 쌓아가는 Cloud 블로그

0개의 댓글