이 페이지에서는 서비스, 인그레스 또는 게이트웨이 리소스를 사용하여 Google Kubernetes Engine(GKE) 클러스터의 부하 분산과 관련된 문제를 해결하는 방법을 설명합니다.
외부 인그레스에서 HTTP 502 오류 발생
외부 인그레스 리소스에서 HTTP 502 오류를 문제 해결하려면 다음 안내를 따르세요.
- 인그레스에서 참조되는 각 GKE 서비스와 연관된 각 백엔드 서비스에 대해 로그를 사용 설정합니다.
- 상태 세부정보를 사용하여 HTTP 502 응답의 원인을 식별합니다. 백엔드에서 시작된 HTTP 502 응답을 나타내는 상태 세부정보는 부하 분산기가 아니라 제공 상태의 포드 내에서 문제 해결이 필요합니다.
비관리형 인스턴스 그룹
외부 인그레스에 비관리형 인스턴스 그룹 백엔드가 사용되는 경우 외부 인그레스 리소스에 HTTP 502 오류가 발생할 수 있습니다. 이 문제는 다음 조건 중 모두가 충족될 때 발생합니다.
- 모든 노드 풀 간에 클러스터에 대량의 노드 수가 포함되어 있습니다.
- 인그레스에서 참조되는 하나 이상의 서비스에 대한 제공 상태의 포드가 단 몇 개의 노드에만 있습니다.
- 인그레스에서 참조되는 서비스에
externalTrafficPolicy: Local
이 사용됩니다.
외부 인그레스에 비관리형 인스턴스 그룹 백엔드가 사용되는지 확인하려면 다음을 수행합니다.
Trusted Cloud 콘솔에서 인그레스 페이지로 이동합니다.
외부 인그레스의 이름을 클릭합니다.
부하 분산기 이름을 클릭합니다. 부하 분산 세부정보 페이지가 표시됩니다.
백엔드 서비스 섹션의 테이블에서 외부 인그레스에 NEG 또는 인스턴스 그룹이 사용되는지 확인합니다.
이 문제를 해결하려면 다음 솔루션 중 하나를 사용하세요.
- VPC 기반 클러스터를 사용합니다.
- 외부 인그레스에서 참조되는 각 서비스에 대해
externalTrafficPolicy: Cluster
를 사용합니다. 이 솔루션을 사용하면 패킷 소스에서 원래 클라이언트 IP 주소가 손실됩니다. node.kubernetes.io/exclude-from-external-load-balancers=true
주석을 사용합니다. 외부 인그레스에서 참조하는 서비스 또는 클러스터의LoadBalancer
서비스에 대해 제공 상태의 포드를 실행하지 않는 노드 또는 노드 풀에 주석을 추가합니다.
부하 분산기 로그를 사용하여 문제 해결
내부 패스 스루 네트워크 부하 분산기 로그 및 외부 패스 스루 네트워크 부하 분산기 로그를 사용하여 부하 분산기 문제를 해결하고 부하 분산기에서 GKE 리소스로 전송되는 트래픽의 상관관계를 파악할 수 있습니다.
로그는 연결별로 집계되고 거의 실시간으로 내보내집니다. 로그는 인그레스 및 이그레스 트래픽 모두에 대해 LoadBalancer 서비스의 데이터 경로와 관련된 각 GKE 노드에 대해 생성됩니다. 로그 항목에는 다음과 같은 GKE 리소스의 추가 필드가 포함됩니다.
- 클러스터 이름
- 클러스터 위치
- 서비스 이름
- 서비스 네임스페이스
- 포드 이름
- 포드 네임스페이스
진단 도구를 사용하여 문제 해결
check-gke-ingress
진단 도구는 인그레스 리소스에 일반적인 구성 오류가 있는지 검사합니다. 다음과 같은 방법으로 check-gke-ingress
도구를 사용할 수 있습니다.
- 클러스터에서
gcpdiag
명령줄 도구를 실행합니다. 인그레스 결과가 확인 규칙gke/ERR/2023_004
섹션에 표시됩니다. - check-gke-ingress의 안내에 따라
check-gke-ingress
도구를 단독으로 사용하거나 kubectl 플러그인으로 사용합니다.