이 페이지에서는 VPC 기반 Google Kubernetes Engine(GKE) 비공개 클러스터의 Cloud NAT 패킷 손실 문제를 해결하는 방법을 보여줍니다.
VPC 기반 GKE 비공개 클러스터의 노드 VM에는 외부 IP 주소가 없습니다. 즉, 인터넷의 클라이언트가 노드의 IP 주소에 연결할 수 없습니다. 비공개 클러스터가 공개 연결되도록 Cloud NAT를 사용하여 외부 IP 주소와 포트를 할당할 수 있습니다.
노드 VM에 Cloud NAT의 외부 포트 및 IP 주소 할당이 부족해지면 패킷이 삭제됩니다. 이를 방지하기 위해서는 아웃바운드 패킷 비율을 줄이거나 사용 가능한 Cloud NAT 소스 IP 주소 및 포트의 할당을 늘릴 수 있습니다. 다음 섹션에서는 GKE 비공개 클러스터의 컨텍스트에서 Cloud NAT로부터 패킷 손실을 진단하고 문제 해결하는 방법을 설명합니다.
패킷 손실 진단
다음 섹션에서는 Cloud Logging을 사용하여 손실된 패킷을 로깅하고 Cloud Monitoring을 사용하여 패킷 손실 원인을 진단하는 방법을 설명합니다.
손실된 패킷 로깅
Cloud Logging에서 다음 쿼리를 사용하여 손실된 패킷을 로깅할 수 있습니다.
resource.type="nat_gateway" resource.labels.region=REGION resource.labels.gateway_name=GATEWAY_NAME jsonPayload.allocation_status="DROPPED"
다음을 바꿉니다.
REGION
: 클러스터가 있는 리전의 이름입니다.GATEWAY_NAME
: Cloud NAT 게이트웨이의 이름입니다.
이 명령어는 Cloud NAT 게이트웨이에서 삭제된 모든 패킷의 목록을 반환하지만 원인을 식별하지 않습니다.
패킷 손실 원인 모니터링
손실된 패킷의 원인을 식별하려면 Cloud Monitoring에서 측정항목 관찰자를 쿼리합니다. 패킷은 세 가지 이유 중 하나로 삭제됩니다.
OUT_OF_RESOURCES
ENDPOINT_INDEPENDENT_CONFLICT
NAT_ALLOCATION_FAILED
OUT_OF_RESOURCES
또는 ENDPOINT_ALLOCATION_FAILED
오류 코드로 인해 삭제된 패킷을 식별하려면 다음 쿼리를 사용합니다.
fetch nat_gateway metric 'router.googleapis.com/nat/dropped_sent_packets_count' filter (resource.gateway_name == GATEWAY_NAME) align rate(1m) every 1m group_by [metric.reason], [value_dropped_sent_packets_count_aggregate: aggregate(value.dropped_sent_packets_count)]
이러한 이유로 인해 삭제된 패킷을 발견한 경우 문제 해결 도움말을 보려면 리소스 부족으로 인해 패킷이 삭제됨 및 엔드포인트 독립 충돌로 인해 패킷이 삭제됨을 참조하세요.
NAT_ALLOCATION_FAILED
오류 코드로 인해 삭제된 패킷을 확인하려면 다음 쿼리를 사용합니다.
fetch nat_gateway metric 'router.googleapis.com/nat/nat_allocation_failed' group_by 1m, [value_nat_allocation_failed_count_true: count_true(value.nat_allocation_failed)] every 1m
이 이유로 인해 삭제된 패킷을 확인한 경우 더 많은 IP 주소 할당 필요를 참조하세요.
Cloud NAT 구성 조사
이전 쿼리에서 빈 결과를 반환하고 GKE 포드가 외부 IP 주소와 통신할 수 없으면 다음 표를 사용하여 구성 문제를 해결합니다.
구성 | 문제 해결 |
서브넷의 기본 IP 주소 범위에만 적용되도록 구성된 Cloud NAT |
Cloud NAT가 서브넷의 기본 IP 주소 범위에 대해서만 구성된 경우 클러스터에서 외부 IP 주소로 전송된 패킷에 소스 노드 IP 주소가 있어야 합니다. 이 Cloud NAT 구성에 대한 설명은 다음과 같습니다.
|
포드 IP에 사용된 서브넷의 보조 IP 주소 범위에만 적용되도록 구성된 Cloud NAT |
Cloud NAT가 클러스터의 포드 IP에 사용되는 서브넷의 보조 IP 주소 범위에 대해서만 구성된 경우 클러스터에서 외부 IP 주소로 전송된 패킷에 소스 포드 IP 주소가 있어야 합니다. 이 Cloud NAT 구성에 대한 설명은 다음과 같습니다.
|
패킷 손실 줄이기
패킷 손실 원인을 진단했으면 다음 권장사항에 따라 향후 문제가 재발할 가능성을 줄여보세요.
동적 포트 할당을 사용하고 VM당 최대 포트 수를 늘리도록 Cloud NAT 게이트웨이를 구성합니다.
정적 포트 할당을 사용하는 경우 VM당 최소 포트 수를 늘립니다.
애플리케이션의 아웃바운드 패킷 비율을 줄입니다. 애플리케이션이 같은 대상 IP 주소와 포트에 대한 아웃바운드 연결을 여러 번 수행하면 Cloud NAT가 할당된 NAT 소스 주소 및 소스 포트 튜플 수를 사용하여 대상에 수행할 수 있는 모든 연결을 빠르게 소비할 수 있습니다.
대상에 대한 동시 연결 수 제한을 포함하여 Cloud NAT에서 NAT 소스 주소와 소스 포트를 사용하여 연결을 수행하는 방법에 대한 자세한 내용은 포트 및 연결을 참조하세요.
애플리케이션에서 아웃바운드 연결 비율을 줄이려면 열린 연결을 재사용합니다. 연결을 재사용하는 일반적인 방법에는 연결 풀링, HTTP/2와 같은 프로토콜을 사용하는 연결 다중화 또는 여러 요청에 재사용되는 영구 연결 설정 등이 있습니다. 자세한 내용은 포트 및 연결을 참조하세요.
다음 단계
추가 지원이 필요하면 Cloud Customer Care에 문의하세요.