Kubernetes Service
może mieć targetPort
i port
w definicji usługi:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Jaka jest różnica między port
i targetPort
?
service
kubernetes
port
Jakub
źródło
źródło
Odpowiedzi:
Usługa: kieruje ruch do poda.
TargetPort: jest to rzeczywisty port, na którym aplikacja działa w kontenerze.
Port: czasami aplikacja w kontenerze obsługuje różne usługi na innym porcie.
Przykład: Rzeczywista aplikacja może działać,
8080
a kontrole jej kondycji mogą działać na8089
porcie kontenera. Więc jeśli trafisz na usługę bez portu, nie wie, do którego portu kontenera ma przekierować żądanie. Usługa musi mieć mapowanie, aby mogła trafić do określonego portu kontenera.jeśli trafisz,
my-service:8089
ruch jest kierowany do8080
kontenera (targetPort). Podobnie, jeśli trafiszmy-service:8443
, zostanie przekierowany do8085
kontenera (targetPort). Jest to jednakmyservice:8089
wewnętrzne dla klastra kubernetes i może być używane, gdy jedna aplikacja chce komunikować się z inną aplikacją. Aby więc trafić do usługi spoza klastra, ktoś musi ujawnić port na maszynie hosta, na którym działa kubernetes, aby ruch był przekierowywany do portu kontenera. To jestnode port
(port widoczny na komputerze głównym). Z powyższego przykładu możesz trafić na usługę spoza klastra (Postman lub dowolny klient reszta) przezhost_ip:nodePort
Powiedzieć urządzenie IP hosta to
10.10.20.20
można trafić http metryki, służby zdrowia przez10.10.20.20:30475
,10.10.20.20:31261
,10.10.20.20:30013
.Zmiany: Zredagowane zgodnie z komentarzem Raedwalda .
źródło
port
itargetPort
bycia innym? Na przykład patrząc na twójhealth
przykład, po co robićport
8443
zamiast8085
? Zasadniczo, dlaczego istnieją dwa parametry zamiast po prostu ujawniać wszystkietargetPort
s w usłudze?Pomaga mi myśleć o rzeczach z perspektywy usługi .
nodePort
: Port w węźle, do którego będzie przychodził ruch zewnętrznyport
: Port tej usługitargetPort
Port docelowy w pod (-ach), do którego ma być przekazywany ruchRuch przychodzi
nodePort
, jest przekazywanyport
do usługi, która następnie kieruje dotargetPort
kapsuły (-ów).Warto podkreślić bardziej, że dotyczy
nodePort
to ruchu zewnętrznego. Inne zasobniki w klastrze, które mogą potrzebować dostępu do usługi, będą po prostu używaćport
,nodePort
a nie tylko wewnętrznego dostępu do usługi.Warto również zauważyć, że jeśli
targetPort
nie jest ustawiony, domyślnie będzie miał taką samą wartość jakport
. Np.80:80
Dla portu serwisowego80
kierującego port kontenerowy80
.źródło
port
itargetPort
. Naprawdę usunąłeś zamieszanie.Odpowiedź udzielona powyżej przez @Manikanta P. jest prawidłowa. Jednak wyjaśnienie terminu „port” może być nieco niejasne przy pierwszym czytaniu. Wyjaśnię na przykładzie:
Rozważ aplikację internetową z jej statyczną zawartością (strona główna, obrazy itp.) Hostowaną przez httpd i dynamiczną zawartością (np. Odpowiedź na żądania itp.) Hostowaną przez tomcat. Serwer sieci Web (lub zawartość statyczna) jest obsługiwany przez
80
protokół httpd na porcie, podczas gdy serwer aplikacji (lub zawartość dynamiczna) jest obsługiwany przez tomcat na porcie8080
.Czego chce programista: Użytkownik powinien mieć dostęp do serwera internetowego z zewnątrz, ALE nie do serwera aplikacji z zewnątrz.
Rozwiązanie: Typ usługi serwera sieci Web w jego service.yml to NodePort, a typ usługi Appserver w jego service.yml to ClusterIP.
Kod dla service.yml serwera WWW:
Kod dla service.yml serwera Appserver
Należy również zauważyć, że w
httpd.conf
pliku serwera WWW zapiszemy adres IP, który przekierowuje żądanie użytkownika do serwera aplikacji. Ten IP będzie:host_IP:5050
.Co dokładnie się tutaj dzieje? Użytkownik pisze
hostIP:30475
i widzi stronę serwera WWW. Dzieje się tak, ponieważ jest obsługiwany przez httpd na porcie80
( port docelowy). Gdy użytkownik klika przycisk, wysyłane jest żądanie. To żądanie jest przekierowywane do serwera aplikacji, ponieważ whttpd.conf
pliku5050
jest wymieniony port i jest to port, na którym kontener serwera Appserver i kontener serwera WWW komunikują się wewnętrznie. Gdy appserver otrzyma żądanie, może je obsłużyć, ponieważ w porcie działa w nim Tomcat8080
.źródło
httpd.conf
„ponieważ w pliku httpd.conf wspomniany jest port 5050”Ta odpowiedź ma na celu odwołanie się do dokumentacji Kubernetes oprócz innych odpowiedzi:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
źródło
W pigułce
nodeport:
Nasłuchuje żądania zewnętrznego na wszystkich węzłach roboczych w nodeip: port i przekazuje żądanie do portu.port:
Wewnętrzny port usługi klastra dla kontenera i nasłuchuje przychodzących żądań z nodeport i przekazuje do targetPort.targetPort:
Odbierz żądanie z portu i przekaż je do kontenera (portu), gdzie nasłuchuje. nawet jeśli nie określisz tego, domyślnie otrzyma te same numery portów, co port.źródło
„Port docelowy” to port, na którym działa kontener.
Port: port przekierowuje ruch do kontenera z usługi.
Ujawnianie wdrożenia
NodePort: to port, który umożliwia usłudze dostęp do zewnętrznego.
Mam nadzieję, że to odpowiada.
źródło
jeśli kontener nasłuchuje na porcie 9376 , wówczas targetPort : 9376
jeśli usługa nasłuchuje na porcie 80, to port : 80
Następnie konfiguracja portów usług wygląda jak poniżej
Na koniec żądanie odebrane do portu usługi i przekazane do portu docelowego poda .
źródło