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?
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.
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.
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
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
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