외부 패스 스루 네트워크 부하 분산기는 리전별 레이어 4 부하 분산기입니다. 외부 패스 스루 네트워크 부하 분산기는 Virtual Private Cloud(VPC) 네트워크에서 동일한 리전에 있는 백엔드 가상 머신(VM) 인스턴스 간에 TCP 및 UDP 트래픽을 분산합니다. 외부 패스 스루 네트워크 부하 분산기는 다음 중 하나에서 트래픽을 수신할 수 있습니다.
- 인터넷의 모든 클라이언트
- 외부 IP가 있는 Google Cloud VM
- Cloud NAT 또는 인스턴스 기반 NAT를 통해 인터넷에 액세스할 수 있는 Google Cloud VM
전달 규칙 구성에 따라 각 대상 풀 기반 부하 분산기가 다음 유형의 프로토콜 트래픽 중 하나를 지원합니다.
- TCP
- UDP
- TCP 및 UDP
부하 분산기 범위는 전역이 아닌 리전입니다. 즉, 외부 패스 스루 네트워크 부하 분산기의 모든 백엔드 인스턴스가 같은 리전에 있어야 합니다. 리전의 모든 영역에 백엔드를 배치할 수 있습니다.
외부 패스 스루 네트워크 부하 분산기는 모든 포트를 지원합니다. 외부 패스 스루 네트워크 부하 분산기를 사용하여 TCP 또는 UDP 트래픽의 부하를 분산할 수 있습니다. 부하 분산기는 패스스루 부하 분산기이므로 백엔드는 부하 분산된 TCP 연결 또는 UDP 패킷 자체를 종료합니다. 예를 들어 백엔드에서 HTTPS 웹 서버를 실행하고 외부 패스 스루 네트워크 부하 분산기를 사용하여 요청을 라우팅하고 백엔드 자체에서 TLS를 종료할 수 있습니다.
GKE에서 애플리케이션을 빌드할 때는 GKE 사용자를 대신해서 Google Cloud 부하 분산기를 배포하는 기본 제공되는 GKE 서비스 컨트롤러를 사용하는 것이 좋습니다. 수명 주기가 GKE에 의해 완전히 자동화되고 제어된다는 점을 제외하면 이 독립형 부하 분산 아키텍처와 동일합니다. 자세한 내용은 서비스를 사용하여 앱 노출을 참조하세요.
아키텍처
부하 분산기는 여러 가지 구성요소로 이루어집니다. 하나의 부하 분산기에는 다음이 포함될 수 있습니다.
외부 패스 스루 네트워크 부하 분산기에는 항상 하나의 대상 풀이 있습니다. 여러 전달 규칙이 대상 풀을 참조할 수 있습니다.
대상 풀은 부하 분산기의 백엔드입니다. 트래픽이 부하 분산되는 백엔드 인스턴스를 지정합니다. 각 전달 규칙은 부하 분산기의 프런트엔드입니다. 프로젝트당 전달 규칙 및 대상 풀 수에는 제한이 있습니다.
외부 패스 스루 네트워크 부하 분산기는 주소, 포트, 프로토콜 유형과 같은 수신 IP 프로토콜 데이터를 기준으로 부하를 시스템에 분산합니다.
외부 패스 스루 네트워크 부하 분산기는 패스스루 부하 분산기이므로 백엔드는 원래 클라이언트 요청을 수신합니다. 외부 패스스루 네트워크 부하 분산기는 전송 계층 보안(TLS) 오프로드 또는 프록시를 수행하지 않습니다. 트래픽은 VM으로 직접 라우팅됩니다.
부하 분산기의 전달 규칙을 만들면 임시 가상 IP 주소(VIP)를 수신하거나 리전 네트워크 블록에서 VIP를 예약합니다.
그런 다음 이 전달 규칙을 대상 풀과 연결합니다. Google의 전역 접속 지점에서 VIP가 애니캐스트되지만 백엔드는 리전 기준입니다. 부하 분산기에는 여러 리전에 걸쳐 있는 백엔드가 있을 수 없습니다.
Google Cloud 방화벽을 사용하여 백엔드 VM에 대한 액세스를 제어하거나 필터링할 수 있습니다.
외부 패스 스루 네트워크 부하 분산기는 패킷 전달 방법을 결정하기 위해 소스 및 대상 포트, IP 주소, 프로토콜을 검사합니다. TCP 트래픽의 경우 세션 어피니티를 구성하여 부하 분산기의 전달 동작을 수정할 수 있습니다. 외부 패스 스루 네트워크 부하 분산기는 패킷을 대상 풀에 있는 인스턴스의 첫 번째 네트워크 인터페이스(nic0
)로 전달합니다.
부하 분산기는 수신 패킷의 소스 IP 주소를 유지합니다. 수신 패킷의 대상 IP 주소는 부하 분산기 전달 규칙과 연결된 리전의 외부 IP 주소입니다.
부하 분산 알고리즘
기본적으로 트래픽을 인스턴스에 배포하려면 세션 어피니티 값을 NONE
으로 설정합니다. Cloud Load Balancing은 소스 IP와 포트, 대상 IP와 포트, 프로토콜의 해시를 기준으로 인스턴스를 선택합니다. 즉, 수신 TCP 연결이 여러 인스턴스에 분산되며 각각의 새 연결은 다른 인스턴스로 전달될 수 있습니다. 연결의 모든 패킷은 연결이 닫힐 때까지 동일한 인스턴스로 전달됩니다. 설정된 연결은 부하 분산 프로세스에서 고려되지 않습니다.
한 연결의 모든 패킷은 세션 어피니티 설정에 관계없이 연결이 닫힐 때까지 선택된 인스턴스로 전달됩니다. 기존 연결은 새 수신 연결의 부하 분산 결정에 영향을 주지 않습니다. 따라서 수명이 긴 TCP 연결을 사용하면 백엔드 간에 불균형이 발생할 수 있습니다.
한 클라이언트에서 수신되는 여러 연결을 동일한 인스턴스에 전달해야 하는 경우 다른 세션 어피니티 설정을 선택할 수 있습니다.
대상 풀
대상 풀 리소스는 전달 규칙에서 들어오는 트래픽을 수신할 인스턴스 그룹을 정의합니다. 전달 규칙이 트래픽을 대상 풀에 연결하면 Cloud Load Balancing은 소스 IP와 포트 및 대상 IP와 포트의 해시를 기준으로 이러한 대상 풀에서 인스턴스를 선택합니다. 각 대상 풀은 단일 리전에서 작동하며 백엔드 인스턴스의 첫 번째 네트워크 인터페이스(nic0
)로 트래픽을 분산합니다. 여러 인스턴스에 트래픽이 분산되는 방식에 대한 자세한 내용은 부하 분산 알고리즘 섹션을 참조하세요.
외부 패스 스루 네트워크 부하 분산기는 프록시가 아닙니다. 백엔드 VM의 응답은 부하 분산기를 통하지 않고 클라이언트에 직접 전달됩니다. 부하 분산기는 패킷의 소스 IP 주소를 유지합니다. 수신 패킷의 대상 IP 주소는 부하 분산기의 전달 규칙과 연결된 리전의 외부 IP 주소입니다. 따라서 다음을 실행해야 합니다.
외부 패스 스루 네트워크 부하 분산기에 백엔드 VM으로 참여하는 인스턴스는 적절한 Linux 게스트 환경, Windows 게스트 환경 또는 기타 동일한 기능을 제공하는 프로세스를 실행해야 합니다.
게스트 OS 환경 또는 이와 동등한 프로세스는 각 백엔드 VM에서 로컬 경로를 구성합니다. 이러한 경로를 통해 VM은 부하 분산기 전달 규칙의 IP 주소와 일치하는 대상을 가진 패킷을 수락할 수 있습니다.
부하 분산 트래픽을 허용하는 백엔드 인스턴스에서 소프트웨어가 부하 분산기의 전달 규칙과 연결된 IP 주소(또는 임의의 IP 주소
0.0.0.0/0
)에 결합되도록 구성해야 합니다.
외부 패스 스루 네트워크 부하 분산기는 백엔드 사용률에 따라 대상 풀의 인스턴스 그룹에서 사용자가 자동 확장을 수행할 수 있게 해주는 Compute Engine 자동 확장 처리를 지원합니다. 자세한 내용은 CPU 사용률을 기준으로 확장을 참조하세요.
대상 풀에 단일 가상 머신 인스턴스가 포함되도록 하려면 대신 프로토콜 전달 기능을 사용하는 것이 좋습니다.
대상 풀은 TCP 및 UDP 트래픽을 처리하는 전달 규칙에만 사용될 수 있습니다. 다른 모든 프로토콜의 경우 대상 인스턴스를 만들어야 합니다. 전달 규칙에 사용하려면 먼저 대상 풀을 만들어야 합니다. 각 프로젝트에는 최대 50개의 대상 풀이 있을 수 있습니다.
전달 규칙
전달 규칙은 대상 풀 및 대상 인스턴스와 함께 작동하여 부하 분산을 지원합니다. 부하 분산을 사용하려면 특정 대상 풀에 트래픽을 전달하는 전달 규칙을 만들어야 합니다. 전달 규칙 없이는 트래픽의 부하를 분산할 수 없습니다.
각 전달 규칙은 특정 IP 주소, 프로토콜, 포트 범위(선택사항)를 단일 대상 풀과 일치시킵니다. 트래픽이 전달 규칙에 의해 제공되는 외부 IP 주소로 전송되면 전달 규칙이 해당 트래픽을 해당 대상 풀로 전달합니다.
Google Cloud VPC 네트워크에 도착하기 전에 조각화될 가능성이 있는 UDP 패킷의 부하를 분산하는 경우 부하 분산 및 조각화된 UDP 패킷을 참조하세요.
대상 풀 기반 외부 패스 스루 네트워크 부하 분산기는 각 전달 규칙에 대해 TCP
또는 UDP
프로토콜을 지원합니다. 부하 분산기가 모든 IP 프로토콜 트래픽을 전달하도록 하려면 백엔드 서비스 기반 외부 패스 스루 네트워크 부하 분산기를 사용해야 합니다.
여러 전달 규칙
동일한 외부 패스 스루 네트워크 부하 분산기에 여러 리전 외부 전달 규칙을 구성할 수 있습니다. 선택에 따라 각 전달 규칙마다 각기 다른 리전 외부 IP 주소가 있을 수 있으며 여러 전달 규칙이 동일한 리전 외부 IP 주소를 가질 수 있습니다.
여러 리전 외부 전달 규칙을 구성하면 다음과 같은 경우에 유용합니다.
- 동일한 대상 풀에 외부 IP 주소를 두 개 이상 구성해야 하는 경우
- 동일한 대상 풀에 동일한 외부 IP 주소를 사용하여 다른 포트 범위나 프로토콜을 구성해야 하는 경우.
여러 전달 규칙을 사용할 경우 백엔드 VM에서 실행 중인 소프트웨어가 모든 필수 IP 주소에 결합되도록 구성해야 합니다. 이는 부하 분산기를 통해 전달된 패킷의 대상 IP 주소가 해당 리전 외부 전달 규칙과 연결된 리전 외부 IP 주소이기 때문에 필요합니다.
상태 확인
Compute Engine에서는 상태 확인을 통해 수신 가능한 인스턴스에만 새 연결을 전달합니다. Compute Engine에서는 지정된 빈도로 각 인스턴스에 상태 확인 요청을 전송합니다. 인스턴스가 허용된 상태 확인 실패 횟수를 초과하면 더 이상 새 트래픽을 수신할 수 있는 인스턴스로 간주되지 않습니다.
TCP 연결의 단계적 종료와 종료를 허용하기 위해 기존 연결이 즉시 종료되지는 않습니다. 하지만 비정상적인 백엔드에 대한 기존 연결은 오랫동안 활성 상태로 유지되지 않을 수 있습니다. 가능하면 비정상 백엔드에서 최대한 빨리 단계적 종료 프로세스를 시작해야 합니다.
상태 확인기에서는 계속 비정상적인 인스턴스를 쿼리하고 지정된 수 만큼 확인이 성공하면 풀에 인스턴스를 반환합니다. 모든 인스턴스가 UNHEALTHY
로 표시된 경우 부하 분산기는 새 트래픽을 모든 기존 인스턴스에 전달합니다.
외부 패스 스루 네트워크 부하 분산기는 기존 HTTP 상태 점검을 통해 인스턴스 상태를 확인합니다. 서비스가 HTTP를 사용하지 않더라도 상태 확인 시스템이 쿼리할 수 있는 각 인스턴스에서 기본 웹 서버를 실행해야 합니다.
기존 HTTPS 상태 확인은 외부 패스 스루 네트워크 부하 분산기에서 지원되지 않으며 대부분의 다른 부하 분산기 유형과 함께 사용할 수 없습니다.
방화벽 규칙
외부 패스 스루 네트워크 부하 분산기의 상태 점검은 이러한 IP 범위에서 전송됩니다. 이 범위에서 트래픽을 허용하는 인그레스 허용 방화벽 규칙을 만들어야 합니다.
외부 패스 스루 네트워크 부하 분산기는 패스 스루 부하 분산기입니다. 즉, 방화벽 규칙에서 클라이언트 소스 IP 주소의 트래픽을 허용해야 합니다. 서비스가 인터넷에 공개되어 있으면 모든 IP 범위의 트래픽을 허용하는 것이 가장 쉽습니다. 특정 소스 IP 주소만 허용하도록 액세스를 제한하려면 이러한 제한이 적용되도록 방화벽 규칙을 설정하면 됩니다. 하지만 상태 확인 IP 범위의 액세스를 허용해야 합니다.
방화벽 규칙의 예시와 구성 예시는 외부 패스 스루 네트워크 부하 분산기의 방화벽 규칙을 참조하세요.
요청 및 반환 패킷의 IP 주소
백엔드 VM이 클라이언트에서 부하 분산된 패킷을 수신하면 패킷의 소스 및 대상은 다음과 같습니다.
- 소스: Google Cloud VM과 연결된 외부 IP 주소 또는 부하 분산기에 연결하는 시스템의 인터넷 라우팅이 가능한 IP 주소입니다.
- 대상: 부하 분산기의 전달 규칙의 IP 주소입니다.
부하 분산기는 프록시가 아닌 패스스루 부하 분산기이므로 패킷은 부하 분산기 전달 규칙의 대상 IP 주소를 갖습니다. 백엔드 VM에서 실행되는 소프트웨어는 다음을 수행하도록 구성되어야 합니다.
- 부하 분산기의 전달 규칙 IP 주소 또는 모든 IP 주소(
0.0.0.0
또는::
)에 리슨(결합) - 부하 분산기 전달 규칙의 프로토콜이 포트를 지원하는 경우: 부하 분산기의 전달 규칙에 포함된 포트를 리슨(결합)
반환 패킷은 부하 분산기의 백엔드 VM에서 클라이언트로 직접 전송됩니다. 반환 패킷의 소스 및 대상 IP 주소는 프로토콜에 따라 달라집니다.
- TCP는 연결 지향적이므로 클라이언트가 적절한 TCP 연결로 응답 패킷을 연결할 수 있도록 백엔드 VM은 소스 IP 주소가 전달 규칙의 IP 주소와 일치하는 패킷으로 응답해야 합니다.
- UDP는 연결 지향적이 아니므로 백엔드 VM은 소스 IP 주소가 전달 규칙의 IP 주소와 일치하거나 VM에 할당된 IP 주소와 일치하는 응답 패킷을 보낼 수 있습니다. 사실상 대부분의 클라이언트는 패킷을 전송한 IP 주소와 동일한 IP주소에서 응답을 받아야 합니다.
다음 표에는 응답 패킷에 대한 소스 및 대상이 요약되어 있습니다.
트래픽 유형 | 소스 | 대상 |
---|---|---|
TCP | 부하 분산기의 전달 규칙에 해당하는 IP 주소 | 요청 패킷의 소스 |
UDP | 대부분의 사용 사례에서는 부하 분산기 전달 규칙의 IP 주소 † | 요청 패킷의 소스 |
† VM에 외부 IP 주소가 있거나 Cloud NAT를 사용할 때 응답 패킷의 소스 IP 주소를 VM NIC의 기본 내부 IPv4 주소로 설정할 수도 있습니다. Google Cloud 또는 Cloud NAT는 응답 패킷을 클라이언트의 외부 IP 주소로 전송하기 위해 응답 패킷의 소스 IP 주소를 NIC의 외부 IPv4 주소 또는 Cloud NAT 외부 IPv4 주소로 변경합니다. 전달 규칙의 IP 주소를 소스로 사용하지 않는 경우는 클라이언트가 요청 패킷을 전송한 IP 주소와 일치하지 않는 외부 IP 주소로부터 응답 패킷을 받으므로 고차원적 시나리오에 해당합니다.
특수 라우팅 경로
Google Cloud는 상태 확인을 위해 VPC 네트워크에 정의되지 않은 특수 경로를 사용합니다. 자세한 내용은 상태 점검 경로를 참조하세요.
공유 VPC 아키텍처
다음 표에는 외부 패스 스루 네트워크 부하 분산기의 공유 VPC 구성요소가 요약되어 있습니다.
IP 주소 | 전달 규칙 | 백엔드 구성요소 |
---|---|---|
지역 외부 IP 주소는 부하 분산 중인 인스턴스와 동일한 프로젝트에서 정의되어야 합니다. | 지역 외부 전달 규칙은 대상 풀의 인스턴스와 동일한 프로젝트(서비스 프로젝트)에서 정의되어야 합니다. | 대상 풀은 대상 풀의 인스턴스가 있는 동일한 프로젝트 및 동일한 영역에서 정의되어야 합니다. 대상 풀과 관련된 상태 검사도 동일한 프로젝트에서 정의되어야 합니다. |
트래픽 분산
대상 풀 기반 외부 패스 스루 네트워크 부하 분산기가 새 연결을 분산하는 방식은 세션 어피니티의 구성 방식에 따라 다릅니다.
세션 어피니티
세션 어피니티는 클라이언트에서 부하 분산기의 백엔드 VM으로 새 연결을 분산하는 데 사용되는 해싱 방법을 제어합니다. 대상 풀 기반 부하 분산기는 sessionAffinity
매개변수를 사용하여 세션 어피니티를 구성합니다.
자세한 내용은 대상 풀 사용을 참조하세요.
부하 분산 및 조각화된 UDP 패킷
UDP 패킷을 부하 분산하는 경우 다음 사항에 유의하세요.
- 조각화되지 않은 패킷은 모든 구성에서 정상적으로 처리됩니다.
- UDP 패킷은 Google Cloud에 도달하기 전에 조각화될 수 있습니다. 그러면 개입 네트워크에서는 모든 조각이 도달할 때까지 기다린 후에 전달하므로 지연이 발생하거나 조각이 삭제될 수 있습니다. Google Cloud에서는 모든 조각을 기다리지 않으며 각 조각이 도착하자마자 전달합니다.
후속 UDP 조각에는 대상 포트가 포함되지 않으므로 다음 상황에서 문제가 발생할 수 있기 때문입니다.
- 대상 풀 세션 어피니티가
NONE
(5튜플 어피니티)으로 설정된 경우 부하 분산기가 5튜플 해시를 계산할 수 없으므로 후속 조각이 삭제될 수 있습니다. - 동일한 부하 분산 IP 주소에 UDP 전달 규칙이 두 개 이상 있는 경우 후속 조각이 잘못된 전달 규칙으로 도달할 수 있습니다.
- 대상 풀 세션 어피니티가
조각화된 UDP 패킷이 수신될 것으로 예상되면 다음을 수행합니다.
- 세션 어피니티를
NONE
,CLIENT_IP_PROTO
또는CLIENT_IP
로 설정합니다.- 세션 어피니티를
NONE
으로 설정하면 어피니티를 유지할 필요가 없습니다. 따라서 부하 분산기는 5튜플 해시를 사용하여 조각화되지 않은 패킷의 백엔드를 선택하고 조각화된 패킷에는 3튜플 해시를 사용합니다. - 세션 어피니티를
CLIENT_IP_PROTO
또는CLIENT_IP
로 설정하면 소스 및 대상 포트가 해싱에 사용되지 않으므로 조각화되거나 조각화되지 않은 패킷 모두에 대해 동일한 해시가 계산됩니다.
- 세션 어피니티를
- 부하 분산된 IP 주소당 UDP 전달 규칙을 하나만 사용합니다. 이렇게 하면 모든 조각이 동일한 전달 규칙에 의해 도달합니다.
이러한 설정을 사용하면 동일한 패킷의 UDP 조각이 같은 인스턴스에 전달되어 리어셈블리됩니다.
대상 인스턴스를 백엔드로 사용
외부 패스 스루 네트워크 부하 분산기의 백엔드로 대상 인스턴스를 사용 중이며 조각화된 UDP 패킷이 필요한 경우에는, 부하 분산된 IP 주소당 UDP 전달 규칙을 하나만 사용하고 모든 포트 0~65535에서 트래픽을 허용하도록 전달 규칙을 구성하세요. 이렇게 하면 대상 포트가 동일하지 않은 경우에도 모든 프래그먼트가 동일한 전달 규칙으로 이동합니다.
제한사항
- Google Cloud 콘솔을 사용하여 대상 풀 기반 외부 패스 스루 네트워크 부하 분산기를 만들 수 없습니다. 대신 gcloud 또는 REST API를 사용하세요.
- 외부 패스 스루 네트워크 부하 분산기는 VPC 네트워크 피어링을 지원하지 않습니다.
다음 단계
- Google Cloud Armor는 외부 패스 스루 네트워크 부하 분산기에 고급 네트워크 DDoS 보호를 지원합니다. 자세한 내용은 고급 네트워크 DDoS 보호 구성을 참조하세요.
- 외부 패스 스루 네트워크 부하 분산기를 구성하고 Apache 인스턴스 집합에 트래픽을 분산하려면 대상 풀을 사용하여 외부 패스 스루 네트워크 부하 분산기 설정을 참조하세요.
- 대상 풀 대신 리전별 백엔드 서비스에서 외부 패스 스루 네트워크 부하 분산기가 작동하는 방식을 알아보려면 다음을 참조하세요.