Search
Duplicate
📒

[Docker Container] 05-4. Docker Proxy 실습

상태
미진행
수업
Docker Container
주제
Docker
4 more properties
참고

Nginx를 활용한 proxy

NOTE
Nginx란 트래픽이 많은 웹사이트의 서버(AWS)를 도와주는 비동기 이벤트 기반 구조의 경량화 웹 서버 프로그램이다.
Reverse Proxy Server 구성을 통해 로드밸런싱 구현
sudo apt update sudo apt -y install nginx sudo nginx -v sudo systemctl status nginx.service sudo netstat -nlp | grep 80 curl localhost:80
Bash
복사
nginx 설치 및 확인
sudo systemctl stop nginx.service sudo apt autoremove nginx –y sudo netstat -nlp | grep 80
Bash
복사
Nginx 초기화코드

Nginx 로드밸런싱 실습

NOTE
# 서버 구성 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 # 컨테이너 확인 docker ps -a | grep node # 컨테이너 네트워크 포트 확인 sudo netstat -nlp | grep 5001 sudo netstat -nlp | grep 5002 sudo netstat -nlp | grep 5003
Bash
복사
5001~5003의 포트에 서버를 올린다.
# nginx.conf (로드밸런싱 정보) 복사 sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org sudo vi /etc/nginx/nginx.conf # 아래의 파일 복사 # nginx 재시작 sudo systemctl restart nginx.service sudo systemctl status nginx.service
Bash
복사
nginx 설정파일 수정
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; } } }
Bash
복사
설정파일 내용
이제 80포트로 접속하면 Round Robind 형식으로 3개의 서버가 번갈아가며 나옴

Nginx 가중프 로드밸런싱 실습

NOTE
특정 컨테이너에 더 많이 가도록한다.
# Nginx 시작 및 설정파일 이동 docker run -d -p 8001:80 --name=proxy-container nginx:1.25.0-alpine vi nginx.conf docker cp nginx.conf proxy-container:/etc/nginx/nginx.conf docker restart proxy-container # 앞서 한것처럼 5001~5003 서버가 번갈아가며 나옴 curl localhost:8001 curl localhost:8001 curl localhost:8001
Bash
복사
events { worker_connections 1024; } 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 } server { listen 80 default_server; location / { proxy_pass http://backend-alb; } } }
Bash
복사
가중치를 주는 방법

HAProxy를 활용한 컨테이너 Proxy

NOTE
HAProxy ⇒ 기존 하드웨어 스위치를 대처하는 소프트웨어 (L4, L7의 로드밸런싱 제공)!
# 도커 네트워크 생성 docker network create proxy-net # 4개의 컨테이너를 동일 네트워크에 실행 docker run -d --name=echo-web1 --net=proxy-net -h echo-web1 dbgurum/haproxy:echo docker run -d --name=echo-web2 --net=proxy-net -h echo-web2 dbgurum/haproxy:echo docker run -d --name=echo-web3 --net=proxy-net -h echo-web3 dbgurum/haproxy:echo docker run -d --name=echo-web4 --net=proxy-net -h echo-web4 dbgurum/haproxy:echo docker ps -a | grep echo
Bash
복사
동일 네트워크에 다중 컨테이너 실행
# HAProxy 설정파일 vi haproxy.cfg # HAProxy 실행 및 확인 docker run -d --name=haproxy-container \ --net=proxy-net -p 80:80 -p 8404:8404 \ -v $(pwd):/usr/local/etc/haproxy:ro \ haproxytech/haproxy-alpine:2.5 docker port haproxy-container curl localhost:80
Bash
복사
# 글로벌 (기본설정) global stats socket /var/run/api.sock user haproxy group haproxy mode 660 level admin expose-fd listeners log stdout format raw local0 info # http L7설정 defaults mode http timeout client 10s timeout connect 5s timeout server 10s timeout http-request 10s log global # 8404 통계포트 frontend stats bind *:8404 stats enable stats uri / stats refresh 10s # 프론트엔드 서버 frontend myfrontend bind :80 default_backend webservers # 백엔드 서버 backend server s1 echo-web1:8080 check server s2 echo-web2:8080 check server s3 echo-web3:8080 check
Bash
복사
Nginx와 마찬가지로 로드밸런싱이 됨
HAProxy의 통계정보

L7 URI 방식 구성 1

NOTE
L7형식으로 실습을 진행한다.
# HAProxy 실행 docker run -d --name=haproxy-container \ --net=proxy-net -p 80:80 -p 8404:8404 \ -v $(pwd):/usr/local/etc/haproxy:ro \ haproxytech/haproxy-alpine:2.5
Bash
복사
global stats socket /var/run/api.sock user haproxy group haproxy mode 660 level admin expose-fd listeners log stdout format raw local0 info defaults mode http timeout client 10s timeout connect 5s timeout server 10s timeout http-request 10s log global frontend stats bind *:8404 stats enable stats uri / stats refresh 10s frontend myfrontend bind :80 default_backend webservers acl echo-web1 path_beg /echo-web1 acl echo-web2 /echo-web2 acl echo-web3 /echo-web3 use_backend echo-web1_backend if echo-web1 use_backend echo-web2_backend if echo-web2 use_backend echo-web3_backend if echo-web3 backend webservers balance roundrobin server s1 echo-web1:8080 check server s2 echo-web2:8080 check server s3 echo-web3:8080 check backend echo-web1_backend server s1 echo-web1:8080 check backend echo-web2_backend server s2 echo-web2:8080 check backend echo-web3_backend server s3 echo-web3:8080 check
Bash
복사
설정파일 내용

L7 URI 방식 구성 2

NOTE
docker run -d --name=echo-web1-item --net=proxy-net -h echo-web1-item dbgurum/haproxy:echo docker run -d --name=echo-web2-item --net=proxy-net -h echo-web2-item dbgurum/haproxy:echo docker run -d --name=echo-web3-basket --net=proxy-net -h echo-web3-basket dbgurum/haproxy:echo docker run -d --name=echo-web4-basket --net=proxy-net -h echo-web4-basket dbgurum/haproxy:echo docker run -d --name=haproxy-container --net=proxy-net -p 80:80 -p 8404:8404 -v $(pwd):/usr/local/etc/haproxy:ro haproxytech/haproxy-alpine:2.5
Bash
복사
global stats socket /var/run/api.sock user haproxy group haproxy mode 660 level admin expose-fd listeners log stdout format raw local0 info defaults mode http timeout client 10s timeout connect 5s timeout server 10s timeout http-request 10s log global frontend stats bind *:8404 stats enable stats uri / stats refresh 10s frontend myfrontend bind :80 default_backend webservers acl echo-web1-item path_beg /item acl echo-web2-item path_beg /item acl echo-web3-basket path_beg /basket acl echo-web4-basket path_beg /basket use_backend echo-web1_backend if echo-web1-item use_backend echo-web1_backend if echo-web2-item use_backend echo-web2_backend if echo-web3-basket use_backend echo-web2_backend if echo-web4-basket backend webservers balance roundrobin server s1 echo-web1-item:8080 check server s2 echo-web2-item:8080 check server s3 echo-web3-basket:8080 check server s4 echo-web4-basket:8080 check backend echo-web1_backend server s1 echo-web1-item:8080 check server s2 echo-web2-item:8080 check backend echo-web2_backend server s3 echo-web3-basket:8080 check server s4 echo-web4-basket:8080 check
Bash
복사
참고로 경로없이 하면 4개가 RR형식으로 반환됨