본문 바로가기

Cloud/AWS

AWS Network Load Balancer에서 Application Load Balancer 연결2

Today Keys :   network , application , load balancer, lb, elb, aws, private link, endpoint, eip, 고정, forward, cloud 


이번 포스팅은  이번에 추가된 NLB에서 ALB로의 직접 트래픽 전달 지원 기능에 대한 내용에 대한 2번째 포스팅입니다.

기존 포스팅에서 NLB를 이용해서 고정 IP를 이용해서 ALB 서비스 하는 시나리오였다면,

이번에는 NLB를 이용해서 ALB에 연결된 서비스를 Private Link로 서비스하는 시나리오입니다.

실제 NLB에서 ALB를 Target으로 하는 설정은 기존 포스팅 내용을 참고하시면 됩니다 .  (참고하기 : https://zigispace.net/1139)


이번 포스팅에서 구성하게 될 전체적인 구성도입니다.

ZIGI-VPC1에는 사설 서브넷에 ALB와 2대의 ZIGI-WEB1과 ZIGI-WEB2라는 2대의 웹서버를 둡니다.

각각의 웹서버는 서로 다른 서비스를 하는 서버라고 가정했습니다.  (테스트이기 때문에 서버 이중화는 고려하지 않았습니다.

 

웹서버는 동일한 사설 서브넷의 Application Load Balancer의 Target으로 설정되어 있고,

마찬가지로 동일한 사설 서브넷의 Network Load Balancer의 Taget으로는 Application Load Balancer가 설정되어 있습니다.

여기에서는 ZIGI-VPC1이 특정 서비스에 대한 Provider이고,  ZIGI-VPC1에서 제공하는 서비스는 Web1,Web2 서비스라고 가정합니다.

이 서비스는 Private Link Service로 만들어서, 다른 AWS 사용자에게 제공됩니다.

ZIGI-VPC2는 ZIGI-VPC1이 제공하는 서비스를 사용하는 Consumer이고, ZIGI-VPC1에서 제공하는 Private Link Service를 이용합니다.

본 포스팅에서는 아래의 구성은 미리 되어 있다는 가정하고, 이후 구성과 테스트 내용만 설명합니다.    

 

▪ ZIGI-Int-NLB(Network Load Balancer)

       - Private Subnet에 Internal Network Load Balancer를 구성

       - TCP(80)에 대한 리스너는 ALB로 연결됨 (연결방식은 기존 포스팅 참고)

▪ ZIGI-ALB(Application Load Balancer)

       - Private Subnet에 Application Load Balancer를 생성

       - ALB에서는 사용자가 요청한 Path에 따라서,

             '/Web1/*' 에 대해서는 ZIGI-WEB1이 포함된 Target Group으로,

             '/WEB2/*'에 대해서는 ZIGI-WEB2가 포함된 Target Group으로 전달

▪ ZIGI-WEB1, ZIGI-WEB2, ZIGI-Consumer (EC2)

        - ZIGI-WEB1/2 : EC2에 각각 서로 다른 기본 웹 서비스를 올리고, 각각의 별도 Target Group에 연결

        - ZIGI-Consumer : 생성 후, 별다른 설정 없음.

 

 

Private Link Service를 만들기 전에

현재 설정된 내용 중, ZIGI-Int-NLB에 연결될 Target (ZIGI-ALB)과 NLB의 리스너 설정 값을 확인해 보겠습니다.

 

ZIGI-ALB(Application Load Balancer)를 Target으로 하는 Target Group입니다.

ZIGI-Int-NLB(Network Load Balancer)에서는 80에 대한 리스너가 방금 전에 확인한 ZIGI-ALB-TG1으로 되어 있는 것을 확인 할 수 있습니다.

ZIGI-INT-NLB를 Private Link로 제공하기 위해서 Private Link Service를 만듭니다.

로드밸런서 유형을 '네트워크'로 설정하고, 현재 구성되어 있는 ZIGI-Int-NLB를 선택합니다.

기타 별도의 추가 설정 없이 기본 값으로 바로 생성합니다.      

생성된 Private Link Service 입니다.

이제 생성된 Private Link Service를 이용해서 ZIGI-VPC2에서 사용할 수 있도록 Private Link를 만들어 봅니다.

Private Link Service 세부 정보 중에, '서비스 이름'을 복사합니다.

이 이름을 이용해서 Private Link를 만듭니다.      

Endpoint 메뉴에서, '이름별 서비스 찾기'를 선택하고

서비스 이름에 Private Link  Service에서 복사 해 둔, '서비스 이름'을 붙여놓고, '확인' 버튼을 누르면

정상적으로

  '서비스 이름을 찾았습니다'

라고 메시지가 뜨는 것을 확인할 수 있습니다.

아래에는 Private Link를 사용한 VPC인 ZIGI-VPC2를 선택하고, Private Link(ENI)가 만들어질 서브넷을 선택합니다.

Private Link를 만들고 나면, 현재 상태가 '대기 중' 인 것을 볼 수 있습니다.

생성되는 시점일 수 있지만, 여기에서는 Private Link Service에서 연결 수락을 하지 않았기 때문에

Private Link Service에서 수락이 필요합니다.

Private Link Service에서 방금 전에 만든 Private Link에 대한 연결을 수락해줍니다.

만약 이 과정 없이, 연결하자마자 사용하려면 Private Link Service 생성 시에 '수락 필수' 옵션을 비활성화 하시면 됩니다.   

이제 Private Link의 상태가 '사용 가능' 인 것을 확인 할 수 있습니다. 

Private Link의 세부 정보에서 Private Link를 호출하기 위한 DNS 이름을 확인합니다. 

이 DNS 이름으로 Private Link를 호출해 보겠습니다.

ZIGI-VPC2에 있는  ZIGI-Consumer(EC2)에서 Private Link DNS 이름으로 먼저 질의해봅니다.

ZIGI-VPC2 내의 IP가 응답하는 것을 확인 할 수 있습니다.

이제 이 DNS 이름으로 서비스를 호출합니다.

동일하게 80을 사용하지만, path를 WEB1과 WEB2로 나눠서 호출하면 각각 서로 다른 서버의 값을 응답하는 것을 볼 수 있습니다.