Jak działa kubectl port-forward?

kubectl wyświetla polecenia, które można wykorzystać do utworzenia Usługi dla aplikacji i przypisuje adres IP, aby uzyskać do niej dostęp z Internetu.

O ile rozumiem, aby uzyskać dostęp do dowolnej aplikacji w klastrze Kubernetes, powinien istnieć zasób usług, który powinien mieć adres IP dostępny z sieci zewnętrznej.

Ale w przypadku port-forward Jak kubectl tworzy połączenie z aplikacją bez adresu IP, który jest dostępny zewnętrznie?

Author: KnowHoper, 2018-07-22

4 answers

kubectl port-forward tworzy określone żądanie API Kubernetes . Oznacza to, że uruchomiony system potrzebuje dostępu do serwera API, a każdy ruch będzie tunelowany przez jedno połączenie HTTP.

Posiadanie tego jest naprawdę przydatne do debugowania (jeśli jeden konkretny pod działa, możesz połączyć się z nim bezpośrednio; w środowisku mikroserwisu możesz rozmawiać z usługą zaplecza, której w przeciwnym razie nie ujawniłbyś), ale nie jest to alternatywa dla konfigurowania obiektów usługowych. Kiedy pracowałem z kubectl port-forward to było wyraźnie wolniejsze niż łączenie się z pod za pośrednictwem usługi, i znalazłem widziałem polecenie po prostu zatrzymać po kilku minutach. Ponownie nie są to duże problemy z debugowaniem, ale nie są tym, czego bym chciał w systemie produkcyjnym.

 63
Author: David Maze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-23 10:15:17

Na początek warto zauważyć i pamiętać, że w Kubernetes, każda pod otrzymuje swój własny adres ip od 10.* , który jest użyteczny tylko w klastrze. Teraz port-forward Funkcja kubectl po prostu tuneluje ruch z określonego portu na lokalnej maszynie hosta do określonego portu na podanej pod. Serwer API staje się w pewnym sensie tymczasową bramą między portem lokalnym a klastrem Kubernetes.

kubectl port-forward przekazywanie połączeń do portu lokalnego do portu na kapsule. W porównaniu do kubectl proxy, kubectl port-forward jest bardziej ogólny, ponieważ może przesyłać ruch TCP, podczas gdy {[7] } może przesyłać tylko ruch HTTP.

kubectl port-forward jest przydatny do testowania/debugowania, dzięki czemu możesz uzyskać dostęp do usługi lokalnie bez jej ujawniania.

Poniżej znajduje się nazwa pod i przekieruje to port 6379 do localhost:6379.

kubectl port-forward redis-master-765d459796-258hz 6379:6379 

Czyli to samo co

kubectl port-forward pods/redis-master-765d459796-258hz 6379:6379

Lub

kubectl port-forward deployment/redis-master 6379:6379 

Lub

kubectl port-forward rs/redis-master 6379:6379 

Lub

kubectl port-forward svc/redis-master 6379:6379

Tutaj jest też kilka small port forwarding example to access a database service (clusterip) without exposing it.

 76
Author: lvthillo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-27 07:15:38

Jeśli chcesz przesłać do innego portu w localhost. Try this

kubectl port-forward <pod-name> <locahost-port>:<pod-port>
kubectl port-forward sample-pod-sadasds-sxawdd 8090:6379

Powyższe polecenie przekazuje do localhost 8090 z pod 6379

 18
Author: Vihar Manchala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-22 14:10:30

Polecenie port-forward przekazuje jeden (lub więcej) lokalny port do pod.

To polecenie jest bardzo przydatne na przykład w niebieski / zielony wdrożenia, gdzie chcesz rozwiązać problem źle zachowujący się pod.

Aby pójść jeszcze dalej, możesz nawet przeprowadzić wstępne testy strąków, które Twoim zdaniem mogą być bardziej podatne na błędy bezpośrednio w potoku CI / CD w Jenkins, używając wielu warunków, deklaratywnego potoku.

Przykłady użycia:

Słuchaj na porcie 8888 lokalnie, przekierowanie do 5000 w pod

kubectl port-forward pod/mypod 8888:5000

Nasłuchuj na porcie 8888 na wszystkich adresach, przekierowując do 5000 w pod

kubectl port-forward --address 0.0.0.0 pod/mypod 8888:5000

Słuchaj na losowym porcie lokalnie, przekierowanie do 5000 w pod

kubectl port-forward pod/mypod :5000

Nasłuchuj na porcie 8888 na localhost i wybranym IP, przekierowując do 5000 w pod

kubectl port-forward --address localhost,10.19.21.23 pod/mypod 8888:5000

Nasłuchuj na portach 5000 i 6000 lokalnie, przesyłając dane do / z portów 5000 i 6000 W pod

kubectl port-forward pod/mypod 5000 6000

Posłuchaj porty 5000 i 6000 lokalnie, przesyłanie danych do / z portów 5000 i 6000 W pod wybranym przez wdrożenie

kubectl port-forward deployment/mydeployment 5000 6000

Nasłuchuj na portach 5000 i 6000 lokalnie, przesyłając dane do / z portów 5000 i 6000 W pod wybranym przez usługę

kubectl port-forward service/myservice 5000 6000
 6
Author: Skeptic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-04 09:23:04