외부 패스 스루 네트워크 부하 분산기 문제 해결

이 가이드에서는 Google Cloud 외부 패스 스루 네트워크 부하 분산기의 구성 문제를 해결하는 방법을 설명합니다. 문제를 조사하기 전에 다음 페이지를 숙지하시기 바랍니다.

네트워크 분석기의 일반적인 문제 해결

네트워크 분석기는 VPC 네트워크 구성을 자동으로 모니터링하고 최적화되지 않은 구성과 잘못된 구성을 모두 감지합니다. 네트워크 장애를 식별하고 근본 원인 정보를 제공하며 가능한 해결 방법을 제안합니다. 네트워크 분석기에서 자동으로 감지되는 여러 가지 잘못된 구성 시나리오에 대해 알아보려면 네트워크 분석기 문서의 부하 분산기 통계를 참조하세요.

네트워크 분석기는 Network Intelligence Center의 일부로 Google Cloud 콘솔에서 사용할 수 있습니다.

네트워크 분석기로 이동

설정 문제 해결

백엔드에 호환되지 않는 분산 모드가 있음

부하 분산기를 만들 때 다음 오류가 표시될 수 있습니다.

Validation failed for instance group INSTANCE_GROUP:

backend services 1 and 2 point to the same instance group
but the backends have incompatible balancing_mode. Values should be the same.

이는 서로 다른 두 부하 분산기에서 동일한 백엔드를 사용하려고 하는데 백엔드에 호환 가능한 분산 모드가 없는 경우에 발생합니다.

자세한 내용은 다음을 참조하세요.

일반적인 연결 문제 해결

외부 패스 스루 네트워크 부하 분산기에 연결할 수 없는 경우 다음과 같은 일반적인 문제를 확인합니다.

  • 방화벽 규칙을 확인합니다.

    • 백엔드 VM에 대한 상태 확인을 허용하도록 인그레스 허용 방화벽 규칙이 정의되어 있는지 확인합니다.
    • 인그레스 허용 방화벽 규칙이 클라이언트에서 백엔드 VM으로 들어오는 트래픽을 허용하는지 확인합니다.
    • 트래픽이 부하 분산기에서 사용 중인 포트의 백엔드 VM에 도달할 수 있도록 관련 방화벽 규칙이 있는지 확인합니다.
    • 방화벽 규칙의 대상 태그를 사용하는 경우 부하 분산기의 백엔드 VM에 올바르게 태그가 지정되어 있는지 확인합니다.

    외부 패스 스루 네트워크 부하 분산기에 필요한 방화벽 규칙을 구성하는 방법을 알아보려면 방화벽 규칙 구성을 참조하세요.

  • Google 게스트 에이전트가 백엔드 VM에서 실행 중인지 확인합니다. 정상 백엔드 VM에 연결할 수 있지만 부하 분산기에 연결할 수 없는 경우 이는 VM의 Google 게스트 환경(이전의 Windows 게스트 환경 또는 Linux 게스트 환경)이 실행되고 있지 않거나 메타데이터 서버(metadata.google.internal, 169.254.169.254)와 통신할 수 없는 것일 수 있습니다.

    다음 사항을 확인하세요.

    • Google 게스트 에이전트가 백엔드 VM에 설치되어 실행되고 있는지 확인합니다.
    • 백엔드 VM의 게스트 운영체제 내 방화벽 규칙(iptables 또는 Windows 방화벽)이 메타데이터 서버에 대한 액세스를 차단하지 않는지 확인합니다.
  • 백엔드 VM이 부하 분산기로 전송된 패킷을 허용하는지 확인합니다. 각 백엔드 VM은 부하 분산기로 전송된 패킷을 허용하도록 구성되어야 합니다. 즉, 백엔드 VM에 전달되는 패킷의 대상 위치는 부하 분산기의 IP 주소입니다. 대부분의 경우 이 경로는 로컬 경로로 수행됩니다.

    Google Cloud 이미지에서 생성된 VM의 경우 게스트 에이전트는 부하 분산기의 IP 주소에 대한 로컬 경로를 설치합니다. Container-Optimized OS를 기반으로 하는 Google Kubernetes Engine 인스턴스는 대신 iptables를 사용하여 이를 구현합니다.

    Linux 백엔드 VM에서는 다음 명령어를 실행하여 로컬 경로가 있는지 확인할 수 있습니다. LOAD_BALANCER_IP를 부하 분산기의 IP 주소로 바꿉니다.

    sudo ip route list table local | grep LOAD_BALANCER_IP
    
  • 백엔드 VM에서 서비스 IP 주소 및 포트 결합을 확인합니다. 외부 패스 스루 네트워크 부하 분산기로 전송된 패킷은 부하 분산기 자체의 대상 IP 주소와 함께 백엔드 VM에 도착합니다. 이 유형의 부하 분산기는 프록시가 아니며 예상되는 동작입니다.

    포트에서 리슨하는 서비스를 확인하려면 다음 명령어를 실행합니다.

    netstat -nl | grep ':PORT'
    

    백엔드 VM에서 실행되는 소프트웨어는 다음 작업을 수행해야 합니다.

    • 부하 분산기의 IP 주소 또는 모든 IP 주소(0.0.0.0 또는 ::)에서 리슨(바인딩)
    • 부하 분산기의 전달 규칙에 포함된 포트에서 리슨(바인딩)

    이를 테스트하려면 SSH 또는 RDP를 사용하여 백엔드 VM에 연결합니다. 그런 다음 curl, telnet 또는 비슷한 도구를 사용하여 다음 테스트를 수행합니다.

    • 백엔드 VM 자체의 내부 IP 주소(127.0.0.1 또는 localhost)를 사용하여 서비스에 연결을 시도합니다.
    • 부하 분산기 전달 규칙의 IP 주소를 사용하여 서비스에 연결을 시도합니다.
  • 상태 확인 트래픽이 백엔드 VM에 도달할 수 있는지 확인합니다. 상태 확인 트래픽이 백엔드 VM에 도달하는지 확인하려면 상태 확인 로깅을 사용 설정하고 성공적인 로그 항목을 검색합니다.

공유 VPC 문제 해결

공유 VPC를 사용 중이며 특정 서브넷에 새 외부 패스 스루 네트워크 부하 분산기를 만들 수 없는 경우 조직 정책이 원인일 수 있습니다. 조직 정책에서 허용되는 서브넷 목록에 서브넷을 추가하거나 조직 관리자에게 문의하세요. 자세한 내용은 constraints/compute.restrictSharedVpcSubnetworks 제약조건을 참조하세요.

장애 조치 문제 해결

외부 패스 스루 네트워크 부하 분산기의 장애 조치를 구성한 경우 다음 단계를 수행하여 구성을 확인합니다.

  • 하나 이상의 장애 조치 백엔드를 지정했는지 확인합니다.
  • 장애 조치 정책 설정을 확인합니다.
  • 활성 풀의 구성원이 작동하는 방식과 Google Cloud에서 장애 조치와 장애 복구를 수행하는 시기를 이해해야 합니다. 다음을 수행하여 부하 분산기 구성을 검사합니다.

    • Google Cloud 콘솔을 사용하여 각 백엔드 인스턴스 그룹에서 정상 백엔드 VM 수를 확인합니다. Google Cloud 콘솔에는 활성 풀에 있는 VM도 표시됩니다.

    • 부하 분산기의 장애 조치율이 적절하게 설정되어 있는지 확인합니다. 예를 들어 기본 VM이 10개이고 장애 조치율이 0.2로 설정되어 있는 경우 이는 Google Cloud에서 정상 상태인 기본 VM이 2개 미만(10 × 0.2 = 2)일 때 장애 조치를 수행한다는 의미입니다. 장애 조치율 0.0은 특별한 의미가 있습니다. Google Cloud는 정상 상태인 기본 VM이 없을 때 장애 조치를 수행합니다.

발생할 수 있는 다른 문제는 다음과 같습니다.

  • 활성 풀이 기본 백엔드와 장애 복구 백엔드를 오락가락하며 바꿉니다.

    관리형 인스턴스 그룹을 자동 확장 및 장애 조치와 함께 사용하면 활성 풀이 기본 백엔드와 장애 조치 백엔드 사이에서 장애 조치 및 장애 복구를 반복할 수 있습니다. 이 설정이 도움이 되는 배포도 있으므로 Google Cloud는 관리형 인스턴스 그룹에 장애 조치를 구성하지 못하게 하지 않습니다.

  • 연결 드레이닝을 중지하면 작동하지 않습니다.

    백엔드 서비스가 프로토콜 TCP로 설정된 경우에만 연결 드레이닝을 사용 중지합니다.

    연결 드레이닝이 사용 중지된 상태에서 UDP를 사용하여 백엔드 서비스를 만드는 경우 다음 오류 메시지가 표시됩니다.

    gcloud compute backend-services create my-failover-bs
      --load-balancing-scheme external \
      --health-checks-region us-central1 \
      --health-checks my-tcp-health-check \
      --region us-central1 \
      --no-connection-drain-on-failover \
      --drop-traffic-if-unhealthy \
      --failover-ratio 0.5 \
      --protocol UDP
    ERROR: (gcloud.compute.backend-services.create) Invalid value for
    [--protocol]: can only specify --connection-drain-on-failover if the protocol is
    TCP.
    
  • 기존 연결이 장애 조치 또는 장애 복구 중에 종료됩니다.

    백엔드 서비스의 장애 조치 정책을 수정합니다. 장애 조치 시 연결 드레이닝이 사용 설정되었는지 확인합니다.

로깅 문제 해결

외부 패스 스루 네트워크 부하 분산기의 로깅을 구성하면 다음 문제가 발생할 수 있습니다.

  • 샘플링된 패킷이 RTT를 캡처하는 데 부족하면 바이트 값과 같은 RTT 측정이 일부 로그에서 누락될 수 있습니다. 소량 연결에서 발생할 가능성이 높습니다.
  • RTT 값은 TCP 흐름에서만 사용할 수 있습니다.
  • 필부 패킷은 페이로드 없이 전송됩니다. 헤더 전용 패킷이 샘플링되면 바이트 값은 0입니다.