클라우드 + DevOps/Docker

Docker 네트워크 실습 심화 :: HAproxy ACL 조건 설정

gamjadori 2024. 2. 24. 17:48
728x90

<심화 :: HAproxy ACL 조건 설정>

  • ACL 조건: 특정 조건에 따라 요청을 필터링하고, 특정 동작을 취할 수 있도록 하는 규칙들의 목록 (경로 세부 설정)

1. haproxy.cfg 편집

ubuntu@host1:~/Labs/ch05$ cp haproxy.cfg haproxy1.cfg
>> 기존 haproxy.cfg 내용을 옮기고 새로 haproxy.cfg 생성
ubuntu@host1:~/Labs/ch05$ vi haproxy.cfg

<vi 편집내용>

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

>> 80번 포트로 신호가 들어오면
myfrontend라는 이름을 가진 프론트엔드로 가서 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
>>echo-web1_backend에는 echo-web1-item / echo-web2-item가 있고
echo-web2_backend에는 echo-web3-basket / echo-web4-basket가 있음.

backend webservers
  balance roundrobin
  server s1 echo-web1-item:5678 check
  server s2 echo-web2-item:5678 check
  server s3 echo-web3-basket:5678 check
  server s4 echo-web4-basket:5678 check
>> balance roundrobin에는 echo-web1 ~ echo-web4를 사용할 것임.

backend echo-web1_backend
  server s1 echo-web1-item:5678 check
  server s2 echo-web2-item:5678 check
>> echo-web1_backend에는 echo-web1-item / echo-web2-item가 있고

backend echo-web2_backend
  server s3 echo-web3-basket:5678 check
  server s4 echo-web4-basket:5678 check
>> echo-web2_backend에는 echo-web3-item / echo-web4-item가 있음.

>> 라운드로빈 로드밸런싱 방식을 이용하는데,
답변을 하는 서버는 echo-web1~echo-web4 모두 들어감.
echo-web1 / echo-web2는 item이고
echo-web3 / echo-web4는 basket이라
/item으로 시작하는 경로는 echo-web1 / echo-web2로 가고
/basket로 시작하는 경로는 echo-web3 / echo-web4로 감.

 

2. echo-web 도커 컨테이너 생성 및 구동

  • echo-web1 / echo-web2는 item echo-web3 / echo-web4는 basket
ubuntu@host1:~/Labs/ch05$ docker run -d -p 6001:5678 --net=proxy-net --name=echo-web1-item hashicorp/http-echo -text="echo-web1-item"
598a7fd79944732dfae3a31bf9265cb537b25c2531aed7c4312cfb38bf1d4af9
ubuntu@host1:~/Labs/ch05$ docker run -d -p 6002:5678 --net=proxy-net --name=echo-web2-item hashicorp/http-echo -text="echo-web2-item"
e05672fcdf0dadc124609400fe15406770124c9cd36eb0fc78e606e71449fc95
ubuntu@host1:~/Labs/ch05$ docker run -d -p 6003:5678 --net=proxy-net --name=echo-web3-basket hashic
orp/http-echo -text="echo-web3-basket"
bd288a8230c136d748c3ea2fb50c7d0bc9cd180145680f98c428781b5086e604
ubuntu@host1:~/Labs/ch05$ docker run -d -p 6004:5678 --net=proxy-net --name=echo-web4-basket hashic
orp/http-echo -text="echo-web4-basket"

 

3. 컨테이너 가동 및 목록 확인

ubuntu@host1:~/Labs/ch05$ docker container 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
3fbe576f54a8713206cc3187aca63248d2f6fc4f29aea19d94c410c905e6ed20

<컨테이너 목록 확인>

ubuntu@host1:~/Labs/ch05$ docker container ps
CONTAINER ID   IMAGE                            COMMAND                   CREATED              STATUS              PORTS                                                                          NAMES
3fbe576f54a8   haproxytech/haproxy-alpine:2.5   "/docker-entrypoint.…"   8 seconds ago        Up 7 seconds        0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:8404->8404/tcp, :::8404->8404/tcp   haproxy-container
fc36f9434108   hashicorp/http-echo              "/http-echo -text=ec…"   About a minute ago   Up About a minute   0.0.0.0:6004->5678/tcp, :::6004->5678/tcp                                      echo-web4-basket
bd288a8230c1   hashicorp/http-echo              "/http-echo -text=ec…"   About a minute ago   Up About a minute   0.0.0.0:6003->5678/tcp, :::6003->5678/tcp                                      echo-web3-basket
e05672fcdf0d   hashicorp/http-echo              "/http-echo -text=ec…"   2 minutes ago        Up 2 minutes        0.0.0.0:6002->5678/tcp, :::6002->5678/tcp                                      echo-web2-item
598a7fd79944   hashicorp/http-echo              "/http-echo -text=ec…"   4 minutes ago        Up 4 minutes        0.0.0.0:6001->5678/tcp, :::6001->5678/tcp                                      echo-web1-item

 

4. HAproxy 결과 확인

/item으로 시작하는 경로는 echo-web1_backend로 라우팅되고,

/basket으로 시작하는 경로는 echo-web2_backend로 라우팅되도록 ACL이 설정

  • basket 확인
ubuntu@host1:~/Labs/ch05$ curl localhost/basket
echo-web3-basket
ubuntu@host1:~/Labs/ch05$ curl localhost/basket
echo-web4-basket
  • item 확인
ubuntu@host1:~/Labs/ch05$ curl localhost/item
echo-web1-item
ubuntu@host1:~/Labs/ch05$ curl localhost/item
echo-web2-item