テクノロジー · 実用ガイド

kubectl port-forward の「connection refused」—再試行前に4区間を監査

ローカル listener、API tunnel、選択された Pod、Pod 内 process を分け、最初に失敗した区間だけを直します。

オリジナルイラスト:local bind、API tunnel、選択 Pod、remote listener の4区間監査。
オリジナルイラスト:local bind、API tunnel、選択 Pod、remote listener の4区間監査。 Watch at Ease

接続拒否は一種類ではありません。local socket の bind、API stream、再起動中の Pod、または Pod 内の remote port listener が失敗点になり得ます。

完全な command と最初の error を保存し、4区間を順に確認します。--address 0.0.0.0 は local 公開範囲を変えるだけで、Pod 内 listener は作りません。

command と最初の failure を保存

context、namespace、target、mapping、version、最初の refusal 前の全出力を記録します。

local bind failure は空き port で確認し、forbidden や stream error は RBAC を先に確認します。

選択された Pod を証明

name、UID、node、start time、readiness、restart、deletion timestamp を保存します。

rollout 中は Forwarding 後に終了し得るため、診断では 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 を直します。local --address は remote refusal を修復しません。

一度だけ再試行

明示した Pod へ新しく forward し、正しい protocol の request と同じ UID を確認します。

完了条件は local listener、API stream、Pod identity、remote process の全一致です。

オリジナルイラスト:error の位置から local port、権限、Pod、listener の確認を選ぶ。
オリジナルイラスト:error の位置から local port、権限、Pod、listener の確認を選ぶ。 Watch at Ease