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ślnielocalhost; daj0.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ślnie1m0s.-n, --namespace— przestrzeń nazw, w której szuka zasobu. Bez tego leci dodefault.--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ójlocalhost: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.