본문 바로가기

AWS

[AWS] GWLB 구성 가이드 with Terraform(2)

반응형

GWLB 구성 확인

Appliance VPC 구성을 확인합니다.

  1. GWLB 구성 확인
  2. GWLB Target Gorup 구성 확인
  3. VPC Endpoint와 Service 확인
  4. Appliance 확인

4 단계: GWLB 구성 확인

AWS 관리 콘솔 > EC2 > 로드밸런싱 > 로드밸런서 메뉴에서 appliance-gwlb를 선택하여 구성된 내용을 확인합니다.

GWLB 구성 내용은 다음과 같은 유사해야 합니다.

 

5 단계: GWLB Target Group 구성 확인

AWS 관리 콘솔 > EC2 > 로드밸런싱 > 대상 그룹 메뉴에서 appliance-gwlb-tg를 선택하여 설정된 대상이 application balancer의 ip로 설정이 되어있는지 확인합니다.

Target Group 구성 내용은 다음과 같이 유사해야 합니다.

6 단계: VPC Endpoint와 Service 확인

AWS 관리 콘솔 > VPC > 엔드포인트 서비스 메뉴를 선택합니다. 생성된 VPC Endpoint Service를 확인할 수 있습니다.

 

7 단계: Appliance 확인

AWS 관리 콘솔 > EC2 > 인스턴스 메뉴를 선택합니다. 2대의 appliance 서버가 설치되어있는 것을 확인할 수 있습니다.

 

 

각 Appliance에서 아래 명령을 통해 , GWLB IP와 어떻게 매핑되었는지 확인합니다.

 

$ sudo iptables -L -n -v -t nat

 

위 명령어의 내용은 아래 내용과 유사합니다.

 

Chain PREROUTING (policy ACCEPT 56 packets, 3952 bytes)
 pkts bytes target     prot opt in     out     source               destination
  139 17174 DNAT       udp  --  eth0   *       10.21.11.8           10.21.11.194         to:10.21.11.8:6081

Chain INPUT (policy ACCEPT 56 packets, 3952 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 82 packets, 6216 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 82 packets, 6216 bytes)
 pkts bytes target     prot opt in     out     source               destination
  139 17174 MASQUERADE  udp  --  *      eth0    10.21.11.8           10.21.11.8           udp dpt:6081

트래픽 확인

8 단계: Ingress 트래픽 확인

  1. 외부에 노출된 ALB DNS A 레코드로 접근 합니다.
  2. IGW(sec-igw)에서 sec-ingress-rt를 통해 sec-vpc의 GWLB VPC Endpoint로 접근합니다.
  3. sec-vpc의 GWLB VPC Endpoint에서 appliance-vpc의 VPC Endpoint Service로 트래픽을 전송합니다.
  4. GWLB에서 Appliance 서버(appliance-02-pub-2c)로 트래픽을 전송합니다.
    UDP 6081 GENEVE로 Encapsulation (TLV Header - 5Tuple)
  5. Appliance 서버(appliance-02-pub-2c)에서 트래픽 처리 후 Return 합니다.
  6. GWLB에서 Decap 후 VPC Endpoint Service로 전달합니다.
  7. VPC Endpoint Service를 통해서 GWLBe Subnet(sec-gwlb-2c)으로 전달합니다.
  8. GWLB Subnet에서 ALB(sec-app01-web-alb)로 전달합니다.
  9. ALB(sec-app01-web-alb)에서 NLB(app01-web-nlb)로 트래픽을 전달 합니다.
  10. NLB(app01-web-nlb)에서 WEB 서버(app01-web-02-pri-2c)로 트래픽을 처리합니다.

9 단계: Egress 트래픽 확인

  1. app01-vpc Private Subnet Instance에서 TGW로 트래픽 전송합니다.
    app01-pri-rt Private Subnet Routing Table 참조합니다.
  2. TGW에서 app01-vpc의 Attachment로 연결된 gwlb-tg-out-tgrt 라우팅 테이블을 참조합니다.
  3. TGW에서 라우팅 테이블을 참조해서 sec-vpc로 트래픽을 전송합니다.
  4. sec-vpc NAT Gateway로 전송합니다.
    sec-tgw-2c-rt 서브넷의 Routing Table을 참조합니다.
  5. sec-pub 서브넷 에서 GWLB VPC Endpoint로 전송합니다.
    sec-pub-2c-rt 서브넷의 Routing Table을 참조합니다.
  6. sec-vpc GWLB VPC Endpoint에서 appliacne-vpc의 VPC Endpoint Service로 전송합니다.
  7. GLWB VPC Endpoint Service에서 GWLB로 전송합니다.
  8. GWLB에서 AZ A 또는 AZ C Target Group으로 LB 처리합니다.
    UDP 6081 GENEVE로 Encapsulation (TLV Header - 5Tuple)
  9. Appliance 서버(appliance-02-pub-2c)에서 트래픽 처리 후 Return 합니다.
  10. GWLB에서 Decapsulation 후 VPC Endpoint Service 전달합니다.
  11. sec-vpc GWLBe(sec-gwlb-ep-2c) Subnet에서 라우팅을 통해 IGW(sec-igw)전달 합니다.
  12. IGW(sec-igw)에서 인터넷으로 트래픽 처리 합니다.

10 단계: ALB 트래픽 확인

Appliance 서버(appliance-01-pub-2a, appliance-02-pub-2c)에 접속합니다.

각 Appliance 서버에서 아래 명령로 GWLB로 트래픽을 확인합니다.

 

$ sudo tcpdump -nvv 'port 6081'

 

외부에 노출된 ALB DNS A 레코드를 확인하고 복사합니다.

 

 

위에서 복사해둔 ALB DNS A 레코드를 웹브라우저에 붙여넣습니다.

위 명령어의 내용은 아래 내용과 유사합니다.

 

 

웹브라우저에서 ALB DNS A 레코드와 URL을 입력해서 실행시키면, GWLB에 연결해 둔 Appliance의 TCP Dump값에서 패킷을 통과하는 것을 확인 할 수 있습니다.

 

106.247.225.50.55585 > 10.20.11.148.http: Flags [S], cksum 0xfc77 (correct), seq 867242539, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2923694880 ecr 0,sackOK,eol], length 0
106.247.225.50.55585 > 10.20.11.148.http: Flags [S], cksum 0xfc77 (correct), seq 867242539, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2923694880 ecr 0,sackOK,eol], length 0
10.20.11.148.http > 106.247.225.50.55585: Flags [S.], cksum 0x7183 (correct), seq 21575494, ack 867242540, win 26847, options [mss 8645,sackOK,TS val 3764977149 ecr 2923694880,nop,wscale 8], length 0
10.20.11.148.http > 106.247.225.50.55585: Flags [S.], cksum 0x7183 (correct), seq 21575494, ack 867242540, win 26847, options [mss 8645,sackOK,TS val 3764977149 ecr 2923694880,nop,wscale 8], length 0
106.247.225.50.55585 > 10.20.11.148.http: Flags [.], cksum 0x1d2c (correct), seq 1, ack 1, win 2058, options [nop,nop,TS val 2923694891 ecr 3764977149], length 0
106.247.225.50.55585 > 10.20.11.148.http: Flags [.], cksum 0x1d2c (correct), seq 1, ack 1, win 2058, options [nop,nop,TS val 2923694891 ecr 3764977149], length 0
106.247.225.50.55585 > 10.20.11.148.http: Flags [P.], cksum 0x100d (correct), seq 1:486, ack 1, win 2058, options [nop,nop,TS val 2923694896 ecr 3764977149], length 485: HTTP, length: 485
GET / HTTP/1.1
Host: sec-app01-web-alb-924756637.ap-northeast-2.elb.amazonaws.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9
106.247.225.50.55585 > 10.20.11.148.http: Flags [P.], cksum 0x100d (correct), seq 1:486, ack 1, win 2058, options [nop,nop,TS val 2923694896 ecr 3764977149], length 485: HTTP, length: 485
GET / HTTP/1.1
Host: sec-app01-web-alb-924756637.ap-northeast-2.elb.amazonaws.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9
10.20.11.148.http > 106.247.225.50.55585: Flags [.], cksum 0x22ce (correct), seq 1, ack 486, win 110, options [nop,nop,TS val 3764977165 ecr 2923694896], length 0
10.20.11.148.http > 106.247.225.50.55585: Flags [.], cksum 0x22ce (correct), seq 1, ack 486, win 110, options [nop,nop,TS val 3764977165 ecr 2923694896], length 0
10.20.11.148.http > 106.247.225.50.55585: Flags [P.], cksum 0x3528 (correct), seq 1:643, ack 486, win 110, options [nop,nop,TS val 3764977171 ecr 2923694896], length 642: HTTP, length: 642
HTTP/1.1 200 OK
Date: Fri, 27 May 2022 04:32:20 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 363
Connection: keep-alive
Server: Apache/2.4.53 ()
Upgrade: h2,h2c
Last-Modified: Fri, 27 May 2022 01:01:16 GMT
ETag: "16b-5dff3d7f23007"
Accept-Ranges: bytes

<h1>Gateway Load Balancer Test:</h1>
<html><h2>My Private IP is: 10.10.21.100</h2></html>
<html><h2>My Host Name is: ip-10-10-21-100.ap-northeast-2.compute.internal</h2></html>
<html><h2>My instance-id is: i-065f39e64b553ab5e</h2></html>
<html><h2>My instance-type is: t2.micro</h2></html>
<html><h2>My placement/availability-zone is: ap-northeast-2a</h2></html>
10.20.11.148.http > 106.247.225.50.55585: Flags [P.], cksum 0x3528 (correct), seq 1:643, ack 486, win 110, options [nop,nop,TS val 3764977171 ecr 2923694896], length 642: HTTP, length: 642
HTTP/1.1 200 OK
Date: Fri, 27 May 2022 04:32:20 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 363
Connection: keep-alive
Server: Apache/2.4.53 ()
Upgrade: h2,h2c
Last-Modified: Fri, 27 May 2022 01:01:16 GMT
ETag: "16b-5dff3d7f23007"
Accept-Ranges: bytes

<h1>Gateway Load Balancer Test:</h1>
<html><h2>My Private IP is: 10.10.21.100</h2></html>
<html><h2>My Host Name is: ip-10-10-21-100.ap-northeast-2.compute.internal</h2></html>
<html><h2>My instance-id is: i-065f39e64b553ab5e</h2></html>
<html><h2>My instance-type is: t2.micro</h2></html>
<html><h2>My placement/availability-zone is: ap-northeast-2a</h2></html>
106.247.225.50.55585 > 10.20.11.148.http: Flags [.], cksum 0x18a5 (correct), seq 486, ack 643, win 2048, options [nop,nop,TS val 2923694911 ecr 3764977171], length 0
106.247.225.50.55585 > 10.20.11.148.http: Flags [.], cksum 0x18a5 (correct), seq 486, ack 643, win 2048, options [nop,nop,TS val 2923694911 ecr 3764977171], length 0

자원 삭제

11 단계 : Destroy

아래 명령어를 입력하여 gwlb 환경을 삭제합니다.

 

terraform destroy

APPENDIX

https://aws.amazon.com/ko/blogs/networking-and-content-delivery/integrate-your-custom-logic-or-appliance-with-aws-gateway-load-balancer/

https://whchoi98.gitbook.io/aws-gwlb/gwlb-design4

https://aws.amazon.com/ko/blogs/korea/introducing-aws-gateway-load-balancer-easy-deployment-scalability-and-high-availability-for-partner-appliances/

반응형