Application Load Balancer에서 리스너 규칙을 통한 포트, 경로 기반 라우팅

Application Load Balancer에서 리스너 규칙을 통한 포트, 경로 기반 라우팅을 정리해 봤습니다.
2023.03.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Application Load Balancer에서 리스너 규칙을 통한 포트, 경로 기반 라우팅을 정리해 봤습니다.

하고 싶은 것

이번 블로그에서 시도 할 내용은 다음과 같습니다.

먼저 https로 접속시, 3가지의 경로를 나누어 접속합니다.

경로 기반 라우팅을 설정해, 443, 443/web, 30001/app 세 가지 경로로 접속을 시도할 생각입니다.

※ https 접속을 하기 위해서는 도메인 설정이 필요합니다. 도메인 설정에 대해서는 아래 블로그를 참고해 주세요.

보안 그룹 설정

먼저 ALB의 보안 그룹은 다음과 같습니다.

https와 포트 30001을 열어둔 상태입니다.

이어서 Web Server의 보안 그룹입니다.

443 포트로 들어와서 44301, 80번 포트로 나눠서 EC2에 접속합니다.

소스의 경우 ALB의 보안 그룹을 설정했습니다.

마지막으로 App Server의 보안 그룹입니다.

ALB에서 30001 포트로 접속해, EC2에서도 30001 포트로 접속하는 이미지입니다.

EC2 인스턴스 설정

yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
cp /usr/share/httpd/noindex/index.html /var/www/html/index.html

cd /var/www/html/
mkdir web
cp /usr/share/httpd/noindex/index.html /var/www/html/web/index.html

Web 서버의 경우 다음과 같이 아파치를 설치, 루트 경로와 /web 경로에 index.html 파일을 배치합니다.

vi /etc/httpd/conf/httpd.conf

현재 아파치에서 사용하는 포트를 추가합니다.

(기본 포트는 80번 포트로 설정되어 있습니다.)

44301 포트를 설정합니다.

systemctl restart httpd.service

설정이 끝났으면, 다음 명령어로 아파치를 재시작 합니다.

yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd

cd /var/www/html/
mkdir app
cp /usr/share/httpd/noindex/index.html /var/www/html/app/index.html

vi /etc/httpd/conf/httpd.conf

systemctl restart httpd.service

App Server도 마찬가지로 설정합니다.

App Server에서는 포트 번호를 30001을 추가합니다.

ALB 및 대상 그룹 설정

ALB를 선택한 다음, 로드 밸런서 이름을 입력합니다.

이어서 VPC, 서브넷을 선택합니다.

이전에 설정한 로드 밸런서용 보안 그룹을 선택하고, 대상 그룹을 생성합니다.

ALB를 통해 EC2로 들어오는 프로토콜은 80번 포트로 선택합니다.

※ 아파치 설정 단계에서 설정한 포트 번호가 여기에 해당 합니다.

이어서 /var/www/html/app/index.html에 http 통신을 보내 healthcheck를 수행합니다.

Web Server를 선택한 다음 대상 그룹 생성을 끝마칩니다.

이어서 조금 전 생성한 대상 그룹과 인증서를 선택한 다음 로드 밸런서 생성을 끝마칩니다.

대상 그룹을 확인해 보면「healthy」가 출력되는 것을 확인할 수 있습니다.

  • web.tokyokjdomain.ml

이어서 위 도메인으로 접속해 보면 https로 문제 없이 접속가능 한 것을 확인할 수 있습니다.

※ ALB의 도메인 네임 설정은 본 블로그에서는 다루지 않습니다.

경로 기반 라우팅 설정

이제 443 포트로 접속하는 기본 접속 경로를 설정했으니, 나머지 접속 경로를 설정해 보도록 하겠습니다.

다시 대상 그룹을 생성합니다.

프로토콜은 http 44301을 설정하고, web 디렉토리 경로에 http 통신을 보내 healthcheck를 수행합니다.

이제 생성한 ALB에서 리스너 규칙을 추가합니다.

경로 기반으로 /web/* 으로 접속한다면 test-web-tg 대상 그룹이 실행됩니다.

대상 그룹 또한「healthy」가 출력되는 것을 확인할 수 있습니다.

/web/* 경로로 접속시, 아파치 화면이 표시 되도록 했지만, index.html 파일을 수정해서「hello web server」가 표시 되도록 하고 실행합니다.

  • https://web.tokyokjdomain.ml/web/

위 URL로 접속해 보면, hello web server가 출력되는 것을 확인할 수 있습니다.

이번에는「test-app-tg」라는 이름으로 App Server의 대상 그룹을 생성합니다.

로드 밸런서에서 리스너를 추가합니다.

프로토콜은 https 30001을 설정합니다.

그리고 대상 그룹은 조금 전 생성한「test-app-tg」를 선택하고, 인증서를 선택한 다음 리스너 추가를 끝냅니다.

대상 그룹 또한 문제 없이「healthy」가 출력되고 있습니다.

App Server 또한 구분을 위해 index.html 파일을 수정해「hello app server」텍스트가 출력되도록 하겠습니다.

  • https://web.tokyokjdomain.ml:30001/app/

마지막으로 30001 포트로 접속해 보면 문제 없이 app server 페이지가 표시 되는 것을 확인할 수 있습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !