Un Kubernetes Service
peut avoir un targetPort
et port
dans la définition de service:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Quelle est la différence entre port
et targetPort
?
service
kubernetes
port
Jacob
la source
la source
Réponses:
Service: Ceci dirige le trafic vers un pod.
TargetPort: il s'agit du port réel sur lequel votre application s'exécute à l'intérieur du conteneur.
Port: Parfois, votre application à l'intérieur du conteneur sert différents services sur un port différent.
Exemple: l' application réelle peut s'exécuter
8080
et les vérifications de l'état de cette application peuvent s'exécuter sur le8089
port du conteneur. Donc, si vous frappez le service sans port, il ne sait pas vers quel port du conteneur il doit rediriger la demande. Le service doit avoir un mappage pour pouvoir atteindre le port spécifique du conteneur.si vous atteignez le,
my-service:8089
le trafic est acheminé vers8080
le conteneur (targetPort). De même, si vous frappez,my-service:8443
il est redirigé vers8085
du conteneur (targetPort). Mais celamyservice:8089
est interne au cluster kubernetes et peut être utilisé lorsqu'une application souhaite communiquer avec une autre application. Donc, pour accéder au service depuis l'extérieur du cluster, quelqu'un doit exposer le port sur la machine hôte sur laquelle Kubernetes s'exécute afin que le trafic soit redirigé vers un port du conteneur. C'estnode port
(port exposé sur la machine hôte). À partir de l'exemple ci-dessus, vous pouvez accéder au service depuis l'extérieur du cluster (Postman ou tout autre client de repos) enhost_ip:nodePort
Dites votre machine hôte ip est que
10.10.20.20
vous pouvez frapper les http, les mesures, les services de santé10.10.20.20:30475
,10.10.20.20:31261
,10.10.20.20:30013
.Modifications: Modifié selon le commentaire de Raedwald .
la source
port
ettargetPort
d'être différent? Donc, par exemple en regardant votrehealth
exemple, pourquoi faire laport
8443
place de8085
? Fondamentalement, pourquoi y a-t-il deux paramètres au lieu de simplement exposer tous lestargetPort
s sur le service?Cela m'aide à penser les choses du point de vue du service .
nodePort
: Le port sur le nœud où le trafic externe entreraport
: Le port de ce servicetargetPort
Le port cible du ou des pod (s) vers lequel transférer le traficLe trafic entre en marche
nodePort
, redirige versport
le service qui est ensuite acheminé verstargetPort
le ou les pod (s).Cela vaut la peine de mettre davantage l'accent
nodePort
sur le trafic externe. Les autres pods du cluster qui peuvent avoir besoin d'accéder au service utiliseront simplementport
, pasnodePort
car il s'agit d'un accès interne uniquement au service.Il convient également de noter que s'il
targetPort
n'est pas défini, il aura par défaut la même valeur queport
. Par exemple,80:80
pour le port de service80
ciblant le port de conteneurs80
.la source
port
ettargetPort
. Vous avez vraiment dissipé la confusion.La réponse donnée ci-dessus par @Manikanta P est correcte. Cependant, l'explication de «Port» peut être un peu floue en première lecture. J'expliquerai avec un exemple:
Considérons une application Web avec son contenu statique (page d'accueil, images, etc.) hébergé par httpd et le contenu dynamique (par exemple, réponse aux demandes, etc.) hébergé par tomcat. Le serveur Web (ou le contenu statique) est servi par httpd au port
80
tandis qu'Appserver (ou le contenu dynamique) est servi par tomcat au port8080
.Ce que veut un développeur: l'utilisateur doit pouvoir accéder au serveur Web de l'extérieur MAIS pas au serveur d'applications de l'extérieur.
Solution: Le type de service de Webserver dans son service.yml sera NodePort tandis que le type de service d'Appserver dans son service.yml sera ClusterIP.
Code pour le service.yml du serveur Web:
Code pour le service.yml d'Appserver
Notez également que dans le
httpd.conf
fichier du serveur Web, nous écrirons l'adresse IP qui redirige la demande d'un utilisateur vers le serveur d'applications. Cette adresse IP sera:host_IP:5050
.Que se passe-t-il exactement ici? Un utilisateur écrit
hostIP:30475
et voit la page du serveur Web. C'est parce qu'il est servi par httpd au port80
(targetport). Lorsqu'un utilisateur clique sur un bouton, une demande est effectuée. Cette requête est redirigée vers l'Appserver car dans lehttpd.conf
fichier, le port5050
est mentionné et c'est le port où le conteneur d'Appserver et le conteneur de Webserver communiquent en interne. Lorsque le serveur d'applications reçoit la demande, il est capable de servir la demande car Tomcat s'exécute à l'intérieur au port8080
.la source
httpd.conf
"car dans le fichier httpd.conf, le port 5050 est mentionné"Cette réponse consiste à référencer la documentation de Kubernetes en plus des autres réponses:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
la source
En résumé
nodeport:
Écoute la demande externe sur tous les nœuds de travail sur nodeip: port et transfère la demande au port.port:
Port de service de cluster interne pour le conteneur et écoute les demandes entrantes du nodeport et les transfère vers targetPort.targetPort:
Recevez la demande du port et la transmet au pod conteneur (port) où il écoute. même si vous ne spécifiez pas, cela obtiendra par défaut les mêmes numéros de port que le port.la source
«Port cible» est le port sur lequel votre conteneur s'exécute.
Port: le port redirige le trafic vers le conteneur depuis le service.
Exposer le déploiement
NodePort: est le port qui permet au service d'accéder au.
J'espère que cela répond.
la source
si le conteneur écoute sur le port 9376, alors targetPort : 9376
si un service écoute sur le port 80, alors port : 80
Ensuite, la configuration des ports de service ressemble à ci-dessous
Enfin, la demande est reçue sur le port du service et transmise sur le targetPort du pod.
la source