Envoy 기반 부하 분산기용 프록시 전용 서브넷

이 페이지에서는 Envoy 기반 부하 분산기에서 사용하는 프록시 전용 서브넷의 작동 방식을 설명합니다. 프록시 전용 서브넷에서는 Google Cloud 부하 분산기에서 사용하는 Envoy 프록시 전용으로 예약된 IP 주소 풀을 제공합니다. 다른 용도로 사용할 수 없습니다.

프록시는 들어오는 연결을 종료한 후 URL 맵, 백엔드 서비스의 세션 어피니티, 각 백엔드 인스턴스 그룹이나 NEG의 분산 모드, 기타 요인을 기반으로 이동하는 각 요청의 위치를 평가합니다.

  1. 클라이언트는 부하 분산기 전달 규칙의 IP 주소와 포트에 연결됩니다.

  2. 각 프록시는 해당 부하 분산기의 전달 규칙에서 지정한 IP 주소와 포트를 리슨합니다. 프록시 중 하나에서 클라이언트의 네트워크 연결을 수신하고 종료합니다.

  3. 프록시는 부하 분산기의 URL 맵과 백엔드 서비스에서 지정한 대로 NEG의 적절한 백엔드 VM 또는 엔드포인트에 대한 연결을 설정합니다.

각 부하 분산기의 프록시에는 내부 IP 주소가 할당됩니다. 프록시에서 백엔드 VM 또는 엔드포인트로 전송되는 패킷에는 프록시 전용 서브넷의 소스 IP 주소가 있습니다.

프록시 전용 서브넷을 어떠한 다른 용도로 사용할 수 없습니다. 부하 분산기 전달 규칙의 IP 주소는 프록시 전용 서브넷에서 시작되지 않습니다. 백엔드 VM과 엔드포인트의 IP 주소도 프록시 전용 서브넷에서 시작되지 않습니다.

지원되는 부하 분산기

다음 Envoy 기반 부하 분산기를 사용하려면 프록시 전용 서브넷이 필요합니다.

프록시 전용 서브넷이 부하 분산기 아키텍처에 통합되는 방식

다음은 리전별 내부 애플리케이션 부하 분산기에 필요한 Google Cloud 리소스를 보여주는 다이어그램입니다.

리전 내부 애플리케이션 부하 분산기의 번호가 매겨진 구성요소
리전별 내부 애플리케이션 부하 분산기 번호가 매겨진 구성요소(확대하려면 클릭)

다이어그램에서 볼 수 있듯이 Envoy 기반 부하 분산기를 배포하려면 서브넷이 최소 두 개 이상 필요합니다.

  • 부하 분산기의 백엔드 VM 및 백엔드 엔드포인트는 기본 IP 주소 범위가 `10.1.2.0/24(이 예시의 경우)인 단일 서브넷을 사용합니다. 이 서브넷은 프록시 전용 서브넷이 아닙니다. 서브넷이 부하 분산기와 동일한 리전에 있다면 백엔드 VM 및 엔드포인트에 여러 개의 서브넷을 사용할 수 있습니다. 내부 애플리케이션 부하 분산기의 경우 전달 규칙과 연결된 부하 분산기의 IP 주소도 이 서브넷에 있을 수 있지만 반드시 그럴 필요는 없습니다.
  • 프록시 전용 서브넷은 10.129.0.0/23입니다(이 예시의 경우).

프록시 전용 서브넷 크기 권장사항

프록시 전용 서브넷에서 IP 주소를 64개 이상 제공해야 합니다. 이는 /26 이하의 프리픽스 길이에 해당합니다. /23 프리픽스(512 프록시 전용 주소)가 있는 프록시 전용 서브넷으로 시작하고 트래픽 변경이 필요할 때 크기를 변경하는 것이 좋습니다.

프록시는 부하 분산기 수준이 아닌 VPC 수준에서 할당됩니다. Envoy 기반 부하 분산기를 사용하는 VPC 네트워크의 리전마다 프록시 전용 서브넷 하나를 만들어야 합니다. 같은 리전과 같은 VPC 네트워크에 부하 분산기 여러 개를 배포하면 배포된 부하 분산기에서 동일한 부하 분산용 프록시 전용 서브넷을 공유합니다.

Envoy 기반 부하 분산기는 트래픽 요구사항에 따라 트래픽을 처리하는 데 사용할 수 있는 프록시 수를 자동으로 확장합니다. 프록시 인스턴스 요금은 트래픽 요구사항을 충족하는 데 필요한 프록시 인스턴스 수를 기준으로 청구됩니다. 각 추가 프록시는 가격표에 기재된 가격에 따라 추가 시간당 요금이 발생합니다.

부하 분산기에 할당된 프록시 수는 10분 동안 트래픽을 처리하는 데 필요하다고 측정된 용량을 기준으로 계산됩니다. 이 기간 동안 다음 항목 중 더 큰 항목을 살펴봅니다.

  • 트래픽 대역폭 요구사항을 처리하는 데 필요한 프록시 수. 각 프록시 인스턴스에서 초당 최대 18MB를 처리할 수 있습니다. 필요한 총 대역폭을 모니터링하고 총 대역폭을 프록시 인스턴스에서 지원할 수 있는 대역폭으로 나눕니다.
  • 연결 및 요청을 처리하는 데 필요한 프록시 수. 다음 각 리소스의 합계를 계산하고 각 값을 프록시 인스턴스에서 처리할 수 있는 항목으로 나눕니다.
    • 초당 600개(HTTP) 또는 150개(HTTPS)의 새 연결
    • 3,000개의 활성 연결
    • 초당 요청 1,400개*

*Cloud Logging이 중지된 경우 프록시 인스턴스는 요청을 초당 1,400개 처리할 수 있습니다. Logging을 사용 설정하면 프록시 인스턴스에서 처리할 수 있는 초당 요청 수가 줄어듭니다. 예를 들어 모든 요청을 로깅하면 프록시의 요청 처리 용량이 초당 요청 700개로 감소합니다. 더 적은 비율의 트래픽을 샘플링하도록 Logging을 설정할 수 있습니다. 이를 통해 비용을 제어하면서 관측 가능성 요구사항을 충족할 수 있습니다.

프록시 전용 서브넷의 요금 청구 방법에 대한 자세한 예시는 Cloud Load Balancing 가격 책정 문서의 프록시 인스턴스 요금을 참조하세요.

프록시 전용 서브넷 만들기

네트워크가 자동 모드 또는 커스텀 모드인지 여부에 관계없이 Envoy 기반 부하 분산기의 프록시 전용 서브넷을 만들어야 합니다. 프록시 전용 서브넷 생성은 일부 플래그 추가를 제외하고 서브넷 만들기 절차와 기본적으로 동일합니다.

프록시 전용 서브넷의 경우 부하 분산기에 따라 --purposeREGIONAL_MANAGED_PROXY 또는 GLOBAL_MANAGED_PROXY로 설정해야 합니다.

기존 서브넷을 프록시 전용 서브넷으로 다시 사용할 수 없으므로 Envoy 기반 부하 분산기가 있는 리전마다 새 서브넷을 만들어야 합니다. 이는 subnets update 명령어가 서브넷의 --purpose 필드 수정을 허용하지 않기 때문입니다.

리전별 부하 분산기의 전달 규칙을 만들기 전에 부하 분산기의 프록시에서 사용할 프록시 전용 서브넷을 만들어야 합니다. 먼저 리전에 프록시 전용 서브넷을 만들지 않고 부하 분산기를 구성하려고 하면 부하 분산기 생성 프로세스가 실패합니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
    VPC 네트워크 페이지로 이동
  2. 프록시 전용 서브넷을 추가할 공유 VPC 네트워크의 이름을 클릭합니다.
  3. 서브넷 추가를 클릭합니다.
  4. 이름을 입력합니다.
  5. 리전을 선택합니다.
  6. 용도를 다음 중 하나로 설정합니다.
    • 리전 부하 분산기: 리전별 관리형 프록시
    • 리전 간 부하 분산기: 리전 간 관리형 프록시
    • IP 주소 범위를 입력합니다.
    • 추가를 클릭합니다.

gcloud

gcloud compute networks subnets create 명령어는 프록시 전용 서브넷을 만듭니다.

gcloud compute networks subnets create SUBNET_NAME \
    --purpose=SUBNET_PURPOSE \
    --role=ACTIVE \
    --region=REGION \
    --network=VPC_NETWORK_NAME \
    --range=CIDR_RANGE

필드는 다음과 같이 정의됩니다.

  • SUBNET_NAME은 프록시 전용 서브넷의 이름입니다.
  • SUBNET_PURPOSE는 서브넷의 용도입니다. 부하 분산기에 따라이를 REGIONAL_MANAGED_PROXY 또는 GLOBAL_MANAGED_PROXY로 설정합니다.
  • REGION은 프록시 전용 서브넷의 리전입니다.
  • VPC_NETWORK_NAME은 서브넷이 포함된 VPC 네트워크의 이름입니다.
  • CIDR_RANGE - 서브넷의 기본 IP 주소 범위입니다. 리전의 프록시에서 64개 이상의 IP 주소를 사용할 수 있도록 26 이하의 서브넷 마스크를 사용해야 합니다. 권장 서브넷 마스크 길이는 /23입니다.

전체 구성 예시는 프록시 전용 서브넷 구성을 참조하세요.

백엔드가 프록시 전용 서브넷의 연결을 수락하도록 방화벽 규칙을 구성해야 합니다. 방화벽 규칙 설정을 포함한 전체 구성 예시는 다음을 참조하세요.

프록시 가용성

Google Cloud 리전에 새로운 부하 분산기의 프록시 용량이 부족한 경우도 있습니다. 이 경우 부하 분산기를 생성할 때 Google Cloud 콘솔에서 프록시 가용성 경고 메시지를 제공합니다. 이 문제를 해결하려면 다음 중 하나를 수행하면 됩니다.

  • 부하 분산기에 다른 리전을 선택합니다. 다른 리전에 백엔드가 있으면 이 방법이 편리합니다.
  • 프록시 전용 서브넷이 이미 할당된 VPC 네트워크를 사용합니다.
  • 용량 문제가 해결될 때까지 기다립니다.

프록시 전용 서브넷의 크기 또는 주소 범위 변경

부하 분산기에서 처리하는 트래픽 양이 늘어나면 더 많은 Envoy 프록시 수를 부하 분산기에 할당할 수 있도록 프록시 전용 서브넷 크기를 늘려야 할 수 있습니다.

기본 주소 범위에 하는 것과 동일한 방법으로(expand-ip-range 명령어 사용) 프록시 전용 서브넷을 확장할 수 없습니다. 대신 요구사항을 충족하는 백업 프록시 전용 서브넷을 만든 후 활성 역할로 승격해야 합니다. 리전 및 VPC 네트워크별로 프록시 전용 서브넷 하나만 활성화할 수 있고 서브넷의 기본 IP 범위를 확장만 할 수 있기 때문입니다.

프록시 전용 서브넷을 백업에서 활성으로 전환해도 새 연결이 중단되지 않습니다.

  • 새로 활성화된 프록시 전용 서브넷은 새 연결에 사용됩니다.
  • 이전의 활성(현재는 백업) 프록시 전용 서브넷은 더 이상 새 연결에 사용되지 않습니다.
  • Google Cloud는 이전의 활성(현재는 백업) 프록시 전용 서브넷의 프록시에서 기존 연결을 드레이닝하기 시작합니다.

VPC 네트워크의 각 리전별로 한 개의 활성 프록시 전용 서브넷과 한 개의 백업 프록시 전용 서브넷을 만들 수 있습니다.

콘솔

  1. 동일한 리전에 백업 프록시 전용 서브넷을 만들고 요구사항에 맞는 기본 IP 주소 범위를 지정합니다.

    1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
      VPC 네트워크 페이지로 이동
    2. 프록시 전용 서브넷을 추가할 공유 VPC 네트워크의 이름을 클릭합니다.
    3. 서브넷 추가를 클릭합니다.
    4. 이름을 입력합니다.
    5. 리전을 선택합니다.
    6. 용도를 다음 중 하나로 설정합니다.
      • 리전 부하 분산기: 리전별 관리형 프록시
      • 리전 간 부하 분산기: 리전 간 관리형 프록시
      • 역할백업을 선택합니다.
      • IP 주소 범위를 입력합니다.
      • 추가를 클릭합니다.
  2. 백업 프록시 전용 서브넷의 기본 IP 주소 범위를 포함하도록 백엔드 VM 또는 엔드포인트에 적용되는 인그레스 허용 방화벽 규칙을 만들거나 수정합니다.

  3. 백업 프록시 전용 서브넷을 활성 역할로 승격합니다. 또한 이 작업은 이전의 활성 프록시 전용 서브넷을 백업 역할로 강등합니다.

    1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
      VPC 네트워크 페이지로 이동
    2. 수정하려는 공유 VPC 네트워크의 이름을 클릭합니다.
    3. 부하 분산을 위해 예약된 프록시 전용 서브넷에서 이전 단계에서 만든 백업 서브넷을 찾습니다.
    4. 활성화를 클릭합니다.
    5. 드레이닝 제한 시간(선택사항)을 지정합니다.
    6. 서브넷 활성화를 클릭합니다.
  4. 연결 드레이닝 제한 시간 초과 후 또는 백엔드 VM 또는 엔드포인트에 대한 연결이 이전의 활성(현재는 백업) 프록시 전용 서브넷의 프록시에서 시작되지 않았다고 확신하는 경우 다음을 수행할 수 있습니다.

    • 백엔드 VM 또는 엔드포인트에 적용되는 인그레스 허용 방화벽 규칙을 수정하여 이전의 활성(현재는 백업) 프록시 전용 서브넷의 기본 IP 주소 범위가 포함되지 않도록 합니다.
    • 이전의 활성(현재는 백업) 프록시 전용 서브넷을 삭제하여 기본 IP 주소 범위에 사용된 서브넷의 IP 주소를 해제합니다.

gcloud

다음 단계에서는 기존 활성 프록시 전용 서브넷이 이미 있다고 가정합니다.

  1. gcloud compute networks subnets create 명령어와 --role=BACKUP 플래그를 사용하여 동일한 리전에 백업 프록시 전용 서브넷을 만들고 필요에 맞는 기본 IP 주소 범위를 지정합니다.

    gcloud compute networks subnets create BACKUP_PROXY_ONLY_SUBNET_NAME \
       --purpose=SUBNET_PURPOSE \
       --role=BACKUP \
       --region=REGION \
       --network=VPC_NETWORK_NAME \
       --range=BACKUP_PROXY_ONLY_SUBNET_RANGE
    

    다음을 바꿉니다.

    • BACKUP_PROXY_ONLY_SUBNET_NAME: 새로 생성된 백업 프록시 전용 서브넷의 이름입니다.
    • SUBNET_PURPOSE: 새로 생성된 백업 프록시 전용 서브넷의 용도입니다.
    • REGION: 새로 생성된 백업 프록시 전용 서브넷의 리전입니다. 현재 활성 프록시 전용 서브넷과 동일한 리전이어야 합니다.
    • REGION: 새로 생성된 백업 프록시 전용 서브넷의 네트워크입니다. 현재 활성 프록시 전용 서브넷과 동일한 네트워크여야 합니다.
    • BACKUP_PROXY_ONLY_SUBNET_RANGE: 새로 생성된 백업 프록시 전용 서브넷의 CIDR 범위입니다.
  2. 백업 프록시 전용 서브넷의 기본 IP 주소 범위를 포함하도록 백엔드 VM 또는 엔드포인트에 적용되는 인그레스 허용 방화벽 규칙을 만들거나 수정합니다. 방화벽 규칙이 이미 활성 서브넷에서 들어오는 연결을 수락해야 합니다.

    gcloud compute firewall-rules update PROXY_ONLY_SUBNET_FIREWALL_RULE \
      --source-ranges ACTIVE_PROXY_ONLY_SUBNET_RANGE,BACKUP_PROXY_ONLY_SUBNET_RANGE
    

    다음을 바꿉니다.

    • PROXY_ONLY_SUBNET_FIREWALL_RULE: 프록시 전용 서브넷의 트래픽이 백엔드 인스턴스 또는 엔드포인트에 도달하도록 허용하는 방화벽 규칙의 이름
    • ACTIVE_PROXY_ONLY_SUBNET_RANGE: 현재 활성 프록시 전용 서브넷의 CIDR 범위
  3. 새 서브넷을 업데이트하여 리전의 ACTIVE 프록시 전용 서브넷으로 설정하고 이전 서브넷이 드레이닝될 때까지 기다립니다. 또한 이 작업은 이전의 활성 프록시 전용 서브넷을 백업 역할로 강등합니다.

    IP 주소 범위를 즉시 드레이닝하려면 --drain-timeout0s로 설정합니다. 그러면 드레이닝 중인 서브넷에서 할당된 주소가 있는 프록시에 대한 모든 연결이 즉시 종료됩니다.

    gcloud compute networks subnets update BACKUP_PROXY_ONLY_SUBNET_NAME \
       --region=REGION \
       --role=ACTIVE \
       --drain-timeout=CONNECTION_DRAINING_TIMEOUT
    

    다음을 바꿉니다.

    • CONNECTION_DRAINING_TIMEOUT: Google Cloud에서 이전의 활성 프록시 전용 서브넷의 프록시에서 다른 곳으로 기존 연결을 마이그레이션하는 데 사용하는 시간(초)입니다.
  4. list 또는 describe 명령어를 사용하여 드레이닝 상태를 모니터링합니다. 서브넷이 드레이닝될 때 서브넷의 상태는 DRAINING입니다.

    gcloud compute networks subnets list
    

    드레이닝이 완료될 때까지 기다립니다. 이전 프록시 전용 서브넷이 드레이닝될 때 서브넷의 상태는 READY입니다.

  5. 새 서브넷의 연결만 허용하도록 프록시 전용 서브넷 방화벽 규칙을 업데이트합니다.

    gcloud compute firewall-rules PROXY_ONLY_SUBNET_FIREWALL_RULE \
      --source-ranges BACKUP_PROXY_ONLY_SUBNET_RANGE
    
  6. 백엔드 VM 또는 엔드포인트에 대한 연결이 이전의 활성(현재는 백업) 프록시 전용 서브넷의 프록시에서 시작되지 않았다고 확신하는 경우 이전 서브넷을 삭제할 수 있습니다.

    gcloud compute networks subnets delete ACTIVE_PROXY_ONLY_SUBNET_NAME \
      --region=REGION
    

프록시 전용 서브넷의 용도 마이그레이션

이전에 --purpose=INTERNAL_HTTPS_LOAD_BALANCER를 사용하여 프록시 전용 서브넷을 만든 경우 VPC 네트워크와 동일한 리전에 다른 Envoy 기반 부하 분산기를 만들기 전에 서브넷의 용도를 REGIONAL_MANAGED_PROXY로 마이그레이션해야 합니다.

콘솔

Google Cloud 콘솔을 사용하여 부하 분산기를 만드는 경우 부하 분산기를 생성하는 동안 이전에 만든 프록시 전용 서브넷의 용도를 --purpose=INTERNAL_HTTPS_LOAD_BALANCER에서 REGIONAL_MANAGED_PROXY로 마이그레이션하라는 메시지가 표시됩니다.

gcloud

기존 프록시 전용 서브넷의 용도를 --purpose=INTERNAL_HTTPS_LOAD_BALANCER에서 REGIONAL_MANAGED_PROXY로 변경하려면 다음 명령어를 사용합니다.

gcloud compute networks subnets update PROXY_ONLY_SUBNET \
    --purpose=REGIONAL_MANAGED_PROXY \
    --region=REGION

프록시 전용 서브넷의 용도를 --purpose=INTERNAL_HTTPS_LOAD_BALANCER에서 REGIONAL_MANAGED_PROXY로 마이그레이션해도 다운타임이 발생하지 않습니다. 변경사항은 거의 즉시 적용됩니다.

프록시 전용 서브넷 삭제

프록시 전용 서브넷을 삭제하면 기본 IP 주소 범위가 해제되므로 범위를 다른 용도로 사용할 수 있습니다. Google Cloud는 프록시 전용 서브넷 삭제 요청을 받으면 다음 규칙을 적용합니다.

  • 동일한 리전 및 VPC 네트워크에 한 개 이상의 리전별 부하 분산기가 있으면 활성 프록시 전용 서브넷을 삭제할 수 없습니다.

  • 동일한 리전과 VPC 네트워크에 백업 프록시 전용 서브넷이 있으면 활성 프록시 전용 서브넷을 삭제할 수 없습니다.

    백업을 삭제하기 전에 활성 프록시 전용 서브넷을 삭제하려고 하면 '잘못된 리소스 사용량: 백업 서브네트워크가 있으므로 활성 서브네트워크를 삭제할 수 없습니다.'라는 오류 메시지가 표시됩니다.

사실상 이러한 규칙에는 다음과 같은 효과가 있습니다.

  • 지정된 리전 및 VPC 네트워크에 리전별 부하 분산기가 정의되어 있지 않으면 해당 리전의 프록시 전용 서브넷을 삭제할 수 있습니다. 백업 프록시 전용 서브넷이 있으면 먼저 삭제한 다음 활성 프록시 전용 서브넷을 삭제해야 합니다.

  • 지정된 리전 및 VPC 네트워크에 1개 이상의 리전별 부하 분산기가 정의되어 있으면 활성 프록시 전용 서브넷을 삭제할 수 없습니다. 그러나 백업 프록시 전용 서브넷을 활성 역할로 승격할 수 있으며, 이때 이전의 활성 프록시 전용 서브넷은 백업 역할로 자동 강등됩니다. 연결이 드레이닝된 후 백업(이전의 활성) 프록시 전용 서브넷을 삭제할 수 있습니다.

자세한 내용은 VPC 네트워크 문서에서 서브넷 삭제를 참조하세요.

제한사항

다음 제약조건은 프록시 전용 서브넷에만 적용됩니다.

  • 동일한 네트워크 및 리전에 INTERNAL_HTTPS_LOAD_BALANCERREGIONAL_MANAGED_PROXY 서브넷이 모두 있을 수 없으며 마찬가지로 2개의 REGIONAL_MANAGED_PROXY 프록시 또는 2개의 INTERNAL_HTTPS_LOAD_BALANCER 프록시를 사용할 수 없습니다.

  • VPC 네트워크의 각 리전별로 1개의 활성 프록시 전용 서브넷과 1개의 프록시 전용 서브넷을 만들 수 있습니다.

  • 해당 리전 및 네트워크에 활성 프록시 전용 서브넷을 이미 만든 경우가 아니라면 백업 프록시 전용 서브넷을 만들 수 없습니다.

  • 서브넷을 업데이트하여 프록시 전용 서브넷 역할을 백업에서 활성으로 변경할 수 있습니다. 그러면 Google Cloud가 이전의 활성 프록시 전용 서브넷을 백업으로 자동 변경합니다. 프록시 전용 서브넷의 역할을 업데이트하여 백업으로 명시적으로 설정할 수 없습니다.

  • 프록시 전용 서브넷의 연결을 드레이닝하는 동안(--drain-timeout)에는 프록시 전용 서브넷의 역할을 백업에서 활성으로 변경할 수 없습니다.

  • 프록시 전용 서브넷에 IP 주소가 부족해도 Google Cloud에서 경고를 표시하지 않습니다. 하지만 프록시 전용 서브넷의 IP 주소 사용을 모니터링하도록 Monitoring을 구성할 수 있습니다. 알림 정책을 정의하여 loadbalancing.googleapis.com/subnet/proxy_only/addresses 측정항목에 대한 알림을 설정할 수 있습니다.

  • 프록시 전용 서브넷은 VPC 흐름 로그를 지원하지 않습니다.

다음 단계