[따라하기] AWS GWLB (Gateway Load Balancer)



1. AWS GWLB (Gateway Load Balancer) 란?

AWS 의 GWLB (Gateway Load Balancer) 는 네트워크 트래픽을 다루는 다양한 여러 업체의 가상 어플라이언스 들을 쉽고 비용 효율적으로 배포, 확장 그리고 관리 해주는 완전 관리형 서비스입니다. 예를 들어, 컨트롤 플레인 (Control Plane) 과 데이터 플레인 (Data Plane) 이 별도로 존재하는 방화벽이나 SD-WAN 과 같은 일종의 SDN (Software-Defined Networking) 환경을 구축/운영하고자 하는 경우, 다음과 같이 (1) 직접 구성하고 관리 해야 했던 기존 환경과 (2) 완전 관리형 기반의 GWLB 환경을 비교할 수 있습니다.

** 참고> 2021년 2월 현재 AWS GWLB 를 이용할 수 있는 가용한 리전들은 다음과 같습니다 : 미국 동부(북부 버지니아), 미국 서부(오레곤), EU(아일랜드), 남아메리카(상파울루), 아시아 태평양(시드니)
** 참고> 2021년 3월 현재 서울 리전을 포함하여 AWS GWLB 를 이용할 수 있는 가용한 리전들이 다음과 같이 추가되었습니다 : 미국 동부(오하이오), 아시아 태평양(도쿄) 및 EU(프랑크푸르트 및 스톡홀름), 미국 서부(캘리포니아 북부), EU(런던), EU(파리), EU(밀라노), 아프리카(케이프타운), 중동(바레인), 아시아 태평양(홍콩), 아시아 태평양(싱가포르), 아시아 태평양(뭄바이), 캐나다(센트럴), 아시아 태평양(오사카), 아시아 태평양(서울)


(1) 기존의 환경
– 관리자가 AWS 내로 유입되는 모든 트래픽이 먼저 방화벽을 거친 다음 내부로 분산하여 전달되는 구조를 구성해야 한다고 가정해보겠습니다.
– 이 때, 사용자는 직접 VPC (Virtual Private Cloud) 에 IGW (Internet Gateway), VGW (Virtual Private Gateway) 등을 구성합니다. 이 후 방화벽 등의 기능 (예> 트래픽을 분석, 차단 처리) 을 하는 EC2 인스턴스를 생성하고, 이 인스턴스에서는 수행하는 기능에 따라 특정 트래픽이 지정되는 라우팅으로 흐르도록 합니다. 특히 VPC 에서 Ingress Routing 을 사용하여 IGW, VGW 를 거쳐 들어오는 VPC 트래픽에 대해 라우팅 테이블을 적용하여 VPC 내에 있는 해당 인스턴스로 경로를 통하도록 합니다.
– 위와 같은 환경을 직접 구성 및 관리하는 경우, 일일이 구성을 하기가 어렵고 번거로울 뿐 만 아니라 고가용성과 확장성을 확보하기는 어렵습니다. 또한 트래픽의 부하를 처리하기 위해 사용자가 직접 어플라이언스를 스케일아웃 (Scale-out) 하거나 다른 도구 등을 사용해야 합니다. 이 경우, 비용과 시간이 비교적 많이 소요될 수 있습니다.

(2) GWLB 의 환경
– GWLB 는 VPC 로 들어오는 트래픽들을 관리자가 설정한 VPC 의 라우팅 테이블에 따라 방화벽 역할을 수행하는 가상 어플라이언스들로 보낸 후 방화벽 정책에 따라 돌아오는 트래픽들을 지정된 라우팅으로 전달합니다.
– 방화벽 어플라이언스들을 트래픽에 따라 탄력적으로 확장/축소해주기도 합니다.
– GWLB 는 트래픽 흐름을 정상 가상 어플라이언스를 통해 라우팅이 되도록하여 가용성을 확보합니다.
– 요약해서, GWLB 는 네트워크 게이트웨이 (트래픽이 오고가는 단일지점), 로드밸런서, 가상 어플라이언스들에 대한 오토 스케일링 그리고 VPC 엔드포인트 (예> AWS PrivateLink) 와 같은 역할을 동시에 완전 관리형 서비스로 지원 및 수행합니다.

아래 예시의 구성과 같이 VPC 1 의 고객과 VPC 2 의 다른 고객 또는 사용자가 인입되는 트래픽에 대해 방화벽 정책을 적용받아야 하는 경우를 가정해보겠습니다.

| GWLB 구성도 예시

1) 외부에서 트래픽이 인입되는 경우, GWLBe (Gateway Load Balancer Endpoint) 로 트래픽 도달
2) 라우팅에 따라 GWLBe 는 GWLB 로 트래픽 전달
3) GWLB 는 하위 레벨에 있는 방화벽 어플라이언스로 로드밸런싱 하여 트래픽을 전달
4) 방화벽 어플라이언스에서 트래픽에 대한 보안 기능 수행 (예> 필터링 등) – 방화벽 어플라이언스들은 탄력적으로 확장/축소
5) 반환되는 정상 트래픽는 GWLB 로 다시 전달
6) GWLB 는 GWLBe 로 트래픽 다시 전달
7) GWLBe 는 내부 VPC 로 트래픽 전달
8) 이 후 설정된 라우팅에 따라 최종 목적지까지 트래픽 전달

(3) 아키텍처 패턴
위와 같은 예제 구성도 이외에도 상황이나 요구 사항에 맞게 다음과 같은 다양한 아키텍처 패턴들을 구성할 수 있습니다.
– 단일 VPC 와 상위/하위 네트워크 연결 구조 (예> 단일 VPC 가 외부 인터넷 환경과의 연결 시) : 이 구성에서는 방화벽 또는 인라인 기능이 VPC 내부의 리소스와 VPC 외부의 인터넷 사이에 위치하고 있는 형태를 보여줍니다. 이 모델에서는 컨트롤 플레인을 중앙 집중화 또는 분산형으로 관리하고, 별도로 분리된 데이터 플레인을 각각 유지보수 할 수 있는 유연성을 확보할 수 있습니다.

| 데이터 플레인과 컨트롤 플레인이 혼합된 구조 (GWLB + GWLBe)

| 별도로 집중화된 컨트롤 플레인 (GWLB), 그리고 분리된 데이터 플레인 (GWLBe) 구조

– 단일 VPC 와 상위/하위 네트워크 연결 구조 (예> 단일 VPC 가 외부 인터넷 환경과의 연결 시) : 이 구성에서는 다른 여러 VPC 들이 AWS Direct Connect, VPN 과 같은 서비스들을 거쳐 AWS Transit Gateway 를 통한 후 GWLB 에 연결된 어플라이언스를 거쳐 외부 인터넷 환경과의 연결에 중점을 둡니다.

| 중앙화된 상단/하단 네트워크 연결 구성


** Geneve (Generic Network Virtualization Encapsulation) 프로토콜 (RFC 문서 참고 : https://www.rfc-editor.org/rfc/rfc8926.html)

네트워크 가상화는 여러 소프트웨어, 하드웨어 엔드포인트, 전송 구간, 중앙화된 컨트롤 플레인/클러스터 등을 포괄적으로 조합하여 동작하게 됩니다. 따라서 서로 다른 요소들을 결합해야 하므로, 터널링에서는 관계된 모든 구성 요소가 서로 영향을 받게 됩니다. 이에 유연성은 이러한 구성을 가능하게 해주는 가장 중요한 개념입니다.

| Geneve 를 활용한 구성 예제

Geneve 프로토콜이란, 이러한 네트워크 가상화를 가능하도록 지원하는 네트워크 프로토콜입니다. GWLB 는 Geneve 라는 프로토콜을 이용하여 서로 다른 VPC 에 있는 GWLB (예> 어플라이언스들을 연결해주는 로드밸런서) 와 GWLBe (Edge) 들을 연결해 주고 있습니다. Geneve 프로토콜은 기본적으로 UDP 포트번호 6081 번을 사용합니다. 패킷 상세를 보면, VxLAN 에서는 VNI (VxLAN Network Identifier) 외에 특별히 알아야 할 필드 들이 없었다면, Geneve 에서는 VNI 외에도 TLV (Type-Length-Value) 를 추가하여 필요한 기능을 확장할 수 있게 합니다.

| Geneve 프로토콜 헤더 상세 (다른 계층들의 헤더 정보를 포함)




2. GWLB 구성 해보기 (https://www.youtube.com/watch?v=MNQyvr9NcrA)

다음과 같은 예제의 아키텍처 그림과 같이 GWLB 와 관련된 어플라이언스, 인스턴스 등을 크게 아래의 순서와 같이 구성해보도록 하겠습니다. (요약 : 자신의 VPC 와 보안 어플라이언스 기능을 제공하는 파트너 VPC 를 바탕으로 GWLB 구성)

1) AWS Marketplace 를 통해 파트너의 가상 어플라이언스 배치
2) 어플라이언스 인스턴스를 자신의 VPC 에서 실행
3) GWLB 및 어플라이언스 인스턴스를 위한 타겟 그룹을 생성
4) 트래픽을 검출하기 위한 GWLBe 생성
5) GWLBe 로 트래픽을 보내기 위한 라우팅 테이블 업데이트

** GWLB 설정을 제외한 나머지 (VPC, EC2 Instance, 라우팅 테이블 등) 는 이미 설정 및 구성이 완료되어 있다고 가정합니다.

(1) AWS Management Console 에서 EC2 의 Load Balancers 로 이동한 후 ‘Create Load Balancer’ 를 클릭합니다.

(2) Gateway Load Balancer 의 ‘Create’ 버튼을 클릭합니다.

(3) Gateway Load Balancer 의 이름을 입력하고 VPC 와 서브넷을 선택한 다음, 가용 영역을 지정합니다. 이 후 ‘Next: Configure Routing’ 을 선택합니다.

(4) 라우팅을 할 대상 그룹을 설정해 줍니다. 기본적으로 GWLB 는 위에서 설명한 것과 같이 Geneve 프로토콜과 6081 포트를 사용하여 설정되는 대상 그룹으로 요청을 라우팅 처리합니다. 설정 완료 후 ‘Next: Register Targets’ 를 클릭합니다.

(5) 다른 계정의 VPC (예> 파트너의 계정) 에 있는 타겟 (예> 인스턴스) 들을 등록합니다. 이 후 ‘Next : Review’ 를 클릭하고 다음 화면에서 ‘Create’ 를 클릭합니다.

(6) 설정이 완료되면, 가상 어플라이언스 소프트웨어가 동작되는 EC2 인스턴스의 보안 그룹을 구성 합니다. 일반적으로 GWLB 에서 트래픽을 가져오는 용도의 Geneve 프로토콜 (포트 번호 UDP 6081) 과 상태 검사 용도의 HTTP 프로토콜 (포트 번호 TCP 80) 을 추가합니다.

(7) 클라이언트에 송/수신되는 트래픽을 GWLB 뒤에 위치한 어플라이언스 들로 보내기 위한 GWLB 엔드포인트 (GWLBe) 를 설정합니다. GWLBe 는 애플리케이션 서브넷에 각각 1개씩 배치하고, 가용 영역 별 라우팅 테이블을 각각 설정 합니다. 또한 VPC 의 IGW 에 연결된 라우팅 테이블 1개도 설정 합니다. (아래에서는 GWLBe 와 라우팅 일부를 설정하는 예시를 보여줍니다.)

– 이를 위해서, VPC 의 ‘Create Endpoint Service’ 를 클릭하여 대상 GWLB 를 선택하고 해당 서비스를 생성합니다. (여기서 ‘Require acceptance for endpoint’ 항목의 ‘Acceptance required’ 는 체크를 해제하였습니다.)

– 생성이 완료되면 ‘Service name’ 을 복사해둡니다.


– ‘Endpoint’ 로 이동 후 ‘Create Endpoint’ 를 클릭합니다.

– ‘Find service by name’ 을 클릭하고 복사해둔 ‘Service name’ 을 붙여넣기 하고 ‘Verify’ 를 클릭합니다.

– ‘VPC’ 에서 어플리케이션이 배치되어 있는 VPC 를 선택합니다. 이 후 ‘Create Endpoint’ 를 클릭합니다.

– Route Tables 로 이동 한 다음, 어플리케이션이 위치한 서브넷의 Route table 을 클릭하고 ‘Routes’ 탭에서 ‘Edit routes’ 를 클릭합니다.

– 대상이 되는 GWLB Endpoint 를 설정하고 ‘Save routes’ 를 클릭합니다.

– 마찬가지로, 별도의 Ingress 라우팅 테이블에서 특정 어플리케이션 서브넷 (예> 10.0.0.32/28) 에 대해 생성한 GWLBe 로 라우팅이 되도록 추가 설정을 해줍니다.

– 설정이 완료되면, 인스턴스에서 다음과 같은 명령어를 통해 Geneve 프로토콜 (포트번호 6081) 이 정상적으로 통신이 되고 있는지 확인 합니다.

tcpdump -nvv 'port 6081'









# Steven

답글 남기기