이 개요 페이지에서는 영역별 및 전역 네트워크 구성 모두에 대해 Google Distributed Cloud (GDC) 에어 갭에서 내부 및 외부 부하 분산기를 구성하는 방법을 설명합니다.
GDC의 부하 분산은 백엔드 워크로드 전반에서 효율적인 트래픽 분산을 보장하여 애플리케이션 가용성과 성능을 향상시킵니다. 트래픽을 분산하는 데 사용되는 알고리즘은 Maglev입니다. 자세한 내용은 부하 분산 알고리즘을 참조하세요.
이 페이지는 플랫폼 관리자 그룹 내의 네트워크 관리자 또는 애플리케이션 운영자 그룹 내의 개발자를 대상으로 하며, 이들은 조직의 네트워크 트래픽을 관리할 책임이 있습니다. 자세한 내용은 GDC 에어 갭 문서의 대상 그룹을 참조하세요.
부하 분산 아키텍처
GDC는 애플리케이션이 서로에게 서비스를 노출할 수 있도록 하는 부하 분산기를 제공합니다. 부하 분산기는 백엔드 워크로드 집합에서 트래픽을 분산하는 안정적인 가상 IP (VIP) 주소를 할당합니다. GDC의 부하 분산기는 레이어 4 (L4) 부하 분산을 실행합니다. 즉, 구성된 프런트엔드 TCP 또는 UDP 포트 집합을 상응하는 백엔드 포트에 매핑합니다. 부하 분산기는 프로젝트 수준에서 구성됩니다.
부하 분산기는 다음 워크로드 유형에 대해 구성됩니다.
- VM에서 실행되는 워크로드
- Kubernetes 클러스터 내부의 컨테이너화된 워크로드
GDC에서 부하 분산기를 구성하는 방법에는 세 가지가 있습니다.
- 네트워킹 Kubernetes 리소스 모델 (KRM) API를 사용합니다. 이 API를 사용하여 전역 또는 영역별 부하 분산기를 만들 수 있습니다.
- gdcloud CLI를 사용합니다. 이 API를 사용하여 전역 또는 영역별 부하 분산기를 만들 수 있습니다.
- Kubernetes 클러스터에서 직접 Kubernetes 서비스를 사용합니다. 이 메서드는 영역별 부하 분산기만 만듭니다.
부하 분산기 구성요소
KRM API 또는 gdcloud CLI를 사용하여 부하 분산기를 구성할 때는 L4 패스 스루 부하 분산기를 사용합니다.
- L4는 프로토콜이 TCP 또는 UDP임을 의미합니다.
- 패스 스루는 워크로드와 클라이언트 사이에 프록시가 없음을 의미합니다.
부하 분산기는 다음과 같은 구성 가능한 구성요소로 구성됩니다.
전달 규칙: 전달되는 트래픽과 전달되는 백엔드 서비스를 지정합니다. 전달 규칙의 사양은 다음과 같습니다.
- 클라이언트가 액세스할 수 있는 세 개의 튜플(CIDR, 포트, 프로토콜)로 구성됩니다.
- TCP 및 UDP 프로토콜을 지원합니다.
- 내부 및 외부 전달 규칙을 제공합니다. 클라이언트는 Virtual Private Cloud (VPC) 내에서 내부 전달 규칙에 액세스할 수 있습니다. 클라이언트는 GDC 플랫폼 외부 또는
EgressNAT값이 정의된 워크로드에서 내부 전달 규칙에 액세스할 수 있습니다. - 전달 규칙은 백엔드 서비스에 연결됩니다. 여러 전달 규칙이 동일한 백엔드 서비스를 가리키도록 할 수 있습니다.
백엔드 서비스: 전달 규칙, 상태 확인, 백엔드를 함께 연결하는 부하 분산 허브입니다. 백엔드 서비스는 부하 분산기가 트래픽을 전달하는 워크로드를 식별하는 백엔드 객체를 참조합니다. 단일 백엔드 서비스가 참조할 수 있는 백엔드에는 다음과 같은 제한사항이 있습니다.
- 영역당 하나의 영역별 백엔드 리소스
- 클러스터당 하나의 클러스터 백엔드 리소스 프로젝트 백엔드와 혼합할 수 없습니다.
백엔드: 생성된 백엔드 서비스의 백엔드 역할을 하는 엔드포인트를 지정하는 영역별 객체입니다. 백엔드 리소스는 영역으로 범위가 지정되어야 합니다. 라벨을 사용하여 엔드포인트를 선택합니다. 선택기의 범위를 프로젝트 또는 클러스터로 지정합니다.
프로젝트 백엔드는
ClusterName필드가 지정되지 않은 백엔드입니다. 이 경우 지정된 라벨은 영역의 특정 VPC에 있는 특정 프로젝트의 모든 워크로드에 적용됩니다. 라벨은 여러 클러스터의 VM 및 포드 워크로드에 적용됩니다. 백엔드 서비스가 프로젝트 백엔드를 사용하는 경우 해당 백엔드 서비스에서 해당 영역의 다른 백엔드를 참조할 수 없습니다.클러스터 백엔드는
ClusterName필드가 지정된 백엔드입니다. 이 경우 지정된 라벨은 지정된 프로젝트의 이름이 지정된 클러스터에 있는 모든 워크로드에 적용됩니다. 단일 백엔드 서비스에서 클러스터당 영역당 최대 하나의 백엔드를 지정할 수 있습니다.
상태 확인: 백엔드의 지정된 워크로드 엔드포인트가 정상인지 여부를 확인하는 프로브를 지정합니다. 비정상 엔드포인트는 다시 정상이 될 때까지 부하 분산기에서 제외됩니다. 상태 확인은 VM 워크로드에만 적용됩니다. 포드 워크로드는 기본 제공 Kubernetes 프로브 메커니즘을 사용하여 특정 엔드포인트가 정상인지 확인할 수 있습니다. 자세한 내용은 상태 확인을 참조하세요.
Kubernetes 사용자 클러스터에서 직접 Kubernetes 서비스를 사용하는 경우 이전에 나열된 구성요소 대신 Service 객체를 사용합니다. Service 객체가 생성된 클러스터의 워크로드만 타겟팅할 수 있습니다.
외부 및 내부 부하 분산
GDC 애플리케이션은 다음과 같은 네트워킹 서비스 유형에 액세스할 수 있습니다.
- 내부 부하 분산기 (ILB): 조직 내 다른 클러스터에 서비스를 노출할 수 있습니다.
- 외부 부하 분산기 (ELB): 외부 워크로드에서 라우팅 가능한 범위에서 가상 IP (VIP) 주소를 할당하고 GDC 인스턴스 내부 또는 외부의 다른 조직과 같은 GDC 조직 외부의 서비스를 노출합니다. ELB에 세션 어피니티를 사용하여 클라이언트의 요청이 일관되게 동일한 백엔드로 라우팅되도록 합니다.
전역 및 영역별 부하 분산기
전역 또는 영역별 부하 분산기를 만들 수 있습니다. 전역 부하 분산기의 범위는 GDC 유니버스 전체에 걸쳐 있습니다. 각 GDC 유니버스는 상호 연결되고 컨트롤 플레인을 공유하는 리전으로 구성된 여러 GDC 영역으로 구성될 수 있습니다. 예를 들어 각각 3개의 영역이 있는 2개의 리전으로 구성된 유니버스는 us-virginia1-a, us-virginia1-b, us-virginia1-c 및 eu-ams1-a, eu-ams1-b, eu-ams1-c와 같이 표시될 수 있습니다.
영역별 부하 분산기의 범위는 생성 시 지정된 영역으로 제한됩니다. 각 영역은 독립적인 재해 도메인입니다. 영역은 로컬 컨트롤 플레인을 사용하는 인프라, 서비스, API, 도구를 관리합니다.
GDC 유니버스의 전역 및 영역별 리소스에 대한 자세한 내용은 멀티 영역 개요를 참조하세요.
다음 방법을 사용하여 전역 부하 분산기를 만들 수 있습니다.
- 네트워킹 Kubernetes 리소스 모델 (KRM)
API를 사용합니다. API 버전
networking.global.gdc.goog를 사용하여 전역 리소스를 만듭니다. - gdcloud CLI를 사용합니다.
gdcloud CLI 명령어를 사용하여 전역 범위를 지정할 때는
--global플래그를 사용합니다.
다음 방법을 사용하여 영역별 부하 분산기를 만들 수 있습니다.
- 네트워킹 Kubernetes 리소스 모델 (KRM)
API를 사용합니다. API 버전
networking.gdc.goog를 사용하여 영역별 리소스를 만듭니다. - gdcloud CLI를 사용합니다.
gdcloud CLI 명령어를 사용하여 부하 분산기를 만들 영역을 지정할 때는
--zone플래그를 사용합니다. - Kubernetes 클러스터에서 직접 Kubernetes
Service를 사용합니다.
서비스 가상 IP 주소
ILB는 조직 내부에서만 사용할 수 있는 VIP 주소를 할당합니다. 이러한 VIP 주소는 조직 외부에서 연결할 수 없으므로 조직 내 다른 애플리케이션에 서비스를 노출하는 데만 사용할 수 있습니다. 이러한 IP 주소는 동일한 인스턴스의 조직 간에 겹칠 수 있습니다.
반면 ELB는 조직 외부에서 외부적으로 연결할 수 있는 VIP 주소를 할당합니다. 따라서 ELB VIP 주소는 모든 조직에서 고유해야 합니다. 일반적으로 조직에서 사용할 수 있는 ELB VIP 주소는 더 적습니다.
부하 분산 알고리즘
Google Cloud 부하 분산기는 일관된 해싱 알고리즘인 Maglev를 사용하여 수신 트래픽을 백엔드 대상으로 분산합니다. 이 알고리즘은 고성능과 복원력을 위해 설계되었으며, 백엔드에서 데이터 지역성을 극대화하면서 트래픽이 균등하고 예측 가능하게 분산되도록 합니다.
Maglev 작동 방식: 해싱 메커니즘
Maglev는 각 수신 패킷의 속성을 해싱하여 전달 결정을 내립니다. 이렇게 하면 데이터 지역성을 극대화하기 위해 지정된 연결의 모든 패킷이 일관되게 동일한 백엔드로 전송됩니다.
- 해싱 입력 (5튜플): 알고리즘은 패킷 헤더의 표준 5튜플을 사용하여 해시를 생성합니다. 이 튜플은 다음으로 구성됩니다.
- 소스 IP 주소
- 소스 포트
- 대상 IP 주소
- 대상 포트
- 프로토콜 (예: TCP, UDP)
- 전달 결정: 이 해시의 결과는 연결을 부하 분산 풀의 정상 백엔드 중 하나에 결정적으로 매핑합니다. 해당 연결의 수명 동안 모든 패킷은 동일한 백엔드로 전달됩니다.
- 분산을 위한 엔트로피: 튜플의 5가지 요소를 모두 사용하여 Maglev는 사용 가능한 모든 백엔드에 서로 다른 연결이 균등하게 분산되도록 충분한 엔트로피를 생성합니다.
백엔드 상태 및 오류 처리
Maglev는 사용 가능한 백엔드 집합이 변경될 때 복원력을 갖도록 설계되었으며 중단을 최소화합니다.
- 백엔드 오류: 백엔드가 상태 확인에 실패하면 사용 가능한 대상 목록에서 삭제됩니다. 이전에 실패한 백엔드로 라우팅된 연결이 종료됩니다. 새 연결은 해싱 알고리즘에 따라 나머지 정상 백엔드 간에 자동으로 재분산됩니다. 중요한 점은 다른 정상 백엔드에 대한 연결은 영향을 받거나 다시 라우팅되지 않는다는 것입니다.
- 백엔드 복구: 비정상 백엔드가 다시 정상이 되어 풀에 다시 추가되면 해시의 일관된 특성으로 인해 이 백엔드가 중단을 최소화하면서 풀에 추가되고 LB는 새로 정상화된 백엔드를 사용하여 부하를 재분산합니다. 이 '최소 중단' 접근 방식은 모든 기존 연결의 대규모 재배치를 방지합니다. 재배치가 발생하면 애플리케이션 캐시 또는 상태가 압도될 수 있습니다.
멀티 영역 배포의 동작
Maglev는 토폴로지를 인식하지 못한다 는 점을 이해하는 것이 중요합니다. 백엔드의 실제 위치 또는 네트워크 경로를 고려하지 않고 해시의 수학적 결과를 기반으로 트래픽을 분산합니다.
- 위치와 관계없이 균등 분산: Maglev는 풀의 모든 백엔드를 동일한 대상으로 취급합니다. 여러 영역에 백엔드가 분산되어 있는 경우 트래픽은 모든 백엔드 간에 균등하게 분산됩니다. 알고리즘은 '로컬' 영역의 백엔드를 선호하거나 영역 간의 네트워크 지연 시간을 고려하지 않습니다.
- 멀티 영역 상호 연결 용량 보장:백엔드는 여러 영역에 걸쳐 있을 수 있으므로 네트워크 관리자는 멀티 영역 상호 연결에 부하 분산기 노드와 백엔드 간의 영역 간 트래픽을 처리할 수 있는 충분한 네트워크 용량이 있는지 확인해야 합니다.
제한사항
BackendService리소스는 포드 워크로드의HealthCheck리소스로 구성해서는 안 됩니다.BackendService사양의HealthCheckName은 선택사항이며 포드로 부하 분산기를 구성할 때는 생략해야 합니다.부하 분산기 구성은 포드와 VM이 포함된 혼합 워크로드를 타겟팅할 수 없습니다. 따라서 하나의
BackendService리소스에 포드와 VM이 포함된 혼합 백엔드는 허용되지 않습니다.ForwardingRuleExternal,ForwardingRuleInternal,BackendService,HealthCheck와 같은 전역 부하 분산기 커스텀 리소스의 이름은 이러한 영역별 부하 분산기 커스텀 리소스와 동일해서는 안 됩니다.조직은 상주하는 영역당 최대 500개의 전달 규칙을 정의할 수 있습니다. 전역 전달 규칙은 모든 영역의 이 한도에 포함됩니다.
표준 클러스터의 제한사항
표준 클러스터의 부하 분산에는 다음과 같은 제한사항이 적용됩니다.
단일 클러스터 범위
단일 클러스터 범위:
Service type=LoadBalancer리소스를 사용하여 표준 클러스터에 프로비저닝된 부하 분산기 (ILB 또는 ELB)는 해당 단일 표준 클러스터 내에만 있는 포드인 백엔드 엔드포인트를 타겟팅해야 합니다. 여러 표준 클러스터 또는 표준 클러스터와 공유 클러스터의 혼합에 걸쳐 실행되는 포드에 트래픽을 분산하려는 단일 부하 분산기 정의는 지원되지 않습니다.표준 클러스터에서는 gdcloud CLI 및 네트워킹 Kubernetes 리소스 모델 API가 지원되지 않습니다.
type=LoadBalancer및 연결된 주석이 있는 표준 KubernetesService리소스를 사용하여 표준 클러스터의 부하 분산을 관리합니다.프로젝트 범위 부하 분산기는 표준 클러스터를 무시합니다. gdcloud CLI 명령어 또는 네트워킹 Kubernetes 리소스 모델 API를 사용하여 프로젝트 범위 부하 분산기 구성을 만들면 프로젝트의 표준 클러스터가 무시됩니다.
전역 부하 분산은 지원되지 않습니다. 표준 클러스터에 프로비저닝된 ILB 및 ELB 리소스는 단일 영역으로 범위가 지정된 영역별 리소스입니다. 전역 부하 분산은 표준 클러스터 부하 분산기에서 지원되지 않습니다.
영역 간 ILB 연결은 지원되지 않습니다. 표준 클러스터 포드에서 다른 영역의 전역 ILB 또는 영역별 ILB로의 연결은 지원되지 않습니다.