kubectl port-forward

Przekierowuje lokalny port na port poda/usługi w klastrze.

kubectl port-forward tuneluje ruch z portu na Twojej maszynie prosto do poda albo usługi (Service) w klastrze Kubernetes, bez wystawiania czegokolwiek na świat. Innymi słowy: aplikacja siedzi sobie w klastrze, do którego nie masz dostępu z przeglądarki, a Ty mówisz „przekieruj mi localhost:8080 na port tej bazy danych” i debugujesz tak, jakby działała lokalnie. To Twój podręczny tunel do gadania z czymś, co normalnie jest schowane za siecią klastra — idealne do testów, podglądania panelu admina albo połączenia z bazą bez ceregieli z ingressem.

Składnia i najważniejsze opcje

Podstawowa forma to kubectl port-forward TYPE/NAME LOCAL_PORT:REMOTE_PORT, gdzie TYPE to pod, service, deployment albo replicaset.

  • LOCAL_PORT:REMOTE_PORT — port lokalny i docelowy. Możesz pominąć lokalny (:5000), wtedy kubectl wylosuje wolny port.
  • --address — adresy nasłuchu, po przecinku. Domyślnie localhost; daj 0.0.0.0, żeby wpuścić ruch z innych maszyn w sieci.
  • --pod-running-timeout — jak długo czekać, aż pod wstanie (np. 2m). Domyślnie 1m0s.
  • -n, --namespace — przestrzeń nazw, w której szuka zasobu. Bez tego leci do default.
  • --context — który klaster/kontekst z kubeconfig użyć.
  • -v — poziom logowania (np. -v=6), przydatne gdy tunel sypie błędami.

Przykłady użycia

  • kubectl port-forward pod/mypod 8080:80 — wystawia port 80 z poda mypod na Twój localhost:8080.
  • kubectl port-forward service/postgres 5432:5432 -n db — tuneluje do usługi postgres w namespace db (kubectl sam wybierze pasujący pod).
  • kubectl port-forward deployment/api :3000 — przekierowuje port 3000 deploymentu, a port lokalny zostaje wylosowany (zobaczysz go w wypisanym komunikacie).
  • kubectl port-forward --address 0.0.0.0 pod/mypod 8888:5000 — nasłuch na wszystkich interfejsach, żeby kolega z sieci też się podłączył.
  • kubectl port-forward pod/mypod 8080:80 8443:443 — dwa porty naraz w jednym poleceniu.

Częste błędy i pułapki

Polecenie blokuje terminal — działa tak długo, jak je trzymasz; zamkniesz okno albo ubijesz proces (Ctrl+C) i tunel pada. To nie demon, to żywa sesja. Drugi klasyk: port-forward działa tylko po TCP, UDP nie przepuści (np. DNS na 53/udp odpadnie). Jak pod się zrestartuje albo padnie, tunel zrywa się bez ostrzeżenia i trzeba odpalić od nowa. Uważaj też na --address 0.0.0.0 — otwierasz dostęp do wnętrza klastra dla każdego w sieci, więc nie zostawiaj tego na produkcji „na chwilę”. I sprawdzaj namespace: jak zapomnisz -n, dostaniesz pods not found, bo szuka w default.

Powiązane komendy: kubectl get pods, kubectl logs, kubectl exec, kubectl proxy oraz kubectl describe.