내부 TCP/UDP 부하 분산 문제 해결

이 가이드에서는 Google Cloud 내부 TCP/UDP 부하 분산기의 구성 문제를 해결하는 방법을 설명합니다.

개요

이 가이드에서 다루는 문제의 유형은 다음과 같습니다.

  • 일반 연결 문제
  • 백엔드 장애 조치 문제
  • 다음 홉 문제로 부하 분산기 사용

시작하기 전에

문제를 조사하기 전에 다음 페이지를 숙지하시기 바랍니다.

일반 연결:

장애 조치:

다음 홉:

일반 연결 문제해결

  • 증상: 다른 리전의 VM 클라이언트에서 내부 TCP/UDP 부하 분산기에 연결할 수 없습니다.
  • 이유: 전역 액세스가 사용 설정되지 않았습니다.

내부 TCP/UDP 부하 분산기에 연결할 수 없는 경우 다음 문제를 확인하세요.

  • 백엔드 VM에 대한 상태 확인을 허용하도록 인그레스 허용 방화벽 규칙이 정의되어 있는지 확인합니다.
  • 인그레스 허용 방화벽 규칙이 클라이언트에서 백엔드 VM으로 들어오는 트래픽을 허용하는지 확인합니다.
  • 부하 분산기에 연결하는 클라이언트가 부하 분산기와 동일한 리전에 있는지 확인합니다. 클라이언트가 다른 리전에 있는 경우 전역 액세스가 사용 설정되어 있는지 확인합니다.
  • 상태 확인 트래픽이 백엔드 VM에 도달하는지 확인하려면 상태 확인 로깅을 사용 설정하고 성공적인 로그 항목을 검색합니다.

  • 증상: 내부 TCP/UDP 부하 분산기를 통해 서비스에 연결할 수 없지만 직접 백엔드 VM에 연결할 수 있습니다.

  • 원인: 게스트 환경이 실행 중이 아니거나 메타데이터 서버(metadata.google.internal, 169.254.169.254)와 통신할 수 없습니다.

다음 사항을 확인하세요.

  • 백엔드 VM에 게스트 환경이 설치되어 있고 실행 중인지 확인합니다.
  • 백엔드 VM의 게스트 운영체제 내 방화벽 규칙(iptables, Windows 방화벽)이 메타데이터 서버에 대한 액세스를 차단하지 않는지 확인합니다.
  • 백엔드 VM의 서비스가 부하 분산기 전달 규칙의 IP 주소를 리슨하는지 확인합니다.

공유 VPC 문제 해결

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

장애 조치 문제 해결

내부 TCP/UDP 부하 분산기의 장애 조치를 구성한 경우 발생할 수 있는 문제는 다음 섹션에서 설명합니다.

연결

  • 하나 이상의 장애 조치 백엔드를 지정했는지 확인합니다.
  • 장애 조치 정책 설정을 확인합니다.
    • 장애 조치율
    • 모든 백엔드 VM이 비정상적인 경우 트래픽 차단
    • 장애 조치 시 연결 드레이닝 사용 중지

관리형 인스턴스 그룹 및 장애 조치 관련 문제

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

장애 조치 그룹의 연결 드레이닝 제한 사용 중지

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

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

gcloud compute backend-services create my-failover-bs
  --global-health-checks \
  --load-balancing-scheme internal
  --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.

트래픽이 예기치 않은 백엔드 VM으로 전송됨

클라이언트 VM이 부하 분산기의 백엔드 VM을 겸하는 경우 부하 분산기 전달 규칙의 IP 주소로 전송된 연결에 항상 백엔드 VM 자체에서 응답하는 것이 정상적인 동작입니다. 자세한 내용은 단일 클라이언트에서 연결 테스트부하 분산된 VM에서 요청 전송을 참조하세요.

클라이언트 VM이 부하 분산기의 백엔드 VM이 아닌 경우:

  • 단일 클라이언트 요청의 경우 단일 클라이언트에서 연결 테스트를 참조하여 이 방법의 제한사항을 이해합니다.

  • 인그레스가 방화벽 규칙이 상태 확인을 허용하도록 구성했는지 확인합니다.

  • 장애 조치 구성의 경우 활성 풀의 구성원이 작동하는 방식과 Google Cloud가 장애 조치 및 장애 복구를 수행하는 시기를 이해해야 합니다. 부하 분산기의 구성을 검사하세요.

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

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

기존 연결이 장애 조치 또는 장애 복구 중에 종료됨

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

다음 홉으로 사용되는 부하 분산기의 문제 해결

커스텀 정적 경로의 다음 홉으로 내부 TCP/UDP 부하 분산기를 설정하면 다음과 같은 문제가 발생할 수 있습니다.

연결

  • 백엔드를 핑할 수 없는 경우 내부 TCP/UDP 부하 분산기가 다음 홉으로 설정된 경로는 TCP 및 UDP 트래픽에만 지원됩니다. ICMP 등의 다른 프로토콜 패킷은 부하 분산기에서 무시됩니다. 자세한 내용은 TCP, UDP, 기타 프로토콜 트래픽을 참조하세요.

  • 내부 TCP/UDP 부하 분산기를 커스텀 정적 경로의 다음 홉으로 사용할 때 모든 TCP 및 UDP 트래픽은 부하 분산기의 내부 백엔드 서비스에 구성된 프로토콜과 부하 분산기의 내부 전달 규칙에 구성된 포트에 관계없이 부하 분산기의 정상 백엔드 VM에 전달됩니다.

  • 커스텀 정적 경로의 다음 홉을 통해 백엔드 VM에 전달되어야 하는 트래픽 소스를 올바르게 식별하는 인그레스 허용 방화벽 규칙을 만들었는지 확인합니다. 백엔드 VM에 도달하는 패킷은 커스텀 정적 경로를 통해 전달되는 경우에도 소스 IP 주소를 보존합니다.

목적지 범위 값이 잘못됨

커스텀 정적 경로의 목적지 범위는 VPC 네트워크의 어느 서브넷 경로보다도 구체적일 수 없습니다. 커스텀 정적 경로를 만들 때 다음 오류 메시지가 표시되는 경우:

Invalid value for field 'resource.destRange': [ROUTE_DESTINATION].
[ROUTE_DESTINATION] hides the address space of the network .... Cannot change
the routing of packets destined for the network.
  • 서브넷 경로와 정확히 일치하거나 더 구체적인(마스크가 더 긴) 목적지를 사용하여 커스텀 정적 경로를 만들 수 없습니다. 자세한 내용은 적용 여부 및 순서를 참조하세요.

  • 패킷이 예상치 못한 목적지로 이동하는 경우 VPC 네트워크에서 목적지가 더 구체적인 다른 경로를 삭제합니다. Google Cloud 경로 선택을 이해하려면 라우팅 순서를 검토하세요.

네트워크 태그가 지원되지 않음

다음 홉이 내부 TCP/UDP 부하 분산기인 경우 커스텀 정적 경로에 네트워크 태그를 할당할 수 없습니다. 예를 들면 다음 gcloud 명령어는 아래 나열된 오류 메시지를 생성합니다.

$ gcloud compute routes create example-route \
--destination-range=0.0.0.0/0 \
--next-hop-ilb=internal-lb-forwarding-rule \
--tags='my_tag'

ERROR: (gcloud.compute.routes.create) Could not fetch resource:
 - Invalid value for field 'resource.tags': ''. Tag is not supported for routes
 with next hop ilb.

다음 단계