Azure Load Balancer 아웃바운드 연결 문제 해결

Azure Load Balancer에서 아웃바운드 연결에 대한 문제 해결 지침을 알아봅니다. 여기에는 SNAT(원본 네트워크 주소 변환) 이해와 연결에 미치는 영향, VM에서 개별 공용 IP 사용, SNAT 포트 소모를 방지하기 위한 연결 효율성을 위한 애플리케이션 디자인이 포함됩니다. 고객이 경험하는 대부분의 아웃바운드 연결 문제는 SNAT 포트 소모 및 연결 시간 초과로 인해 패킷이 삭제되기 때문입니다.

SNAT 포트에 대한 자세한 내용은 아웃바운드 연결에 대한 Source Network Address Translation을 참조하세요.

SNAT 포트 사용 이해

메트릭, 경고 및 리소스 상태가 포함된 표준 부하 분산 장치 진단에 따라 기존 부하 분산 장치의 SNAT 포트 사용 및 할당을 모니터링합니다. 모니터링하여 SNAT 소모의 위험을 확인하거나 결정합니다. 아웃바운드 연결 동작을 이해하는 데 문제가 있는 경우 IP 스택 통계(netstat)를 사용하거나 패킷 캡처를 수집합니다. 이러한 패킷 캡처는 인스턴스의 게스트 OS에서 수행할 수도 있고 패킷 캡처용 Network Watcher를 사용할 수도 있습니다. 대부분의 시나리오에서 Azure는 NAT 게이트웨이를 아웃바운드 연결에 사용하여 SNAT 소모 위험을 줄이도록 권장합니다. 서비스에서 동일한 대상에 대해 반복적인 TCP 또는 UDP 아웃바운드 연결을 시작하는 경우 NAT 게이트웨이를 사용하는 것이 좋습니다.

아웃바운드 연결을 위해 Azure 배포 최적화

아웃바운드 연결을 위해 Azure 배포를 최적화해야 합니다. 최적화는 아웃바운드 연결 문제를 방지하거나 완화할 수 있습니다.

아웃바운드 인터넷 연결을 위한 NAT 게이트웨이 배포

Azure NAT Gateway는 아웃바운드 연결을 가상 네트워크에서 인터넷으로 제공하는 복원력과 확장성이 뛰어난 Azure 서비스입니다. SNAT 포트를 사용하는 NAT 게이트웨이의 고유한 방법은 일반적인 SNAT 소모 및 연결 문제를 해결하는 데 도움이 됩니다. Azure NAT Gateway에 대한 자세한 내용은 Azure NAT Gateway란?을 참조하세요.

  • NAT 게이트웨이에서 SNAT 포트 소모 위험을 줄이는 방법

    Azure Load Balancer는 백 엔드 풀의 각 가상 머신 인스턴스에 고정된 양의 SNAT 포트를 할당합니다. 이 할당 방법은 특히 고르지 않은 트래픽 패턴으로 인해 특정 가상 머신에서 더 많은 양의 나가는 연결을 보내는 경우 SNAT가 소모될 수 있습니다. 부하 분산 장치와 달리 NAT 게이트웨이는 SNAT 포트를 서브넷 내의 모든 VM 인스턴스에 동적으로 할당합니다.

    NAT 게이트웨이를 사용하면 서브넷의 모든 인스턴스에서 사용 가능한 SNAT 포트에 액세스할 수 있습니다. 이 동적 할당을 통해 VM 인스턴스는 새 연결에 사용할 수 있는 포트 풀에서 각각 필요한 수의 SNAT 포트를 사용할 수 있습니다. 동적 할당은 SNAT 소모의 위험을 줄입니다.

    Diagram of Azure Load Balancer vs. Azure NAT Gateway.

  • 포트 선택 및 다시 사용 동작

    NAT 게이트웨이는 사용 가능한 포트 풀에서 포트를 임의로 선택합니다. 사용 가능한 포트가 없는 경우 동일한 대상 공용 IP 및 포트에 대한 기존 연결이 있는 경우를 제외하고는 SNAT 포트가 다시 사용됩니다. NAT 게이트웨이의 이러한 포트 선택 및 다시 사용 동작으로 인해 연결 시간 제한이 발생할 가능성이 줄어듭니다.

    NAT 게이트웨이에서 SNAT 및 포트 사용이 작동하는 방식에 대한 자세한 내용은 SNAT 기본 사항을 참조하세요. NAT 게이트웨이를 아웃바운드 연결에 사용할 수 없는 몇 가지 조건이 있습니다. NAT 게이트웨이 제한 사항에 대한 자세한 내용은 NAT Gateway 제한 사항을 참조하세요.

    NAT 게이트웨이를 아웃바운드 연결에 사용할 수 없는 경우 이 문서에서 설명하는 다른 마이그레이션 옵션을 참조하세요.

VM당 SNAT 포트 수를 최대화하도록 부하 분산 장치 아웃바운드 규칙 구성

퍼블릭 표준 부하 분산 장치를 사용하고 SNAT 소모 또는 연결 실패가 발생하는 경우 수동 포트 할당과 함께 아웃바운드 규칙을 사용하고 있는지 확인합니다. 그렇지 않은 경우 부하 분산 장치의 기본 아웃바운드 액세스를 사용할 수 있습니다. 기본 아웃바운드 액세스는 백 엔드 풀의 인스턴스 수를 기반으로 하는 보수적인 포트 수를 자동으로 할당합니다. 기본 아웃바운드 액세스는 아웃바운드 연결을 사용하도록 설정하는 데 권장되는 방법이 아닙니다. 백 엔드 풀의 크기가 조정되면 포트를 다시 할당해야 하는 경우 연결에 영향을 줄 수 있습니다.

기본 아웃바운드 액세스 및 기본 포트 할당에 대한 자세한 내용은 아웃바운드 연결에 대한 Source Network Address Translation을 참조하세요.

VM당 사용 가능한 SNAT 포트 수를 늘리려면 부하 분산 장치에서 수동 포트 할당을 사용하여 아웃바운드 규칙을 구성합니다. 예를 들어 최대 10개의 VM이 백 엔드 풀에 있음을 알고 있는 경우 VM당 기본 1,024개가 아닌 최대 6,400개의 SNAT 포트를 할당할 수 있습니다. 더 많은 SNAT 포트가 필요한 경우 아웃바운드 연결에 대한 여러 프런트 엔드 IP 주소를 추가하여 사용 가능한 SNAT 포트 수를 늘릴 수 있습니다. 프런트 엔드 IP 주소를 더 추가하기 전에 SNAT 포트가 소모되는 이유를 이해해야 합니다.

자세한 지침은 이 문서의 뒷부분에 있는 연결을 효율적으로 사용하도록 애플리케이션 설계를 참조하세요. 아웃바운드 연결에 대한 IP 주소를 더 추가하려면 각각의 새 IP에 대한 프런트 엔드 IP 구성을 만듭니다. 아웃바운드 규칙이 구성되면 백 엔드 풀에 대한 여러 프런트 엔드 IP 구성을 선택할 수 있습니다. 서로 다른 IP 주소를 인바운드 및 아웃바운드 연결에 사용하는 것이 좋습니다. 서로 다른 IP 주소는 향상된 모니터링 및 문제 해결을 위해 트래픽을 격리합니다.

VM에서 개별 공용 IP 구성

소규모 배포의 경우 공용 IP를 VM에 할당하는 것이 좋습니다. 공용 IP가 VM에 할당되면 공용 IP에서 제공하는 모든 포트를 VM에서 사용할 수 있습니다. 부하 분산 장치 또는 NAT 게이트웨이와 달리 포트는 IP 주소와 연결된 단일 VM에만 액세스할 수 있습니다.

개별 공용 IP 주소를 할당하는 것은 확장성 있는 솔루션이 아니므로 NAT 게이트웨이를 대신 활용하는 것이 좋습니다.

참고 항목

Azure Virtual Network를 Azure Storage, Azure SQL, Azure Cosmos DB 또는 기타 사용 가능한 Azure 서비스와 같은 Azure PaaS 서비스에 연결해야 하는 경우 Azure Private Link를 사용하여 SNAT를 완전히 방지할 수 있습니다. Azure Private Link는 인터넷 대신 Azure 백본 네트워크를 통해 트래픽을 가상 네트워크에서 Azure 서비스로 보냅니다.

Private Link는 Azure 호스팅 서비스에 대한 프라이빗 액세스를 위해 서비스 엔드포인트를 대신하여 권장되는 옵션입니다. Private Link와 서비스 엔드포인트의 차이점에 대한 자세한 내용은 프라이빗 엔드포인트와 서비스 엔드포인트 비교를 참조하세요.

연결 효율적인 애플리케이션 디자인

애플리케이션을 설계할 때 연결을 효율적으로 사용하는지 확인합니다. 연결 효율성은 배포된 애플리케이션에서 SNAT 포트 소모를 줄이거나 제거할 수 있습니다.

연결을 다시 사용하도록 애플리케이션 수정

각 요청에 대해 개별적인 원자성 TCP 연결을 생성하는 대신 연결을 다시 사용하도록 애플리케이션을 구성하는 것이 좋습니다. 연결 다시 사용은 TCP 트랜잭션의 성능을 높이고, 연결 다시 사용이 기본값인 HTTP/1.1과 같은 프로토콜과 특히 관련이 있습니다. 이 다시 사용은 REST와 같이 HTTP를 전송으로 사용하는 다른 프로토콜에 적용됩니다.

연결 풀링을 사용하도록 애플리케이션 수정

요청이 고정된 연결 집합에 내부적으로 분산되고 가능한 경우 다시 사용되는 연결 풀링 체계를 애플리케이션에 사용합니다. 이 체계는 사용 중인 SNAT 포트의 수를 제한하고 더 예측 가능한 환경을 만듭니다.

이 체계는 단일 연결에서 작업 회신을 차단할 때 여러 동시 작업을 허용하여 요청 처리량을 늘릴 수 있습니다.

연결 풀링은 애플리케이션을 개발하는 데 사용하는 프레임워크 또는 애플리케이션에 대한 구성 설정에 이미 존재할 수 있습니다. 연결 풀링을 연결 재사용과 결합할 수 있습니다. 그러면 여러 요청이 동일한 대상 IP 주소 및 포트에 고정되고 예측 가능한 수의 포트를 사용합니다.

요청은 TCP 트랜잭션을 효율적으로 활용하여 대기 시간과 리소스 사용률을 줄입니다. UDP 트랜잭션도 활용할 수 있습니다. UDP 흐름의 수를 관리하면 소모 조건을 방지하고 SNAT 포트 사용률을 관리할 수 있습니다.

덜 적극적인 재시도 논리를 사용하도록 애플리케이션 수정

SNAT 포트가 소모되거나 애플리케이션 오류가 발생하면 지연 및 백오프 논리 없는 공격적 또는 무차별 암호 대입 다시 시도로 인해 소모가 발생하거나 지속됩니다. SNAT 포트에 대한 수요는 덜 공격적인 다시 시도 논리를 사용하여 줄일 수 있습니다.

구성된 유휴 시간 제한에 따라 다시 시도가 너무 공격적인 경우 연결에서 SNAT 포트를 닫고 해제하여 다시 사용하기 위한 시간이 충분하지 않을 수 있습니다.

Keepalive를 사용하여 아웃바운드 유휴 시간 초과 재설정

부하 분산 장치 아웃바운드 규칙에는 기본적으로 최대 100분까지 조정할 수 있는 4분의 유휴 시간 제한이 있습니다. TCP keepalive를 사용하여 유휴 흐름을 새로 고치고 필요한 경우 이 유휴 시간 제한을 다시 설정할 수 있습니다. TCP keepalive를 사용하는 경우 연결의 한쪽에서 사용하도록 설정하는 것으로 충분합니다.

예를 들어 흐름의 유휴 타이머를 다시 설정하기 위해 서버 쪽에서만 사용하도록 설정하는 것으로 충분하며, 양쪽에서 TCP keepalive를 시작할 필요는 없습니다. 데이터베이스 클라이언트 서버 구성을 포함하여 애플리케이션 계층에 대한 유사한 개념이 있습니다. 서버 쪽에서 사용 가능한 애플리케이션 관련 Keepalive 옵션을 확인합니다.

다음 단계

SNAT 포트 소모, 아웃바운드 연결 옵션 및 기본 아웃바운드 액세스에 대한 자세한 내용은 다음을 참조하세요.