개요
NLB를 통한 EC2 접속을 위해 아래와 같이 구성된 인프라가 있다고 하자.
생성한 NLB는 외부 접속이 가능한 Internet-facing 체계이고, 가용 영역 an2-a, an2-b에 구성된 subnet을 활성화한 상태이다.
xnlb-test가 라우팅 하는 target group에 등록된 대상은 다음과 같다.
즉, NLB는 an2-a, an2-b를 활성화하고 있지만, 실제로 라우팅 하는 대상은 an2-b에만 구성되어 있는 상태이다.
이 상태에서 NLB에 할당된 IP를 AWS 콘솔에서 확인하면 다음과 같다. 활성화된 서브넷마다 1개의 IP가 할당되어 있다.
하지만 cmd 등에서 nslookup을 이용해 LB의 IP를 확인해보면 하나의 IP만 확인할 수 있다.
🤔 원인 추측
nslookup으로 확인한 IP는 target 인스턴스가 구성된 an2-b의 IP이다. 아무래도 LB에 여러 서브넷이 등록되어 있으면 자동으로 네트워크 인터페이스가 연결되어 LB의 IP 자체는 설정되지만, target group에 등록된 인스턴스가 단일 서브넷에 구성되어 있어서, 즉 실제로는 사용되지 않아 비활성화 상태인 게 아닌가 싶다.
단순 추측이므로 지적 대환영……! 입니다.
교차 영역 로드 밸런싱 (Cross-zone load balancing)
만약 구성 인프라 변경 없이 LB에 설정된 IP를 모두 확인해야 한다면 LB의 교차 영역 로드 밸런싱 기능을 활성화하면 된다.
로드 밸런서는 클라이언트의 요청을 등록된 target으로 분산시키는데, 교차 영역 로드 밸런싱 기능의 활성화/비활성화 여부에 따라 아래와 같이 동작한다.
교차 영역 로드 밸런싱 ON
등록된 모든 가용 영역의 target 간에 트래픽 분산. 즉, an2-a 쪽 LB IP로 연결해도 an2-b 쪽 target으로 연결될 수 있다.
교차 영역 로드 밸런싱 OFF
해당 가용 영역의 target에만 트래픽 분산. 즉, an2-a 쪽 LB IP로 연결하면 an2-a 쪽 target으로만 연결할 수 있다.
NLB는 기본적으로 교차 영역 로드 밸런싱 기능이 비활성화되어 있지만, 필요하다면 자유롭게 설정을 변경할 수 있다.
교차 영역 로드 밸런싱 활성화
활성화하는 방법은 단순하다.
1. 설정 변경할 LB의 속성 탭으로 이동
속성 탭에서 편집 버튼을 클릭한다.
2. LB 속성 편집 페이지에서 교차 영역 로드 밸런싱 활성화
스위치를 토글한 뒤 변경 내용을 저장한다.
다만 통신에 따른 비용이 발생할 수 있고, LB가 라우팅 하는 target group 자체에 교차 영역 로드 밸런싱 기능이 설정되어 있다면 target group의 설정을 우선시한다. 또한 실제로 target 인스턴스가 없는 subnet 쪽으로 라우팅이 되었다가 target 인스턴스 쪽으로 트래픽이 전달되기 때문에 접속에 지연이 발생할 수 있을 것 같다.
3. LB IP 확인
설정을 저장하고 LB의 IP를 다시 확인하면 an2-a subnet 쪽의 IP도 확인할 수 있다.
참고 문서
https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-cross-zone.html