728x90
docker 환경에서 load balancing 실습 - 2 |
이번 시간에는 docker 환경에서 load balancing 실습을 수행해보겠습니다.
구축환경
구축하고자 하는 환경은 위와 같습니다.
VM에서 칼리를 띄우고, 칼리에 nginx 서버를 구축합니다.
이때 외부에서 kali의 nginx 서버에 접속하면, nginx 컨테이너 1,2,3 에 차례로 할당되게 하면서
load balancing을 구현합니다.
실습
1. 칼리에 nginx 서버를 설치 후 start
┌──(kali㉿kali)-[~] └─$ sudo service nginx start |
2. 칼리 ip인 192.168.5.130으로 접속하면 정상적으로 웹 서버가 동작하고 있는것을 확인할 수 있습니다.
3. 해당 서버에 로드밸런싱을 위한 컨테이너 3개를 생성합니다.
이때 볼륨을 설정해서 페이지 편집을 수월하게 설정합니다.
┌──(kali㉿kali)-[~] └─$ sudo mkdir web01 ┌──(kali㉿kali)-[~] └─$ sudo mkdir web02 ┌──(kali㉿kali)-[~] └─$ sudo mkdir web03 ┌──(kali㉿kali)-[~] └─$ sudo docker run -itd -p 5001:80 --name=nginx_web01 -v /home/kali/web01:/usr/share/nginx/html nginx 4a9cb7179a301b645cdef7294d686e30a45be813087206953a80c3a8446ac49f ┌──(kali㉿kali)-[~] └─$ sudo docker run -itd -p 5002:80 --name=nginx_web02 -v /home/kali/web02:/usr/share/nginx/html nginx 76a0705439bd18318adf26b8e1a347a0242832dab52d3e7346ca0cb41c712d65 ┌──(kali㉿kali)-[~] └─$ sudo docker run -itd -p 5003:80 --name=nginx_web03 -v /home/kali/web03:/usr/share/nginx/html nginx e1c17852048dc5c99fe5c1a5d6cd34d99957e6b05222cec1728f59c7f10b2713 |
해당 컨테이너가 잘생성되었는지 확인해봅시다.
┌──(kali㉿kali)-[~] └─$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e1c17852048d nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:5003->80/tcp, :::5003->80/tcp nginx_web03 76a0705439bd nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:5002->80/tcp, :::5002->80/tcp nginx_web02 4a9cb7179a30 nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:5001->80/tcp, :::5001->80/tcp nginx_web01 |
4. 각 컨테이너 웹서버를 구분할 수 있게 볼륨에서 편집합니다.
5. 포트를 통해 접속해봅시다 !
6. 칼리의 nginx 서버에 conf 파일을 통해 로드밸런싱
┌──(kali㉿kali)-[/etc/nginx] └─$ cat nginx.conf user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## upstream backend-lb { server 127.0.0.1:5001; server 127.0.0.1:5002; server 127.0.0.1:5003; } server { listen 80 default_server; listen [::]:80 default_server; location / { proxy_pass http://backend-lb; } } sendfile on; tcp_nopush on; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } #mail { # # See sample authentication script at: # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript # # # auth_http localhost/auth.php; # # pop3_capabilities "TOP" "USER"; # # imap_capabilities "IMAP4rev1" "UIDPLUS"; # # server { # listen localhost:110; # protocol pop3; # proxy on; # } # # server { # listen localhost:143; # protocol imap; # proxy on; # } #} |
여기서 로드밸런싱에 사용된 코드만 빼서보면
upstream backend-lb { server 127.0.0.1:5001; server 127.0.0.1:5002; server 127.0.0.1:5003; } server { listen 80 default_server; listen [::]:80 default_server; location / { proxy_pass http://backend-lb; } } |
proxy_pass를 이용해서 80번포트로 들어온 요청을 5001~5003 으로 넘기는 것이다.
로드밸런싱이 성공적으로 됐는지 실험해봅시다
성공!
728x90
'개인 공부 > rookies' 카테고리의 다른 글
docker file & docker compose - 3 (0) | 2022.10.24 |
---|---|
docker와 k8s 이해 - 1 (0) | 2022.10.20 |
beef를 이용한 xss + sql injection 실습 - 1 (0) | 2022.10.20 |
metasploit을 이용한 취약점 진단 실습 - 3 (0) | 2022.10.04 |
metasploit을 이용한 취약점 진단 실습 - 2 (0) | 2022.10.03 |
댓글