ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Cloud NAT][운영] first-request latency 경고 뒤 min ports per VM과 max ports per VM을 어떤 순서로 조정해야 하나
    기타개발지식/풀스택개발 2026. 7. 25. 09:14

    IT 리서치 노트

    [Cloud NAT][운영] first-request latency 경고 뒤 min ports per VM과 max ports per VM을 어떤 순서로 조정해야 하나

    Cloud NAT에서 first-request latency 경고가 보이면 많은 팀이 max ports per VM부터 올린다. 하지만 2026년 7월 24일 KST 기준 Google Cloud 공식 문서를 다시 보면 dynamic port allocation은 minimum ports per VM에서 시작해 최대값까지 늘어나는 구조이고, port_usage와 OUT_OF_RESOURCES 같은 지표는 다른 질문을 던진다. 이 글은 first-request latency 경고 뒤 min ports per VM과 max ports per VM을 어떤 순서로 조정해야 하는지 정리한 것이다.

    1. 개요

    결론부터 말하면 first-request latency 경고 뒤에는 max ports per VM을 바로 올리기보다, 먼저 현재 경고가 시작점 부족인지 확장 상한 부족인지 나눠야 한다. 평소 port_usage가 높고 burst 초반부터 지연이 생기면 min ports per VM을 먼저 검토하고, 평소는 괜찮다가 특정 VM만 상한 근처에서 튀면 max ports per VM을 검토하는 편이 맞다.

    또 packet drop이나 nat_allocation_failed가 동반되면 포트 튜닝만으로 끝나지 않을 수 있다. 이때는 NAT IP 추가나 포트 사용 축소까지 같이 검토해야 한다.

    2. 어디서 실제로 막히는가

    운영에서 가장 흔한 오해는 first-request latency를 모두 '포트가 부족하다'로 단순화하는 것이다. 실제로는 세 가지가 섞인다. 첫째, minimum ports per VM이 너무 낮아 burst 초반에 매번 확장 동작이 먼저 일어난다. 둘째, maximum ports per VM이 낮아 특정 VM이 급증 시 상한에 부딪힌다. 셋째, 포트 자체보다 NAT IP나 endpoint-independent mapping 제약 때문에 tuple 풀이 부족하다.

    Cloud NAT 문서는 dynamic port allocation이 minimum ports에서 시작해 필요 시 두 배씩 늘어난다고 설명한다. 따라서 처음 몇 초의 연결 지연을 줄이고 싶은데 시작점이 너무 낮다면 max만 올려도 체감 개선이 약할 수 있다. 반대로 burst 시점의 ceiling이 낮다면 min만 올려도 평시 자원 사용량만 늘고 피크 문제는 남는다.

    또 troubleshooting 문서는 OUT_OF_RESOURCES와 nat_allocation_failed를 별도 실패 신호로 설명한다. 이 값들이 보이면 포트 재배치보다 NAT IP 추가나 포트 사용 축소가 먼저일 수 있다. port_usage 그래프와 packet drop 지표를 같이 안 보면 조치가 계속 엇나간다.

    • 증상: first-request latency 경고가 반복되는데 원인이 min 부족인지 max 부족인지 안 보인다.
    • 실패: max ports per VM부터 올리고 조치 효과를 metric으로 남기지 않는다.
    • 막힘: OUT_OF_RESOURCES와 일반 지연 경고를 같은 의미로 본다.
    • 누락: nat_allocation_failed, dropped_sent_packets_count, port_usage를 함께 기록하지 않는다.
    상태 먼저 볼 지표 의미
    burst 초반부터 지연 min ports 대비 평시 사용량 시작점 부족 가능성이 있다
    특정 VM만 피크에서 지연 VM별 port_usage 분포 상한 부족 가능성이 있다
    packet drop 동반 OUT_OF_RESOURCES, nat_allocation_failed 포트 외에 IP/tuple 확장도 검토해야 한다

    3. 실무에서 적용하는 순서

    가장 짧은 조정 순서는 다섯 단계다. 먼저 nat/port_usage와 VM별 분포를 본다. 두 번째로 dropped_sent_packets_count reason과 nat_allocation_failed를 본다. 세 번째로 시작점 부족이면 min ports per VM을, burst 상한 부족이면 max ports per VM을 검토한다. 네 번째로 실패 지표가 동반되면 NAT IP 추가나 포트 사용 축소를 같이 본다. 마지막으로 변경 뒤 동일 지표를 다시 기록한다.

    1. port_usage와 VM별 분포를 먼저 본다.
    2. packet drop과 allocation 실패를 같이 본다.
    3. 시작점 부족이면 min을 검토한다.
    4. 상한 부족이면 max를 검토한다.
    5. 변경 뒤 지표를 다시 기록한다.

    이 순서가 중요한 이유는 문서가 변경 영향도 다르게 설명하기 때문이다. dynamic port allocation에서 minimum이나 maximum을 늘리는 것은 기존 연결을 깨지 않지만, maximum을 줄이면 기존 연결이 즉시 끊길 수 있다. 따라서 조정 방향을 잘못 잡으면 지연은 해결하지 못하고 연결 안정성만 해칠 수 있다.

    또 port_usage가 높다고 해서 무조건 min을 크게 올릴 필요는 없다. 평소는 한산하고 특정 VM만 급증한다면 max를 열어 주는 쪽이 더 경제적일 수 있다. 반대로 모든 VM이 비슷하게 초반 지연을 겪는다면 시작점이 너무 낮은 구조일 가능성이 높다.

    실제 작업은 콘솔과 명령을 섞어 진행하는 편이 좋다. 먼저 콘솔에서 port_usage를 조회하고, VM별 분포를 확인하고, 현재 min/max 설정값을 복사해 메모에 저장한다. 그다음 monitoring에서 dropped_sent_packets_count와 nat_allocation_failed를 조회하고, 같은 시각의 로그나 경고 이벤트를 같이 기록한다. 이후에만 gcloud update 명령을 실행해 설정을 바꾸고, 변경 직후와 10분 뒤 지표를 다시 조회해 같은 메모 파일에 저장한다.

    • 콘솔에서 port_usage를 조회한다.
    • 현재 min/max 설정을 확인하고 복사해 저장한다.
    • dropped_sent_packets_count와 nat_allocation_failed를 조회한다.
    • gcloud update 명령을 실행하기 전 변경 전 값을 기록한다.
    • 변경 뒤 같은 지표와 로그를 다시 조회해 비교 저장한다.
    check nat/port_usage
    check dropped_sent_packets_count reason
    check nat_allocation_failed
    if burst starts cold on many VMs => review min_ports
    if a few VMs hit ceiling => review max_ports
    if tuple pool is insufficient => add NAT IPs or reduce port usage

    이미 destination fan-out persistence 글과 first-request latency 임계값 글이 경고 신호를 다뤘다면, 이번 글은 그 경고 뒤에 실제로 무엇을 바꿀지 정하는 remediation 규칙에 가깝다.

    4. 공식 문서와 예시 화면으로 확인하기

    첫 화면은 min ports와 max ports가 어떤 관계인지 다시 고정한다. Google Cloud 문서는 dynamic port allocation에서 최소 포트로 시작하고 포트가 부족해지면 최대값까지 늘린다고 설명한다.

    Cloud NAT 문서는 dynamic port allocation이 minimum ports에서 시작해 maximum ports까지 확장된다고 설명한다.
    Cloud NAT 문서는 dynamic port allocation이 minimum ports에서 시작해 maximum ports까지 확장된다고 설명한다.

    즉 first-request latency 경고가 보여도 바로 max 값만 올리는 것은 충분하지 않다. 현재 경고가 시작점 부족인지, 확장 상한 부족인지 먼저 나눠야 하기 때문이다.

    두 번째 자료는 경고를 어디서 읽는지 보여 준다. monitoring 문서는 nat/port_usage를 VM과 destination 관점의 핵심 지표로 제시한다.

    Cloud NAT monitoring 문서는 nat/port_usage 지표를 제공한다.
    Cloud NAT monitoring 문서는 nat/port_usage 지표를 제공한다.

    따라서 조정 전후 비교도 추상적인 체감이 아니라 port_usage와 같은 지표를 기준으로 남기는 편이 맞다. 경고가 튀는 시점과 VM별 사용량을 같이 봐야 min과 max 중 무엇을 건드릴지 갈린다.

    세 번째 화면은 port 부족이 실제 장애로 이어질 때의 문구다. troubleshooting 문서는 OUT_OF_RESOURCES와 dropped_sent_packets_count를 포트 부족 신호로 설명한다.

    Cloud NAT troubleshooting 문서는 OUT_OF_RESOURCES와 dropped_sent_packets_count를 포트 부족 신호로 설명한다.
    Cloud NAT troubleshooting 문서는 OUT_OF_RESOURCES와 dropped_sent_packets_count를 포트 부족 신호로 설명한다.

    여기서 중요한 점은 모든 지연 경고가 곧바로 포트 상한 부족을 의미하지는 않는다는 것이다. packet drop과 first-request latency는 관련은 있지만 같은 경고가 아니다.

    실무에서는 먼저 어떤 조치를 어떤 조건에서 택할지 표가 있어야 한다. min ports를 올릴지, max ports를 올릴지, NAT IP를 추가할지, 포트 사용 자체를 줄일지 질문을 분리해야 한다.

    first-request latency 경고 뒤 어떤 조건에서 min ports, max ports, NAT IP 추가를 고를지 정리한 표다.
    first-request latency 경고 뒤 어떤 조건에서 min ports, max ports, NAT IP 추가를 고를지 정리한 표다.

    이미 shared source tuple reuse와 first-request latency 임계값 글이 경고 기준을 다뤘다면, 이번 표는 경고 이후 어떤 조치 순서를 택할지 정리한 후속편이다.

    조정 순서를 문서화할 때는 실제 변경 명령도 같이 남겨 두는 편이 좋다. tune guide는 gcloud update에서 min과 max를 같이 조정하는 예시를 제공한다.

    Cloud NAT min/max ports를 같이 조정하는 gcloud 예시다.
    Cloud NAT min/max ports를 같이 조정하는 gcloud 예시다.

    이 예시를 release note에 그대로 붙이라는 뜻은 아니다. 어느 값을 언제 올렸는지와, 그 전후 metric snapshot을 같이 남겨 조치 효과를 설명하라는 뜻에 가깝다.

    마지막 자료는 실제 점검 순서다. first-request latency 경고를 봤을 때 값을 아무거나 키우지 않게 하려면 metric, packet drop, allocation 실패, 변경 영향 순서가 필요하다.

    first-request latency 경고 뒤 Cloud NAT 조치 순서를 정리한 운영 순서다.
    first-request latency 경고 뒤 Cloud NAT 조치 순서를 정리한 운영 순서다.

    이 순서를 쓰면 경고가 보인다는 이유만으로 max ports를 과하게 키워 다른 VM의 여유를 줄이는 실수를 줄일 수 있다. 반대로 시작점이 낮은데 상한만 올리는 헛조정도 줄어든다.

    5. 주의사항과 리스크

    첫 번째 리스크는 max ports만 올리고 시작점 부족을 방치하는 것이다. 두 번째 리스크는 OUT_OF_RESOURCES가 보이는데도 min/max만 계속 바꾸는 것이다. 세 번째 리스크는 포트 조정 전후의 지표를 남기지 않아 다음 incident 때 같은 논쟁을 반복하는 것이다.

    변경 기록에는 최소한 시각, min ports 값, max ports 값, nat/port_usage snapshot, dropped_sent_packets_count reason, nat_allocation_failed 여부를 같이 남기는 편이 좋다. 그래야 first-request latency 경고가 포트 설정 문제였는지, tuple pool 부족이었는지 나중에도 설명할 수 있다. 콘솔에서 본 값만 기억하지 말고 metric 조회 결과를 저장하고, 실행한 명령과 입력한 설정값과 변경 후 응답 시간까지 함께 기록하는 편이 안전하다.

    • 시작점 부족과 상한 부족은 다른 조치가 필요하다.
    • OUT_OF_RESOURCES는 NAT IP 또는 tuple 확장 검토 신호일 수 있다.
    • max를 줄이는 변경은 연결 안정성 영향이 더 크다.

    6. 결론

    first-request latency 경고 뒤 Cloud NAT 포트 값을 조정할 때는 min ports per VM과 max ports per VM을 같은 버튼으로 보지 말고, 시작점 부족인지 상한 부족인지 먼저 나눠야 한다. 그다음 packet drop과 allocation 실패 여부를 함께 보고, 필요하면 NAT IP 추가나 포트 사용 축소까지 포함한 조치로 이어가야 한다.

    • burst 초반 지연이면 min ports를 먼저 의심한다.
    • 특정 VM 피크 상한이면 max ports를 먼저 검토한다.
    • OUT_OF_RESOURCES가 보이면 포트 외 조치도 같이 본다.

    min/max ports를 조정하고도 nat_allocation_failed가 남는다면 다음 단계는 숫자를 더 만지는 일이 아니라 분기 판단이다. 후속 글인 NAT IP 추가와 port usage reduction을 어떤 순서로 실행할지 정리한 글에서 add-IP와 reduce-usage를 어떤 메트릭으로 자를지 이어서 볼 수 있다.

    7. 참고 링크

    1. https://docs.cloud.google.com/nat/docs/ports-and-addresses
    2. https://docs.cloud.google.com/nat/docs/tune-nat-configuration
    3. https://docs.cloud.google.com/nat/docs/troubleshooting
    4. https://docs.cloud.google.com/nat/docs/monitoring
Designed by Tistory.