본문 바로가기

Networking

[실습] Amazon ELB (ALB+NLB) 구성하기

반응형

안녕하세요 서후아빠입니다. ^_^

이번 세션은 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 접속

반응형