안녕하세요 서후아빠입니다. ^_^
이번 세션은 Amazon ELB 서비스 중에서 ALB+NLB 복합 구성에 대해서 간단히 실습을 해보겠습니다.
ALB의 경우 고정 IP 지정이 안되기 때문에 DNS(Public)에 등록할 때, CNAME이 아닌 A레코드(IP 형태)로 등록해야 하는 경우 NLB+ALB 구성으로 진행합니다.
구성도
가용영역 2개(AZ-A-, AZ-C)이므로 가용영역별 ELB Interface가 자동 생성됩니다. 만약 암호화 통신(HTTPS)으로 구성하는 경우 인증서 관리도 염두해 두시기 바랍니다. - 전구간 암호화 : ALB, EC2에서 인증서 관리 - Client~ALB 구간만 암호화 : ALB에서 인증서 관리 priA-ec2-a/c가 인터넷으로 요청하는 서비스가 없는 경우 Nat Gateway(natA-a, natA-c)는 필요없습니다. |
사전 작업
인프라 생성 : vpc, subnet, igw, routing table, iam, ec2, CloudWatch의 로그 그룹 등
※ priA-ec2-a, priA-ec2-c는 wordpress 설치하여 HTTP 준비
# WordPress로 인스턴스를 생성하거나 아래처럼 직접 WordPress(or 웹서비스)를 설치
sudo yum install httpd -y
cat /var/www/html/index.html
<html><body>hello World1</body></html> // priA-ec2-a
<html><body>hello World2</body></html> // priA-ec2-c
sudo systemctl start httpd.service
# HTTP 서비스 Listen 상태 확인
netstat -tupan | grep 80
1단계(옵션) : 무료 도메인 등록
https://내도메인.한국 > 가입 > 로그인 > 일반 도메인 검색(ex : gtek) > gtek.o-r.kr 선택할 경우 우측 "등록하기"
ELB 생성 시 제공되는 도메인으로 구성하는 경우 1단계는 생략하셔도 됩니다. 유료 도메인(AWS Route53)으로 진행하는 경우 https://sh-t.tistory.com/84 1단계 참조하시기 바랍니다. |
2단계(옵션) : 무료 인증서 발급
1단계 진행한 경우만 2단계를 진행하시기 바랍니다. 무료 인증서(90일 유효기간) 발급은 계정별 3개 제한이며, 메일계정만 있으면 가입이 가능합니다. 유료 도메인(AWS Route53)으로 진행하는 경우 https://sh-t.tistory.com/84 2단계 참조하시기 바랍니다. |
https://manage.sslforfree.com/certificates > 가입 > 로그인 > Certificates > New Certificate
구분 | Domains | Validity | CSR & Contact | Finalize Your Order |
New Certificate 과정 | Enter Domains(gtek.o-r.kr) > Next Step |
90-Day Certificate > Next Step |
Auto-Generate CSR > Next Step |
Free > Next Step |
구분 | Verification Method for gtek.o-r.kr | https://내도메인.한국 > 도메인 관리 > 별칭 (CNAME) 체크 | Verification Method for gtek.o-r.kr | |
Verify Domain 과정 | DNS (CNAME) > Name, Point To 내용 복사 ※ 주의 : Name은 도메인 제외한 부분만 사용 _AD6E68A615DF2D455E.gtek.o-r.kr |
Name, Point To 내용 붙여넣기(아래 이미지 참조) > 수정하기 | Next Step > Verify Domain |
구분 | Download Certificate | Install Certificate | Installation Complete |
Install Certificate 과정 | Server Type (AWS) > Download Certificate (.zip) | SKIP | SKIP |
Server Type : Apache, AWS, BigCommerce, cPanel, Google App Engine, Heroku, NGINX, Plesk, Tomcat, Ubuntu, WHM |
3단계(옵션) : AWS Certificate Manager(ACM)에서 외부 인증서 가져오기
다운로드 받은 인증서 파일 압축해제하면 3개의 파일(certificate.crt, private.key, ca_bundle.crt)이 확인됩니다.
AWS Certificate Manager > Get a certificate
구분 | Certificate body | certificate private key | Certificate chain - optional |
내용 | certificate.crt 내용 등록 | private.key 내용 등록 | ca_bundle.crt 내용 등록 |
AWS Certificate Manager > List Certificates > domain name(gtek.o-r.kr)의 situation(issued) 확인
※ 만료 이벤트 관리 : 인증서 만료(1~45일 전부터)에 만료 알림
무료 도메인으로 1~2단계 진행한 경우만 진행하시기 바랍니다. (Route 53으로 진행하는 경우는 진행할 필요없습니다.) |
4단계 : 대상 그룹(Back end) 생성
EC2 > Target groups > Create a target group
구분 | Specify group details | Register targets | ||
ALB 경우 | Choose the target type : instance target group name : albA-tg Protocol(Version):Port : HTTP(HTTP1):80 VPC : vpcA health check protocol, path : HTTP, / |
available instances : priA-ec2-a, priA-ec2-c Ports for selected instances : 80 (Include as pending below) ※ 포트 상태 정상 확인 |
5단계 : 로드 밸런서(ALB) 생성
EC2 > Load balancers > Create a load balancer > Application Load Balancer > Create
구분 | basic configuration | network mapping | security group | listeners and routing, Setting up a secure listener |
ALB 경우 | load balancer name : albA system : internal |
VPC : vpcA Subnet : priA-sn-a, priA-sn-c |
출발지 : 0.0.0.0/0 HTTPS, 443 허용 HTTP, 80 허용 |
Protocol:Port : HTTPS:443 Forward to : albA-tg Default SSL/TLS Certificate : ACM, gtek.o-r.kr |
Protocol:Port : HTTP:80 Redirect : albA-tg |
HTTPS만 리스너 생성하고, HTTP는 리다이렉트로 구성하는 경우는 아래 순서로 작업하시기 바랍니다. 1. HTTPS만 리스너 구성하여 ALB를 생성합니다. 2. ALB(albA)를 선택하여 리스너를 추가합니다. - 경로 : albA 선택 > Listeners (tab) > Add listener - 설정 : Protocol:Port (HTTP:80), Default actions (Redirect), Protocol:Port (HTTPS:443), Full URL |
6단계 : 상태 체크 결과 확인
EC2 > Target groups > albA-tg > Targets (tab) > Health status “healthy”
EC2에서 HTTP(TCP 80) 서비스가 Listen 상태임에도 불구하고 Health status "unhealty"인 경우 확인할 부분 - ALB는 EC2 보안그룹과 HTTP Path 확인 1) 보안그룹 : 출발지(10.0.3.0/24, 10.0.4.0/24), 목적지 포트(TCP 80/443), 허용 ※ ALB를 통과하는 패킷은 ALB 인터페이스로 SNAT 처리되므로 출발지는 pubA-sn-a/c의 IP로 바뀜 ※ 일반적으로는 2단계 ALB에 설정한 보안그룹을 출발지에 등록하여 ALB만 허용하도록 설정 2) ALB의 경우 Port + Path로 Health 체크를 하기 때문에 1단계에 설정한 '/'경로가 맞는지 확인 필요 EC2에 접속하여 명령어(ex : tcpdump -nei any port 80)로 ELB에서 Health check 패킷이 인입되는지 확인 |
7단계 : 대상 그룹(Back end) 생성
EC2 > Target groups > Create a target group
구분 | Specify group details | Target registration | ||
NLB(HTTPS)경우 | Choose the target type : ALB target group name : nlbA-https-tg Protocol(Version):Port : TCP:443 VPC : vpcA health check protocol, path : HTTPS, / |
Forward to : albA | ||
NLB(HTTP)경우 | Choose the target type : ALB target group name : nlbA-http-tg Protocol(Version):Port : TCP:80 VPC : vpcA health check protocol, path : HTTP, / |
Forward to : albA |
health check path는 4단계의 ALB 대상 그룹과 동일하게 설정하도록 합니다. Port와 health check protocol은 5단계의 ALB 리스너와 동일하게 설정하도록 합니다. |
8단계 : 로드 밸런서(NLB) 생성
EC2 > Load balancer > Create a load balancer > Network Load Balancer > Create
구분 | basic configuration | network mapping | listeners and routing |
NLB 경우 | load balancer name : nlbA system : internet-facing |
VPC : vpcA Subnet : pubA-sn-a, pubA-sn-c |
Protocol:Port : TCP:443 Forward to : nlbA-https-tg |
Protocol:Port : TCP:80 Forward to : nlbA-http-tg |
9단계 : 상태 체크 결과 및 접속 도메인 확인
EC2 > Target groups > nlbA-https-tg or nlbA-http-tg > Targets (tab) > Health status “healthy”
EC2 > Load balancer > nlbA > Description (tab) : DNS name 확인 (ex : nlb-ae37deaff027c844.elb.ap-northeast-2.amazonaws.com)
EC2 > Network interface > Description 컬럼에서 "ELB net/..." 찾기 : public IPv4 address 확인 (ex : 43.200.135.47)
인터페이스 유형을 확인해 보면 애플리케이션 로드밸런스는 탄력적 네트워크 인터페이스(= 유동 IP)로 확인됩니다. |
10단계(옵션) : 무료 도메인에 NLB 연결
https://내도메인.한국 > 로그인 > 도메인 관리 > 9단계에서 확인된 nlbA 정보를 A레코드(nlbA 공인 IP) or CNAME(nlbA 공인 도메인) 등록 > 수정하기
※ 2단계에서 도메인 소유를 확인하기 위해 입력한 정보는 삭제해도 관계없음
1~2단계 진행한 경우만 진행하시기 바랍니다. 유료 도메인(AWS Route53)으로 진행하는 경우 https://sh-t.tistory.com/84 4단계 참조하시기 바랍니다. |
11단계 : 부하분산 테스트
브라우져에서 9단계에서 확인한 nlbA 도메인으로 HTTP or HTTPS 접속
※ nlbA로 연결된 인증서가 없기 때문에 HTTPS 요청 시 에러 페이지 발생
브라우져에서 gtek.o-r.kr로 HTTP or HTTPS 접속
'Networking' 카테고리의 다른 글
[이론] Amazon TGW(Transit Gateway) 기본 개념 (0) | 2022.07.14 |
---|---|
[실습] Amazon ELB에서 부하분산 처리한 로그를 Amazon S3에 저장/확인하는 방법 알아보기 (0) | 2022.07.13 |
[실습] Amazon ELB (ALB, NLB) 구성하기 (0) | 2022.07.13 |
[이론] AWS VPN 기본 개념 (0) | 2022.07.06 |
[이론] Amazon GWLB 구성 기본 개념 (1) | 2022.07.05 |