본문 바로가기

Cloud/AWS

AWS Network Load Balancer에서 Application Load Balancer 연결

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


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

기존에 NLB에서 ALB로 직접 Target을 지정할 수 없어서, 중간에 NLB와 ALB 중간에 추가 서비스를 넣어서 구성해야 했으나, 이제 직접 NLB에서 ALB로 직접 연결이 가능해짐에 따라서,NLB에서만 지원하던 고정 IP서비스와 Private Link 구성을 Application Loadbalancer를 통해서도 사용할 수 있습니다.

이번 포스팅은 그 중에 고정 IP를 이용한 시나리오에 대한 테스트 내용을 정리해 보았습니다.


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

VPC 내에는 공인 서브넷에 NLB를 두고,

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

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

 

고정 IP를 갖고 있는 NLB를 통해서 사용자는 접근을 하게 되면, 실제 사용자가 접근하는 웹서버는 ALB를 통해서 연결됩니다.

사용자는 고정된 IP로 접근 할 수 있으며, 서비스 앞단에는 ALB를 두어서 ALB에서만 제공 가능한 기능을 적용 할 수 있게 됩니다.

여기에서는 사용자가 접근하는 Path에 따라서 ZIGI-Web1 혹은 ZIGI-Web2로 가도록 구성된 테스트를 진행합니다.

 

 

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

 

▪ ZIGI-NLB(Network Load Balancer)

      - Public Subnet에 Network Load Balancer를 구성

      - TCP(80)에 대한 리스너를 아래에서 생성 예정

▪ 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 (EC2)

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

   

 

이제 Network Load Balancer에 Applicatin Load Balancer 연결을 위해서

Application Load Balancer를 Target으로 하는 Target Group부터 만들겠습니다. 

 

Target Group을 만들려고 보면, 아래와 같이 Target Type에 Application Load Balancer이 생긴 것을 볼 수 있습니다.

Application Load Balancer로 Target Type을 지정하고,

Target Group Name과 Protocol, Port와 VPC를 지정합니다.

이 때, Protocol은 'TCP' 고정됩니다.

 

하단의 Health Checks는 기본 값으로 두고, 'Next'를 눌러서 다음 설정을 진행합니다.

 

 

Target Group의 Target을 등록합니다.

현재 생성되어 있는 Application Load Balancer를 선택하거나,

'create Application Load Balancer'를 클릭해서 새로운 ALB를 생성하여 등록할 수 있습니다.

아니면, Target은 나중에 추가하도록  'Add an Application Load Balancer later'를 선택하셔도 됩니다.

여기에서는 앞서 만들어 두었던, ZIGI-ALB를 선택합니다.

 

정상적으로 ZIGI-ALB를 Target으로 하는 Target Group이 만들어진 것을 볼 수 있습니다.

 

 

 

이제 ZIGI-NLB에서 방금 전에 만든 ZIGI-ALB Target Group을 리스너로 추가합니다.

TCP 80에 대해서, ZIGI-ALB-TG1로 가도록 전달 대상을 설정합니다.

 

 

 

ZIGI-NLB의 Target group인 ZIGI-ALB-TG1의 상태 값을 다시 확인해 보면,

Details에 ZIGI-NLB에 연결되어 있음을 확인할 수 있고,

등록된(Registered) target 정보를 보면 ZIGI-ALB라는 이름을 가진 Application Load Balancer이 등록되어,

현재 Health status가 healthy로 정상적으로 활성화 상태인 것을 볼 수 있습니다.

 

 

 

구성을 모두 마치고 나면 다음과 같이 ALB와 NLB를 확인할 수 있습니다.

 

Application Load Balancer가 internal 용으로 구성되어 활성화 상태인 것을 볼 수 있습니다.

 

ALB의 Listeners에는 HTTP:80이 정상적으로 등록되어 있습니다. 

※ 참고로, ZIGI-ALB의 HTTP:80 에는 다음과 같이 설정이 되어 있습니다.

 

NLB는 Internet-facing으로 등록되어, 활성화 상태인 것을 볼 수 있습니다.

현재 NLB의 접속 주소는 'ZIGI-NLB-~~C7e2.elb.ap-northeast2.amazonaws.com'으로 되어 있습니다.   

 

 

 

  NLB의 Listeners는 ZIGI-ALB라는 Applicatin Load Balancer를 Target을 가진 ZIGI-ALB-TG1로 전달됩니다.

 

이제  NLB의 접속 주소인 'ZIGI-NLB-~~C7e2.elb.ap-northeast2.amazonaws.com' 으로 접속 테스트를 합니다.

접속 시에 '/Web1'과 '/Web2' 라는 Path를 이용해서 접속을 하면

아래와 같이, 서로 다른 웹 서비스가 하나의 NLB URL을 통해서 서비스 됨을 볼 수 있습니다.

 

  • 눈럽 2021.10.06 09:57

    NLB -> EC2시엔 보안그룹설정이 없어 EC2에 직접 80을 열어줬어야 했던것 같은데 NLB -> ALB -> EC2의 경우엔 보안그룹이 어떻게 설정되어야 하나요?? 기존과 동일하게 EC2에 80이 퍼블릭하게 오픈되어야 하나요?