Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

kubectl port-forward “connection refused”? 재시도 전 네 구간을 감사하세요

로컬 listener, API tunnel, 선택된 Pod, Pod 내부 process를 분리해 첫 실패 구간만 수정합니다.

원본 일러스트: local bind, API tunnel, 선택된 Pod와 remote listener의 네 구간 감사.
원본 일러스트: local bind, API tunnel, 선택된 Pod와 remote listener의 네 구간 감사. Watch at Ease

연결 거부는 하나의 장애가 아닙니다. 로컬 socket bind, API stream, 재시작 중인 Pod 또는 Pod 안 remote port listener가 각각 실패할 수 있습니다.

전체 command와 첫 error를 보존하고 네 구간을 순서대로 확인하세요. --address 0.0.0.0은 로컬 노출 범위만 바꾸며 Pod 안 listener를 만들지 않습니다.

command와 첫 실패 보존

context, namespace, target, mapping, version과 첫 refusal 전 출력을 기록합니다.

local bind 문제는 빈 port로 확인하고 forbidden이나 stream 문제는 RBAC부터 조사합니다.

선택된 Pod 증명

name, UID, node, start time, readiness, restart, deletion timestamp를 저장합니다.

rollout은 Forwarding 뒤 Pod를 종료할 수 있으므로 진단할 때 Running, Ready Pod를 직접 지정합니다.

remote port 해석

Service port, targetPort와 Pod runtime config를 대조합니다. Service 80이 Pod 8080일 수 있습니다.

selector와 EndpointSlice는 선택 근거일 뿐 listener 존재 증거가 아닙니다.

Pod 내부 listener 검증

승인된 read-only 방식으로 공유 namespace의 TCP listener, process와 protocol을 확인합니다.

listener가 없으면 app config나 startup dependency를 고치세요. local --address는 remote refusal을 고치지 못합니다.

한 번만 재시도

명시한 Pod에 새 forward를 만들고 protocol이 맞는 request와 같은 UID를 확인합니다.

local listener, API stream, Pod identity와 remote process가 모두 맞아야 완료입니다.

원본 일러스트: 오류 위치에 따라 local port, 권한, Pod 또는 listener 검사를 선택합니다.
원본 일러스트: 오류 위치에 따라 local port, 권한, Pod 또는 listener 검사를 선택합니다. Watch at Ease