하이브리드 연결로 리전 간 내부 애플리케이션 부하 분산기 설정

이 페이지에서는 리전 간 내부 애플리케이션 부하 분산기를 배포하여 온프레미스 또는 다른 퍼블릭 클라우드에 있고 하이브리드 연결을 통해 연결할 수 있는 네트워크 엔드포인트에 트래픽을 부하 분산하는 방법을 설명합니다.

아직 살펴보지 않았다면, 하이브리드 부하 분산을 설정하기 위한 네트워크 요구사항을 이해하려면 하이브리드 연결 NEG 개요를 살펴보세요.

설정 개요

이 예시에서는 다음 그림과 같이 혼합 영역 및 하이브리드 연결 NEG 백엔드에 리전 간 내부 애플리케이션 부하 분산기를 설정합니다.

혼합 영역 및 하이브리드 연결 NEG 백엔드의 리전 간 내부 애플리케이션 부하 분산기 예시
혼합된 영역 및 하이브리드 연결 NEG 백엔드의 리전 간 내부 애플리케이션 부하 분산기예시 (확대하려면 클릭)

하이브리드 부하 분산 배포를 설정하기 전에 하이브리드 연결을 구성해야 합니다. 선택한 하이브리드 연결 제품에 따라 Cloud VPN 또는 Cloud Interconnect(Dedicated 또는 Partner)를 사용하세요.

SSL 인증서 리소스 설정

다음 설명대로 인증서 관리자 SSL 인증서 리소스를 만듭니다.

Google 관리형 인증서를 사용하는 것이 좋습니다.

권한

하이브리드 부하 분산을 설정하려면 다음 권한이 있어야 합니다.

  • Google Cloud 환경

    • Google Cloud와 온프레미스 환경 또는 기타 클라우드 환경 간에 하이브리드 연결을 설정할 수 있는 권한이 필요합니다. 필요한 권한 목록은 관련 네트워크 연결 제품 문서를 참조하세요.
    • 하이브리드 연결 NEG 및 부하 분산기를 만들 수 있는 권한이 필요합니다. Compute 부하 분산기 관리자 역할(roles/compute.loadBalancerAdmin)에는 이 가이드에서 설명하는 태스크를 수행하는 데 필요한 권한이 포함되어 있습니다.
  • 온프레미스 환경 또는 Google Cloud 이외의 기타 클라우드 환경

    • IP:Port 조합을 사용하여 온프레미스 환경 또는 기타 클라우드 환경의 서비스를 Google Cloud에서 연결할 수 있도록 허용하는 네트워크 엔드포인트를 구성할 수 있는 권한입니다. 자세한 내용은 환경 네트워크 관리자에게 문의하세요.
    • Google의 상태 점검 프로브가 엔드포인트에 도달할 수 있도록 온프레미스 환경 또는 기타 클라우드 환경에서 방화벽 규칙을 만들 수 있는 권한이 필요합니다.

또한 이 페이지의 안내를 완료하려면 부하 분산기의 Google Cloud 기반 백엔드로 제공할 하이브리드 연결 NEG, 부하 분산기, 영역별 NEG(및 해당 엔드포인트)를 만들어야 합니다.

이렇게 하려면 프로젝트 소유자 또는 편집자이거나 다음 Compute Engine IAM 역할을 보유해야 합니다.

작업 필요한 역할
네트워크, 서브넷, 부하 분산기 구성요소 만들기 Compute 네트워크 관리자 (roles/compute.networkAdmin)
방화벽 규칙 추가 및 삭제 Compute 보안 관리자 (roles/compute.securityAdmin)
인스턴스 만들기 Compute 인스턴스 관리자 (roles/compute.instanceAdmin)

하이브리드 연결 설정

Google Cloud와 온프레미스 환경 또는 기타 클라우드 환경은 Cloud Router와 함께 Cloud Interconnect VLAN 연결 또는 Cloud VPN 터널을 사용하는 하이브리드 연결을 통해 연결되어야 합니다. 고가용성 연결을 사용하는 것을 권장합니다.

전역 동적 라우팅으로 사용 설정된 Cloud Router는 경계 게이트웨이 프로토콜(BGP)을 통해 특정 엔드포인트를 학습하고 Google Cloud VPC 네트워크에 프로그래밍합니다. 리전별 동적 라우팅은 지원되지 않습니다. 정적 경로도 지원되지 않습니다.

Cloud Interconnect 또는 Cloud VPN을 구성하는 데 사용하는 VPC 네트워크는 하이브리드 부하 분산 배포를 구성하는 데 사용하는 네트워크와 동일합니다. VPC 네트워크의 서브넷 CIDR 범위가 원격 CIDR 범위와 충돌하지 않는지 확인합니다. 서브넷 경로는 IP 주소가 겹칠 때 원격 연결보다 우선 적용됩니다.

자세한 내용은 다음 문서를 참조하세요.

Google Cloud 외부에 있는 환경 설정

다음 단계를 수행하여 하이브리드 부하 분산을 위한 온프레미스 환경 또는 기타 클라우드 환경을 설정하세요.

  • Google Cloud에 온프레미스 서비스를 노출하도록 네트워크 엔드포인트 구성(IP:Port)
  • 온프레미스 환경 또는 기타 클라우드 환경에서 방화벽 규칙 구성
  • Cloud Router가 특정 필수 경로를 비공개 환경에 공지하도록 구성

네트워크 엔드포인트 설정

하이브리드 연결을 설정한 후에는 IP:port 조합을 사용하여 Cloud Interconnect 또는 Cloud VPN을 통해 연결할 수 있는 온프레미스 환경 또는 다른 클라우드 환경 내에서 네트워크 엔드포인트를 하나 이상 구성합니다. 이 IP:port 조합은 이 프로세스의 후반부에 Google Cloud에서 생성될 하이브리드 연결 NEG의 엔드포인트 한 개 이상으로 구성됩니다.

IP 엔드포인트에 대한 경로가 여러 개 있으면 라우팅은 Cloud Router 개요에 설명된 동작을 따릅니다.

방화벽 규칙 설정

온프레미스 환경 또는 다른 클라우드 환경에서 다음 방화벽 규칙을 만들어야 합니다.

  • 온프레미스 또는 다른 클라우드 환경에서 인그레스 허용 방화벽 규칙을 만들어 리전의 프록시 전용 서브넷에서 엔드포인트에 도달하도록 트래픽을 허용합니다.
  • 하이브리드 NEG에는 Google의 상태 점검 프로브 범위를 허용 목록에 추가할 필요가 없습니다. 하지만 단일 백엔드 서비스에서 하이브리드 및 영역 NEG 조합을 사용하는 경우 영역 NEG에 대한 Google 상태 점검 프로브 범위를 허용 목록에 추가해야 합니다.

온프레미스 환경 또는 기타 클라우드 환경에 다음 커스텀 IP 범위를 공지하도록 Cloud Router를 구성하세요.

  • 리전의 프록시 전용 서브넷의 범위입니다.

Google Cloud 환경 설정

다음 단계에서는 환경 간 하이브리드 연결을 구성하는 데 사용된 것과 동일한 VPC 네트워크(이 절차에서는 NETWORK라고 함)를 사용해야 합니다.

또한 사용된 리전(이 절차에서는 REGION_AREGION_B이라고 함)이 Cloud VPN 터널 또는 Cloud Interconnect VLAN 연결을 만들 때 사용한 리전과 동일한지 확인합니다.

선택적으로 리전 서비스 중단 시 클라이언트에 가장 가까운 리전의 부하 분산기 VIP로 클라이언트 트래픽을 라우팅하도록 GEO 유형의 DNS 라우팅 정책을 구성할 수 있습니다.

백엔드 서브넷 구성

이 서브넷을 사용하여 부하 분산기의 영역 NEG 백엔드를 만듭니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. 환경 간 하이브리드 연결을 구성하는 데 사용된 네트워크로 이동합니다.

  3. 서브넷 섹션에서 다음을 수행합니다.

    • 서브넷 생성 모드커스텀으로 설정합니다.
    • 새 서브넷 섹션에 다음 정보를 입력합니다.
      • 서브넷 이름을 입력합니다.
      • 리전으로 REGION_A를 선택합니다.
      • IP 주소 범위를 입력합니다.
    • 완료를 클릭합니다.
  4. 만들기를 클릭합니다.

  5. 다른 리전에 서브넷을 추가하려면 서브넷 추가를 클릭하고 REGION_B에 대해 이전 단계를 반복합니다.

gcloud

  1. 환경 간 하이브리드 연결을 구성하는 데 사용된 네트워크에 서브넷을 만듭니다.

    gcloud compute networks subnets create SUBNET_A \
        --network=NETWORK \
        --range=LB_SUBNET_RANGE1 \
        --region=REGION_A
    
    gcloud compute networks subnets create SUBNET_B \
        --network=NETWORK \
        --range=LB_SUBNET_RANGE2 \
        --region=REGION_B
    

API

subnetworks.insert 메서드에 대해 POST 요청을 실행합니다. PROJECT_ID를 프로젝트 ID로 바꿉니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/subnetworks

{
 "name": "SUBNET_A",
 "network": "projects/PROJECT_ID/global/networks/NETWORK",
 "ipCidrRange": "LB_SUBNET_RANGE1",
 "region": "projects/PROJECT_ID/regions/REGION_A",
}

subnetworks.insert 메서드에 대해 POST 요청을 실행합니다. PROJECT_ID를 프로젝트 ID로 바꿉니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/subnetworks

{
 "name": "SUBNET_B",
 "network": "projects/PROJECT_ID/global/networks/NETWORK",
 "ipCidrRange": "LB_SUBNET_RANGE2",
 "region": "projects/PROJECT_ID/regions/REGION_B",
}

다음을 바꿉니다.

  • SUBNET_ASUBNET_B: 서브넷의 이름
  • LB_SUBNET_RANGE1LB_SUBNET_RANGE2: 서브넷의 IP 주소 범위
  • REGION_AREGION_B: 부하 분산기를 구성한 리전

프록시 전용 서브넷 구성

프록시 전용 서브넷은 Google이 사용자를 대신하여 Envoy 프록시를 실행하는 데 사용하는 IP 주소 집합을 제공합니다. 프록시는 클라이언트의 연결을 종료하고 백엔드에 새 연결을 만듭니다.

이 프록시 전용 서브넷은 VPC 네트워크의 동일한 리전에 있는 모든 Envoy 기반 리전 부하 분산기에서 사용됩니다. 네트워크당 리전별 활성 프록시 전용 서브넷은 용도별로 하나만 있을 수 있습니다.

콘솔

Google Cloud 콘솔을 사용하는 경우에는 기다렸다가 나중에 부하 분산 페이지에서 프록시 전용 서브넷을 만들 수 있습니다.

지금 프록시 전용 서브넷을 만들려면 다음 단계를 사용합니다.

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. VPC 네트워크의 이름을 클릭합니다.
  3. 서브넷 탭에서 서브넷 추가를 클릭합니다.
  4. 프록시 전용 서브넷의 이름을 입력합니다.
  5. 리전 목록에서 REGION_A을 선택합니다.
  6. 용도 목록에서 리전 간 관리형 프록시를 선택합니다.
  7. IP 주소 범위 필드에 10.129.0.0/23을 입력합니다.
  8. 추가를 클릭합니다.

REGION_B에 프록시 전용 서브넷 만들기

  1. 서브넷 추가를 클릭합니다.
  2. 프록시 전용 서브넷의 이름을 입력합니다.
  3. 리전 목록에서 REGION_B을 선택합니다.
  4. 용도 목록에서 리전 간 관리형 프록시를 선택합니다.
  5. IP 주소 범위 필드에 10.130.0.0/23을 입력합니다.
  6. 추가를 클릭합니다.

gcloud

gcloud compute networks subnets create 명령어로 프록시 전용 서브넷을 만드세요.

    gcloud compute networks subnets create PROXY_SN_A \
        --purpose=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=REGION_A \
        --network=NETWORK \
        --range=PROXY_ONLY_SUBNET_RANGE1
    
    gcloud compute networks subnets create PROXY_SN_B \
        --purpose=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=REGION_B \
        --network=NETWORK \
        --range=PROXY_ONLY_SUBNET_RANGE2
    

다음을 바꿉니다.

  • PROXY_SN_APROXY_SN_B: 프록시 전용 서브넷의 이름
  • PROXY_ONLY_SUBNET_RANGE1PROXY_ONLY_SUBNET_RANGE2: 프록시 전용 서브넷의 IP 주소 범위
  • REGION_AREGION_B: 부하 분산기를 구성한 리전

API

subnetworks.insert 메서드로 프록시 전용 서브넷을 만드세요. 여기서 PROJECT_ID는 프로젝트 ID로 바꿉니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/subnetworks

    {
      "name": "PROXY_SN_A",
      "ipCidrRange": "PROXY_ONLY_SUBNET_RANGE1",
      "network": "projects/PROJECT_ID/global/networks/NETWORK",
      "region": "projects/PROJECT_ID/regions/REGION_A",
      "purpose": "GLOBAL_MANAGED_PROXY",
      "role": "ACTIVE"
    }
  
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/subnetworks

    {
      "name": " PROXY_SN_B",
      "ipCidrRange": "PROXY_ONLY_SUBNET_RANGE2",
      "network": "projects/PROJECT_ID/global/networks/NETWORK",
      "region": "projects/PROJECT_ID/regions/REGION_B",
      "purpose": "GLOBAL_MANAGED_PROXY",
      "role": "ACTIVE"
    }
  

방화벽 규칙 만들기

이 예시에서는 Google Cloud의 영역별 NEG 백엔드에 대해 다음 방화벽 규칙을 만듭니다.

  • fw-allow-health-check: 부하 분산되는 인스턴스에 적용되는 인그레스 규칙으로 Google Cloud 상태 확인 시스템(130.211.0.0/2235.191.0.0/16)의 트래픽을 허용합니다. 이 예시에서는 allow-health-check 대상 태그를 사용하여 적용해야 할 영역별 NEG를 식별합니다.
  • fw-allow-ssh: TCP 포트 22에서 임의의 주소로부터 수신되는 SSH 연결을 허용하는 인그레스 규칙입니다. 이 규칙에 더 제한적인 소스 IP 범위를 선택할 수 있습니다. 예를 들어 SSH 세션을 시작할 시스템의 IP 범위만 지정할 수도 있습니다. 이 예시에서는 대상 태그인 allow-ssh를 사용하여 적용해야 하는 가상 머신(VM) 인스턴스를 식별합니다.
  • fw-allow-proxy-only-subnet: 프록시 전용 서브넷의 연결이 영역별 NEG 백엔드에 도달하도록 허용하는 인그레스 규칙입니다.

콘솔

  1. Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.

    방화벽 정책으로 이동

  2. 방화벽 규칙 만들기를 클릭하여 상태 점검 프로브의 트래픽을 허용하는 규칙을 만듭니다.

    1. fw-allow-health-check이름을 입력합니다.
    2. 네트워크에서 NETWORK를 선택합니다.
    3. 대상에서 Specified target tags를 선택합니다.
    4. allow-health-check대상 태그 필드를 채웁니다.
    5. 소스 필터IPv4 범위로 설정합니다.
    6. 소스 IPv4 범위130.211.0.0/2235.191.0.0/16으로 설정합니다.
    7. 프로토콜 및 포트지정된 프로토콜 및 포트를 선택합니다.
    8. TCP를 선택한 후 포트 번호에 80을 입력합니다.
    9. 만들기를 클릭합니다.
  3. 방화벽 규칙 만들기를 다시 클릭하여 수신 SSH 연결을 허용하는 규칙을 만듭니다.

    1. 이름: fw-allow-ssh
    2. 네트워크: NETWORK
    3. 우선순위: 1000
    4. 트래픽 방향: 인그레스
    5. 일치 시 작업: 허용
    6. 대상: 지정된 대상 태그
    7. 대상 태그: allow-ssh
    8. 소스 필터: IPv4 범위
    9. 소스 IPv4 범위: 0.0.0.0/0
    10. 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택합니다.
    11. TCP를 선택한 후 포트 번호에 22를 입력합니다.
    12. 만들기를 클릭합니다.
  4. 방화벽 규칙 만들기를 다시 클릭하여 프록시 전용 서브넷에서 들어오는 연결을 허용하는 규칙을 만듭니다.

    1. 이름: fw-allow-proxy-only-subnet
    2. 네트워크: NETWORK
    3. 우선순위: 1000
    4. 트래픽 방향: 인그레스
    5. 일치 시 작업: 허용
    6. 대상: 지정된 대상 태그
    7. 대상 태그: allow-proxy-only-subnet
    8. 소스 필터: IPv4 범위
    9. 소스 IPv4 범위: PROXY_ONLY_SUBNET_RANGE1PROXY_ONLY_SUBNET_RANGE2
    10. 프로토콜 및 포트: 지정된 프로토콜 및 포트를 선택합니다.
    11. TCP를 선택한 후 포트 번호에 80을 입력합니다.
    12. 만들기를 클릭합니다.

gcloud

  1. fw-allow-health-check-and-proxy 규칙을 만들어 Google Cloud 상태 점검이 TCP 포트 80에서 백엔드 인스턴스에 도달하도록 합니다.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp:80
    
  2. allow-ssh 네트워크 태그를 사용해 VM으로 가는 SSH 연결을 허용하는 fw-allow-ssh 방화벽 규칙을 만듭니다. source-ranges를 생략하면 Google Cloud가 모든 소스를 의미하는 것으로 규칙을 해석합니다.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. 프록시 전용 서브넷에 대한 인그레스 허용 방화벽 규칙을 만들어 부하 분산기가 TCP 포트 80에서 백엔드 인스턴스와 통신할 수 있도록 합니다.

    gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-proxy-only-subnet \
        --source-ranges=PROXY_ONLY_SUBNET_RANGE1,PROXY_ONLY_SUBNET_RANGE2 \
        --rules=tcp:80
    

영역별 NEG 설정

Google Cloud 기반 백엔드의 경우 하이브리드 연결을 구성한 동일한 리전에 여러 영역별 NEG를 구성하는 것이 좋습니다.

이 예시에서는 REGION_A 리전에 GCE_VM_IP_PORT 유형의 엔드포인트가 있는 영역별 NEG를 설정합니다. 먼저 ZONE_A 영역에 VM을 만듭니다. 그런 다음 ZONE_A 영역에 영역별 NEG를 만들고 VM의 네트워크 엔드포인트를 NEG에 추가합니다. 고가용성 지원을 위해서는 REGION_B 리전에 비슷한 영역별 NEG를 설정합니다. 한 리전의 백엔드가 다운되면 트래픽이 다른 리전으로 장애 조치됩니다.

VM 만들기

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 다음 이름 및 영역 조합으로 각 VM에 대해 3~8단계를 반복합니다.

    • 이름: vm-a1의 이름
      • 영역: REGION_A 리전의 ZONE_A
      • 서브넷: SUBNET_A
    • 이름: vm-b1의 이름
      • 영역: REGION_B 리전의 ZONE_B
      • 서브넷: SUBNET_B
  3. 인스턴스 만들기를 클릭합니다.

  4. 이전 단계에 표시된 대로 이름을 설정합니다.

  5. 리전에서 이전 단계에 표시된 대로 선택합니다.

  6. 영역에서 이전 단계에 표시된 대로 선택합니다.

  7. 부팅 디스크 섹션에서 부팅 디스크 옵션에 Debian GNU/Linux 12(bookworm)가 선택되어 있는지 확인합니다. 필요한 경우 선택을 클릭하여 이미지를 변경합니다.

  8. 고급 옵션 섹션에서 네트워킹을 펼친 후 다음을 수행합니다.

    • 다음 네트워크 태그 allow-ssh, allow-health-check, allow-proxy-only-subnet를 추가합니다.
    • 네트워크 인터페이스 섹션에서 네트워크 인터페이스 추가를 클릭하여 다음과 같이 변경한 후 완료를 클릭합니다.
      • 네트워크: NETWORK
      • 서브네트워크: 이전 단계에 표시된 대로 선택합니다.
      • 기본 내부 IP: 임시(자동)
      • 외부 IP: 임시
    • 관리를 펼칩니다. 자동화 필드에 다음 스크립트 콘텐츠를 복사하여 붙여넣습니다. 스크립트 콘텐츠는 모든 VM에서 동일합니다.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  9. 만들기를 클릭합니다.

gcloud

VM 이름과 해당 영역의 조합을 사용하여 다음 명령어를 실행해 VM을 만듭니다. 스크립트 콘텐츠는 두 VM 모두에서 동일합니다.

gcloud compute instances create VM_NAME \
    --zone=GCP_NEG_ZONE \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
    --subnet=LB_SUBNET_NAME \
    --metadata=startup-script='#! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2'
  • vm-a1VM_NAME
    • REGION_A 리전의 ZONE_A: GCP_NEG_ZONE 영역
    • 서브넷 LB_SUBNET_NAME: SUBNET_A
  • vm-b1VM_NAME
    • GCP_NEG_ZONE 영역: REGION_B 리전의 ZONE_B
    • SUBNET_B: 서브넷 LB_SUBNET_NAME:

영역별 NEG 만들기

콘솔

영역별 네트워크 엔드포인트 그룹을 만들려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 네트워크 엔드포인트 그룹 페이지로 이동합니다.

    네트워크 엔드포인트 그룹으로 이동

  2. 다음 이름 및 영역 조합으로 각 영역별 NEG에 대해 3~8단계를 반복합니다.

    • 이름: neg-1
      • 영역: REGION_A 리전의 ZONE_A
      • 서브넷: SUBNET_A
    • 이름: neg-2
      • 영역: REGION_B 리전의 ZONE_B
      • 서브넷: SUBNET_B
  3. 네트워크 엔드포인트 그룹 만들기를 클릭합니다.

  4. 이전 단계에 표시된 대로 이름을 설정합니다.

  5. 네트워크 엔드포인트 그룹 유형네트워크 엔드포인트 그룹(영역)을 선택합니다.

  6. 네트워크: NETWORK를 선택합니다.

  7. 이전 단계에 표시된 대로 서브네트워크를 선택합니다.

  8. 이전 단계에 표시된 대로 영역을 선택합니다.

  9. 기본 포트80을 입력합니다.

  10. 만들기를 클릭합니다.

엔드포인트를 영역별 NEG에 추가합니다.

  1. Google Cloud 콘솔에서 네트워크 엔드포인트 그룹 페이지로 이동합니다.

    네트워크 엔드포인트 그룹으로 이동

  2. 이전 단계에서 만든 네트워크 엔드포인트 그룹의 이름을 클릭합니다. 네트워크 엔드포인트 그룹 세부정보 페이지가 표시됩니다.

  3. 이 그룹의 네트워크 엔드포인트 섹션에서 네트워크 엔드포인트 추가를 클릭합니다. 네트워크 엔드포인트 추가 페이지가 표시됩니다.

  4. VM 인스턴스를 선택하여 내부 IP 주소를 네트워크 엔드포인트로 추가합니다. 네트워크 인터페이스 섹션에 VM의 이름, 영역, 서브넷이 표시됩니다.

  5. 새 네트워크 엔드포인트의 IP 주소를 입력합니다.

  6. 포트 유형을 선택합니다.

    1. 기본값을 선택하면 엔드포인트에서 네트워크 엔드포인트 그룹의 모든 엔드포인트에 기본 포트 80을 사용합니다. Apache 서버가 포트 80에서 요청을 처리하므로 이 예시에 충분합니다.
    2. 커스텀을 선택하면 사용할 엔드포인트의 포트 번호를 입력합니다.
  7. 엔드포인트를 추가하려면 네트워크 엔드포인트 추가를 클릭하고 이전 단계를 반복합니다.

  8. 엔드포인트를 모두 추가한 후 만들기를 클릭합니다.

gcloud

  1. 이름, 영역, 서브넷 조합을 사용하여 영역별 NEG(GCE_VM_IP_PORT 엔드포인트 포함)를 만듭니다. gcloud compute network-endpoint-groups create 명령어를 사용합니다.

    gcloud compute network-endpoint-groups create GCP_NEG_NAME \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=GCP_NEG_ZONE \
        --network=NETWORK \
        --subnet=LB_SUBNET_NAME
    
    • 이름: neg-1
      • GCP_NEG_ZONE 영역: REGION_A 리전의 ZONE_A
      • 서브넷 LB_SUBNET_NAME: SUBNET_A
    • 이름: neg-2
      • GCP_NEG_ZONE 영역: REGION_B 리전의 ZONE_B
      • 서브넷 LB_SUBNET_NAME: SUBNET_B

    NEG를 만드는 동안 --default-port 옵션을 사용하여 포트를 지정하거나 다음 단계에서처럼 엔드포인트마다 포트 번호를 지정할 수 있습니다.

  2. neg1neg2에 엔드포인트를 추가합니다.

    gcloud compute network-endpoint-groups update neg1 \
        --zone=ZONE_A \
        --add-endpoint='instance=vm-a1,port=80'
    
    gcloud compute network-endpoint-groups update neg2 \
        --zone=ZONE_B \
        --add-endpoint='instance=vm-b1,port=80'
    

하이브리드 연결 NEG 설정

NEG를 만들 때 Google Cloud와 온프레미스 또는 기타 클라우드 환경 간의 지리적 거리를 최소화하는 영역을 사용합니다. 예를 들어 독일 프랑크푸르트의 온프레미스 환경에서 서비스를 호스팅하는 경우 NEG를 만들 때 europe-west3-a Google Cloud 영역을 지정할 수 있습니다.

또한 Cloud Interconnect를 사용할 경우 NEG를 만드는 데 사용된 영역은 Cloud Interconnect 연결이 구성된 리전과 동일합니다.

하이브리드 NEG는 분산 Envoy 상태 점검만 지원합니다.

콘솔

하이브리드 연결 네트워크 엔드포인트 그룹을 만들려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 네트워크 엔드포인트 그룹 페이지로 이동합니다.

    네트워크 엔드포인트 그룹으로 이동

  2. 네트워크 엔드포인트 그룹 만들기를 클릭합니다.

  3. 다음 이름 및 영역 조합을 사용하여 하이브리드 NEG마다 4~9단계를 반복합니다.

    • 이름 ON_PREM_NEG_NAME: hybrid-1
      • 영역: ON_PREM_NEG_ZONE1
      • 서브넷: SUBNET_A
    • 이름 ON_PREM_NEG_NAME: hybrid-2
      • 영역: ON_PREM_NEG_ZONE2
      • 서브넷: SUBNET_B
  4. 이전 단계에서 설명한 대로 이름을 설정합니다.

  5. 네트워크 엔드포인트 그룹 유형하이브리드 연결 네트워크 엔드포인트 그룹(영역)을 선택합니다.

  6. 네트워크: NETWORK를 선택합니다.

  7. 서브넷에서 이전 단계에 표시된 대로 선택합니다.

  8. 영역에서 이전 단계에 표시된 대로 선택합니다.

  9. 기본 포트를 입력합니다.

  10. 만들기를 클릭합니다.

엔드포인트를 하이브리드 연결 NEG에 추가합니다.

  1. Google Cloud 콘솔에서 네트워크 엔드포인트 그룹 페이지로 이동합니다.

    네트워크 엔드포인트 그룹으로 이동

  2. 이전 단계에서 만든 네트워크 엔드포인트 그룹의 이름을 클릭합니다. 네트워크 엔드포인트 그룹 세부정보 페이지가 표시됩니다.

  3. 이 그룹의 네트워크 엔드포인트 섹션에서 네트워크 엔드포인트 추가를 클릭합니다. 네트워크 엔드포인트 추가 페이지가 표시됩니다.

  4. 새 네트워크 엔드포인트의 IP 주소를 입력합니다.

  5. 포트 유형을 선택합니다.

    1. 기본값을 선택하면 엔드포인트에서 네트워크 엔드포인트 그룹의 모든 엔드포인트에 기본 포트를 사용합니다.
    2. 커스텀을 선택하면 사용할 엔드포인트에 다른 포트 번호를 입력할 수 있습니다.
  6. 엔드포인트를 추가하려면 네트워크 엔드포인트 추가를 클릭하고 이전 단계를 반복합니다.

  7. Google Cloud 이외의 엔드포인트를 모두 추가한 후 만들기를 클릭합니다.

gcloud

  1. 다음 이름 조합을 사용하는 하이브리드 연결 NEG를 만듭니다. gcloud compute network-endpoint-groups create 명령어를 사용합니다.

    gcloud compute network-endpoint-groups create ON_PREM_NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ON_PREM_NEG_ZONE \
        --network=NETWORK
    
    • 이름 ON_PREM_NEG_NAME: hybrid-1
      • 영역 ON_PREM_NEG_ZONE: ON_PREM_NEG_ZONE1
    • 이름 ON_PREM_NEG_NAME: hybrid-2
      • 영역 GCP_NEG_ZONE: ON_PREM_NEG_ZONE2
  2. 온프레미스 백엔드 VM 엔드포인트를 ON_PREM_NEG_NAME에 추가합니다.

    gcloud compute network-endpoint-groups update ON_PREM_NEG_NAME \
        --zone=ON_PREM_NEG_ZONE \
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_1,port=PORT_1" \
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_2,port=PORT_2"
    

이 명령어를 사용하여 이전에 온프레미스 또는 클라우드 환경에서 구성한 네트워크 엔드포인트를 추가할 수 있습니다. --add-endpoint를 필요한 만큼 반복합니다.

부하 분산기 구성

콘솔

gcloud

  1. gcloud compute health-checks create http 명령어로 HTTP 상태 점검을 정의하세요.

    gcloud compute health-checks create http gil7-basic-check \
       --use-serving-port \
       --global
    
  2. 백엔드 서비스를 만들고 gcloud compute backend-services create 명령어로 로깅을 사용 설정합니다.

    gcloud compute backend-services create BACKEND_SERVICE \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --enable-logging \
      --logging-sample-rate=1.0 \
      --health-checks=gil7-basic-check \
      --global-health-checks \
      --global
    
  3. gcloud compute backend-services add-backend 명령어로 백엔드 서비스에 백엔드를 추가합니다.

    gcloud compute backend-services add-backend BACKEND_SERVICE \
      --global \
      --balancing-mode=RATE \
      --max-rate-per-endpoint=MAX_REQUEST_RATE_PER_ENDPOINT \
      --network-endpoint-group=neg1 \
      --network-endpoint-group-zone=ZONE_A \
      --network-endpoint-group=neg2 \
      --network-endpoint-group-zone=ZONE_B
    

    분산 모드 구성에 대한 자세한 내용은 --max-rate-per-endpoint 플래그에 대한 gcloud CLI 문서를 참조하세요.

  4. 하이브리드 NEG를 백엔드 서비스에 백엔드로 추가합니다.

    gcloud compute backend-services add-backend BACKEND_SERVICE \
      --global \
      --balancing-mode=RATE \
      --max-rate-per-endpoint=MAX_REQUEST_RATE_PER_ENDPOINT \
      --network-endpoint-group=hybrid1 \
      --network-endpoint-group-zone=ON_PREM_NEG_ZONE1 \
      --network-endpoint-group=hybrid2 \
      --network-endpoint-group-zone=ON_PREM_NEG_ZONE2 \
    

    분산 모드 구성에 대한 자세한 내용은 --max-rate-per-endpoint 매개변수에 대한 gcloud CLI 문서를 참조하세요.

  5. gcloud compute url-maps create 명령어로 URL 맵을 만듭니다.

    gcloud compute url-maps create gil7-map \
      --default-service=BACKEND_SERVICE \
      --global
    
  6. 대상 프록시를 만듭니다.

    HTTP의 경우:

    gcloud compute target-http-proxies create 명령어를 사용하여 대상 프록시를 만듭니다.

    gcloud compute target-http-proxies create gil7-http-proxy \
      --url-map=gil7-map \
      --global
    

    HTTPS의 경우:

    Google 관리 인증서를 만들려면 다음 문서를 참조하세요.

    Google 관리 인증서를 만든 후 대상 프록시에 인증서를 연결합니다. 인증서 맵은 리전 간 내부 애플리케이션 부하 분산기에서 지원되지 않습니다.

    자체 관리형 인증서를 만들려면 다음 문서를 참조하세요.

    파일 경로를 변수 이름에 할당합니다.

    export LB_CERT=PATH_TO_PEM_FORMATTED_FILE
    
    export LB_PRIVATE_KEY=PATH_TO_PEM_LB_PRIVATE_FILE
    

    gcloud certificate-manager certificates create 명령어를 사용하여 모든 리전 SSL 인증서를 만듭니다.

    gcloud certificate-manager certificates create gilb-certificate \
      --private-key-file=$LB_CERT \
      --certificate-file=$LB_PRIVATE_KEY \
      --scope=all-regions
    

    SSL 인증서를 사용하여 gcloud compute target-https-proxies create 명령어로 대상 프록시를 만듭니다.

    gcloud compute target-https-proxies create gil7-https-proxy \
      --url-map=gil7-map \
      --certificate-manager-certificates=gilb-certificate \
      --global
    
  7. REGION_A 리전에 VIP(IP_ADDRESS1)가 있는 전달 규칙과 REGION_B 리전에 VIP(IP_ADDRESS2)가 있는 전달 규칙 두 개를 만듭니다. 전달 규칙 IP 주소에 LB_SUBNET_RANGE1 또는 LB_SUBNET_RANGE2 IP 주소 범위를 사용합니다. 프록시 전용 서브넷을 사용하려고 하면 전달 규칙 생성에 실패합니다.

    커스텀 네트워크의 경우 전달 규칙에서 서브넷을 참조해야 합니다. 이때 참조할 서브넷은 프록시 서브넷이 아니라 VM 서브넷입니다.

    HTTP의 경우:

    올바른 플래그와 함께 gcloud compute forwarding-rules create 명령어를 사용하세요.

    gcloud compute forwarding-rules create FWRULE_A \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=NETWORK \
      --subnet=SUBNET_A \
      --subnet-region=REGION_A \
      --address=IP_ADDRESS1 \
      --ports=80 \
      --target-http-proxy=gil7-http-proxy \
      --global
    
    gcloud compute forwarding-rules create FWRULE_B \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=NETWORK \
      --subnet=SUBNET_B \
      --subnet-region=REGION_B \
      --address=IP_ADDRESS2 \
      --ports=80 \
      --target-http-proxy=gil7-http-proxy \
      --global
    

    HTTPS의 경우:

    올바른 플래그와 함께 gcloud compute forwarding-rules create 명령어를 사용하여 전달 규칙을 만듭니다.

    gcloud compute forwarding-rules create FWRULE_A \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=NETWORK \
      --subnet=SUBNET_A \
      --subnet-region=REGION_A \
      --address=IP_ADDRESS1 \
      --ports=443 \
      --target-https-proxy=gil7-https-proxy \
      --global
    
    gcloud compute forwarding-rules create FWRULE_B \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=NETWORK \
      --subnet=SUBNET_B \
      --subnet-region=REGION_B \
      --address=IP_ADDRESS2 \
      --ports=443 \
      --target-https-proxy=gil7-https-proxy \
      --global
    

부하 분산기에 도메인 연결

부하 분산기를 만든 후 부하 분산기와 연결된 IP 주소를 확인합니다(예: IP_ADDRESS1IP_ADDRESS2). 도메인이 부하 분산기를 가리키도록 하려면 Cloud DNS 또는 도메인 등록 서비스를 사용하여 A 레코드를 만듭니다. SSL 인증서에 여러 도메인을 추가했다면 모두 부하 분산기의 IP 주소를 가리키는 A 레코드를 도메인마다 추가해야 합니다.

부하 분산기 테스트

VM 인스턴스를 생성하여 연결 테스트

  1. 클라이언트 VM을 만듭니다.

    gcloud compute instances create l7-ilb-client-a \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --network=NETWORK \
        --subnet=SUBNET_A \
        --zone=ZONE_A \
        --tags=allow-ssh
    
    gcloud compute instances create l7-ilb-client-b \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --network=NETWORK \
        --subnet=SUBNET_B \
        --zone=ZONE_B \
        --tags=allow-ssh
    
  2. SSH를 사용하여 각 클라이언트 인스턴스에 연결합니다.

    gcloud compute ssh l7-ilb-client-a \
       --zone=ZONE_A
    
    gcloud compute ssh l7-ilb-client-b \
       --zone=ZONE_B
    
  3. IP 주소가 호스트 이름을 제공하는지 확인합니다.

    • 클라이언트 VM이 두 IP 주소 모두에 연결할 수 있는지 확인합니다. 명령어가 성공하고 요청을 제공한 백엔드 VM의 이름을 반환합니다.

      curl IP_ADDRESS1
      
      curl IP_ADDRESS2
      

      HTTPS 테스트의 경우 curl을 다음으로 바꿉니다.

      curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:IP_ADDRESS1:443
      
      curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:IP_ADDRESS2:443
      

      -k 플래그로 인해 curl이 인증서 유효성 검사를 건너뜁니다.

    • (선택사항) 구성된 DNS 레코드를 사용하여 클라이언트 VM과 가장 가까운 IP 주소를 확인합니다. 예를 들어 DNS_ENTRYservice.example.com일 수 있습니다.

      curl DNS_ENTRY
      

요청 100개 실행

100개의 curl 요청을 실행하고 응답에서 부하 분산되었는지 확인합니다.

HTTP의 경우:

  • 클라이언트 VM이 두 IP 주소 모두에 연결할 수 있는지 확인합니다. 명령어가 성공하고 요청을 제공한 백엔드 VM의 이름을 반환합니다.

    {
      RESULTS=
      for i in {1..100}
      do
        RESULTS="$RESULTS:$(curl --silent IP_ADDRESS1)"
      done
      echo "***"
      echo "*** Results of load-balancing to IP_ADDRESS1: "
      echo "***"
      echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
      echo
    }
    
    {
      RESULTS=
      for i in {1..100}
      do
        RESULTS="$RESULTS:$(curl --silent IP_ADDRESS2)"
      done
      echo "***"
      echo "*** Results of load-balancing to IP_ADDRESS2: "
      echo "***"
      echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
      echo
    }
    

HTTPS의 경우:

  • 클라이언트 VM이 두 IP 주소 모두에 연결할 수 있는지 확인합니다. 명령어가 성공하고 요청을 제공한 백엔드 VM의 이름을 반환합니다.

    {
      RESULTS=
      for i in {1..100}
      do
        RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:IP_ADDRESS1:443)"
      done
      echo "***"
      echo "*** Results of load-balancing to IP_ADDRESS1: "
      echo "***"
      echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
      echo
    }
    
    {
      RESULTS=
      for i in {1..100}
      do
        RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:IP_ADDRESS2:443)"
      done
      echo "***"
      echo "*** Results of load-balancing to IP_ADDRESS2: "
      echo "***"
      echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
      echo
    }
    

장애 조치 테스트

  1. REGION_B의 백엔드가 비정상이거나 연결할 수 없는 경우 REGION_A 리전의 백엔드로 장애 조치를 확인하세요. 이를 시뮬레이션하기 위해 REGION_B에서 모든 백엔드를 삭제합니다.

    gcloud compute backend-services remove-backend BACKEND_SERVICE \
       --balancing-mode=RATE \
       --network-endpoint-group=neg2 \
       --network-endpoint-group-zone=ZONE_B
    
  2. SSH를 사용하여 REGION_B의 클라이언트 VM에 연결합니다.

    gcloud compute ssh l7-ilb-client-b \
       --zone=ZONE_B
    
  3. REGION_B 리전의 부하 분산된 IP 주소로 요청을 전송합니다. 출력은 다음과 비슷합니다.

    {
    RESULTS=
    for i in {1..100}
    do
      RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:IP_ADDRESS2:443)"
    done
    echo "***"
    echo "*** Results of load-balancing to IP_ADDRESS2: "
    echo "***"
    echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
    echo
    }
    

추가 구성 옵션

이 섹션에서는 대체 및 추가 구성 옵션을 제공하는 구성 예시를 살펴봅니다. 모든 태스크는 선택사항입니다. 원하는 순서대로 수행할 수 있습니다.

DNS 라우팅 정책 구성

클라이언트가 여러 리전에 있는 경우 해당 리전에서 VIP를 사용하여 리전 간 내부 애플리케이션 부하 분산기에 액세스해야 할 수 있습니다. 이 멀티 리전 설정은 지연 시간과 네트워크 전송 비용을 최소화해 줍니다. 이를 통해 리전 서비스 중단에 대한 복원력을 제공하는 DNS 기반의 전역 부하 분산 솔루션도 설정할 수 있습니다. 자세한 내용은 DNS 라우팅 정책 및 상태 점검 관리를 참조하세요.

gcloud

30초 TTL로 DNS 항목을 만들려면 gcloud dns record-sets create 명령어를 사용하세요.

gcloud dns record-sets create DNS_ENTRY --ttl="30" \
  --type="A" --zone="service-zone" \
  --routing-policy-type="GEO" \
  --routing-policy-data="REGION_A=gil7-forwarding-rule-a@global;REGION_B=gil7-forwarding-rule-b@global" \
  --enable-health-checking

다음을 바꿉니다.

  • DNS_ENTRY: 레코드 모음의 DNS 또는 도메인 이름

    예를 들면 service.example.com입니다.

  • REGION_AREGION_B: 부하 분산기를 구성한 리전

API

POST 요청을 ResourceRecordSets.create 메서드에 보내 DNS 레코드를 만듭니다. PROJECT_ID를 프로젝트 ID로 바꿉니다.

POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/SERVICE_ZONE/rrsets
{
  "name": "DNS_ENTRY",
  "type": "A",
  "ttl": 30,
  "routingPolicy": {
    "geo": {
      "items": [
        {
          "location": "REGION_A",
          "healthCheckedTargets": {
            "internalLoadBalancers": [
              {
                "loadBalancerType": "globalL7ilb",
                "ipAddress": "IP_ADDRESS",
                "port": "80",
                "ipProtocol": "tcp",
                "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
                "project": "PROJECT_ID"
              }
            ]
          }
        },
        {
          "location": "REGION_B",
          "healthCheckedTargets": {
            "internalLoadBalancers": [
              {
                "loadBalancerType": "globalL7ilb",
                "ipAddress": "IP_ADDRESS_B",
                "port": "80",
                "ipProtocol": "tcp",
                "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
                "project": "PROJECT_ID"
              }
            ]
          }
        }
      ]
    }
  }
}

클라이언트 HTTP 연결 유지 제한 시간 업데이트

이전 단계에서 만든 부하 분산기는 클라이언트 HTTP 연결 유지 제한 시간의 기본값으로 구성되었습니다.

클라이언트 HTTP 연결 유지 제한 시간을 업데이트하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. 수정할 부하 분산기의 이름을 클릭합니다.
  3. 수정을 클릭합니다.
  4. 프런트엔드 구성을 클릭합니다.
  5. 고급 기능을 펼칩니다. HTTP 연결 유지 제한 시간에 제한 시간 값을 입력합니다.
  6. 업데이트를 클릭합니다.
  7. 변경사항을 검토하려면 검토 및 완료를 클릭한 다음 업데이트를 클릭합니다.

gcloud

HTTP 부하 분산기의 경우 gcloud compute target-http-proxies update 명령어를 사용하여 대상 HTTP 프록시를 업데이트합니다.

    gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

HTTPS 부하 분산기의 경우 gcloud compute target-https-proxies update 명령어를 사용하여 대상 HTTPS 프록시를 업데이트합니다.

    gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

다음을 바꿉니다.

  • TARGET_HTTP_PROXY_NAME: 대상 HTTP 프록시의 이름입니다.
  • TARGET_HTTPS_PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.
  • HTTP_KEEP_ALIVE_TIMEOUT_SEC: HTTP 연결 유지 제한 시간 값은 5~600초 사이입니다.

이상점 감지 사용 설정

전역 백엔드 서비스에 이상점 감지를 사용 설정하여 비정상 서버리스 NEG를 식별하고 비정상 서버리스 NEG에 전송되는 요청 수를 줄일 수 있습니다.

다음 방법 중 하나를 사용하여 이상점 감지를 백엔드 서비스에 사용 설정합니다.

  • 5xx 시리즈 HTTP 상태 코드가 오류에 해당하는 consecutiveErrors 메서드(outlierDetection.consecutiveErrors)
  • 502, 503, 504 HTTP 상태 코드만 오류에 해당하는 consecutiveGatewayFailure 메서드(outlierDetection.consecutiveGatewayFailure)

다음 단계에 따라 기존 백엔드 서비스에 대한 이상점 감지를 사용 설정합니다. 이상점 감지를 사용 설정하더라도 일부 요청이 비정상 서비스로 전송되어 클라이언트에 5xx 상태 코드를 반환할 수 있습니다. 오류율을 더 줄이기 위해 이상점 감지 매개변수에 대해 보다 공격적인 값을 구성할 수 있습니다. 자세한 내용은 outlierDetection 필드를 참조하세요.

콘솔

  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. 백엔드 서비스를 수정할 부하 분산기의 이름을 클릭합니다.

  3. 부하 분산기 세부정보 페이지에서 수정을 클릭합니다.

  4. 리전 간 내부 애플리케이션 부하 분산기 수정 페이지에서 백엔드 구성을 클릭합니다.

  5. 백엔드 구성 페이지에서 수정하려는 백엔드 서비스에 대해 수정 을 클릭합니다.

  6. 아래로 스크롤하여 고급 구성 섹션을 펼칩니다.

  7. 이상점 감지 섹션에서 사용 설정 체크박스를 선택합니다.

  8. 수정을 클릭하여 이상점 감지를 구성합니다.

    다음 옵션이 이러한 값으로 구성되었는지 확인합니다.

    속성
    연속 오류 5
    간격 1000
    기본 제거 시간 30000
    최대 제거 비율 50
    연속 오류 시 시행 100

    이 예시에서는 이상점 감지 분석이 1초마다 실행됩니다. Envoy 프록시에서 수신하는 연속 HTTP 5xx 상태 코드 수가 5개 이상이면 30초 동안 해당 Envoy 프록시의 부하 분산 풀에서 백엔드 엔드포인트가 제거됩니다. 적용 비율이 100%로 설정되면 백엔드 서비스는 이상점 감지 분석이 실행될 때마다 해당 특정 Envoy 프록시의 부하 분산 풀에서 비정상 엔드포인트를 제거합니다. 제거 조건이 충족되면 부하 분산 풀에서 백엔드 엔드포인트의 최대 50%를 제거할 수 있습니다.

  9. 저장을 클릭합니다.

  10. 백엔드 서비스를 업데이트하려면 업데이트를 클릭합니다.

  11. 부하 분산기를 업데이트하려면 리전 간 내부 애플리케이션 부하 분산기 수정 페이지에서 업데이트를 클릭합니다.

gcloud

  1. 백엔드 서비스를 YAML 파일로 내보냅니다.

    gcloud compute backend-services export BACKEND_SERVICE_NAME \
      --destination=BACKEND_SERVICE_NAME.yaml --global
    

    BACKEND_SERVICE_NAME을 백엔드 서비스 이름으로 바꿉니다.

  2. outlierDetection 섹션에서 백엔드 서비스의 YAML 구성을 수정하여 다음 YAML 구성에 강조표시된 대로 이상점 감지 필드를 추가합니다.

    이 예시에서는 이상점 감지 분석이 1초마다 실행됩니다. Envoy 프록시에서 수신하는 연속 HTTP 5xx 상태 코드 수가 5개 이상이면 30초 동안 해당 Envoy 프록시의 부하 분산 풀에서 백엔드 엔드포인트가 제거됩니다. 적용 비율이 100%로 설정되면 백엔드 서비스는 이상점 감지 분석이 실행될 때마다 해당 특정 Envoy 프록시의 부하 분산 풀에서 비정상 엔드포인트를 제거합니다. 제거 조건이 충족되면 부하 분산 풀에서 백엔드 엔드포인트의 최대 50%를 제거할 수 있습니다.

    name: BACKEND_SERVICE_NAME
    backends:
    - balancingMode: UTILIZATION
      capacityScaler: 1.0
      group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/networkEndpointGroups/SERVERLESS_NEG_NAME
    - balancingMode: UTILIZATION
      capacityScaler: 1.0
      group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/networkEndpointGroups/SERVERLESS_NEG_NAME_2
    outlierDetection:
      baseEjectionTime:
        nanos: 0
        seconds: 30
      consecutiveErrors: 5
      enforcingConsecutiveErrors: 100
      interval:
        nanos: 0
        seconds: 1
      maxEjectionPercent: 50
    port: 80
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
    sessionAffinity: NONE
    timeoutSec: 30
    ...
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 백엔드 서비스 이름
    • PROJECT_ID: 프로젝트의 ID
    • REGION_AREGION_B: 부하 분산기가 구성된 리전
    • SERVERLESS_NEG_NAME: 첫 번째 서버리스 NEG의 이름
    • SERVERLESS_NEG_NAME_2: 두 번째 서버리스 NEG의 이름
  3. 최신 구성을 가져와서 백엔드 서비스를 업데이트합니다.

    gcloud compute backend-services import BACKEND_SERVICE_NAME \
      --source=BACKEND_SERVICE_NAME.yaml --global
    

    백엔드 서비스에 이상점 감지가 사용 설정되었습니다.

다음 단계