Today Keys : Network, load balancer, balancing, cross-zone, crosszone, 교차영역, 가용영역, dns, 도메인, query
이번 포스팅은 AWS Network Load Balancer에서 가용 영역 내에 위치한 Target의 상태(healthy 혹은 unhealthy)와 Cross-zone load balancing 옵션에 따라서, NLB의 DNS 이름에 대한 질의와 응답이 어떻게 달라지는지 확인해보는 내용입니다.
오늘 포스팅에서 다루게 된 기본 구성입니다.
Internet facing 상태의 Network Load Balancer가 있고, 2개의 가용 영역에 매핑이 된 상태입니다.
각 가용 영역에는 1개씩의 Target(웹서버)이 존재합니다.
Network Load Balancer(이하 'NLB'로 표기)를 생성할 때,
네트워크 매핑(Network mapping) 설정에서 해당 NLB가 속하는 VPC를 선택합니다.
VPC 선택과 함께 NLB에 대한 유입 지점이 되는 1개 이상의 가용 영역을 지정합니다.
※ 참고로, NLB는 1개의 단일 가용 영역으로도 구성이 가능하지만, 2개 이상의 가용 영역을 선택하여 이중화 구성을 하는 것을 권고합니다. Application Load Balancer는 최소 2개 이상의 서브넷을 사용해야 하기 때문에 가용 영역에 대한 이중화 구성이 필수입니다.
가용 영역을 선택하면 해당 가용 영역 내의 서브넷을 1개를 지정하는 데 이 서브넷에 NLB에 대한 '네트워크 인터페이스(eni)'가 생성됩니다. NLB의 DNS 이름에 대한 응답을 하는 IP 주소가 바로 이 네트워크 인터페이스의 IP 주소입니다.
NLB에 대한 도메인으로 질의(Query)를 수행하면, 다음과 같이 NLB를 만들 때 생성된 네트워크 인터페이스(eni)의 IP 주소 값이 응답하는 것을 확인 할 수 있습니다.
실제 사용자의 Flow를 보면 다음과 같이, 사용자가 DNS에 NLB에 대한 도메인 질의를 하여 받은 응답 값으로 서비스 요청하고 응답을 받게 됩니다.
그럼 이제 가용 영역 별 NLB Target 상태(healthy, unhealthy)에 따라서, NLB의 DNS 이름에 대한 질의 결과가 어떻게 달라지는지 확인해 보겠습니다.
먼저 NLB가 매핑된 모든 가용 영역에 healthy한 Target이 존재하는 정상적인 경우의 앞서 알아본 것처럼 모든 가용 영역의 NLB 네트워크 인터페이스의 주소 값을 응답합니다.
그럼 특정 가용 영역의 모든 Target이 unhealthy인 경우에는 어떻게 될까요?
NLB의 속성 값에 따라 NLB의 DNS 이름에 대한 질의 결과가 달라집니다.
NLB의 속성 중에 Cross-zone load balancing 이라는 것이 있습니다.
NLB에서 교차 영역(NLB의 네트워크 인터페이스의 가용 영역과 Target이 서로 다른 가용 영역인 경우)에 대한 라우팅을 지원하는 옵션입니다.
ALB에서는 교차 영역에 대한 라우팅이 기본적으로 활성화이지만(비활성화 불가), NLB에서는 기본 값이 비활성화입니다.
따라서, NLB가 구성된 기본 상태에서는 교차 영역에 대한 Target으로는 라우팅은 불가합니다.
하나의 가용 영역의 모든 Target이 unhealthy인 경우에
Cross-zone load balancing 속성이 비활성화 상태에서는 NLB의 DNS 이름에 대한 질의를 해보면 다음과 같이 해당 가용 영역의 NLB 네트워크 인터페이스에 대한 IP 주소에 대한 값을 응답에 포함하지 않는 것을 볼 수 있습니다.
실제 사용자의 Flow를 보면 다음과 같이, DNS에서 사용 가능한 Target이 존재하지 않는 NLB 네트워크 인터페이스에 대해서는 응답하지 않기 때문에, 서비스가 가능한 NLB 네트워크 인터페이스로 서비스를 요청하고 응답을 받게 됩니다.
하지만, Cross-zone load balancing 속성이 활성화 상태에서는 에 NLB의 DNS 이름에 대한 질의를 해보면 다음과 같이 해당 가용 영역의 NLB 네트워크 인터페이스에 대한 IP 주소를 포함하여 응답을 포함하지 않는 것을 볼 수 있습니다. 비록 NLB 네트워크 인터페이스가 있는 가용 영역에는 사용 가능한 Target이 없지만, 다른 가용 영역으로 라우팅이 가능하여, 정상적인 서비스를 제공 할 수 있기 때문입니다.
실제 사용자의 Flow를 보면 다음과 같이, DNS에서 사용 가능한 Target이 존재하지 않는 NLB 네트워크 인터페이스에 대해서도 같이 응답 받고, 어느 NLB 네트워크 인터페이스로 서비스를 요청하더라도 정상적인 Target을 통해서 응답을 받을 수 있습니다.
실제 사용자가 응답 받은 서비스를 보면, 어느 NLB 네트워크 인터페이스로 요청을 하더라도 정상 Target의 값만 응답 받는 것을 볼 수 있습니다.
그럼 만약에 NLB의 모든 Target이 unhealthy인 경우에는 어떻게 응답을 할까요?
NLB의 모든 네트워크 인터페이스에 대한 값을 응답을 하지만, 당연하게도 아래와 같이 서비스는 되지 않습니다.
실제 사용자의 Flow를 정리하면 아래와 같습니다.
이상, NLB에서 가용 영역 별로 Healthy한 상태의 Target이 존재 하는지, NLB의 Cross-zone load balancing 옵션 활성화에 따라서 NLB의 DNS 이름 질의에 대한 응답 및 서비스 처리에 대해서 확인했습니다. NLB에서 Cross-zone load balancing 옵션을 활성화 하는 것이 좋을까요? NLB에서는 가용 영역 간의 트래픽에 대한 비용이 발생하기 때문에 서비스 특성에 따라서 이러한 트래픽 비용에 대한 부분도 고려해야 합니다.