Un Kubernetes Service
puede tener un targetPort
y port
en la definición del servicio:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
¿Cuál es la diferencia entre port
y targetPort
?
service
kubernetes
port
Jacob
fuente
fuente
Respuestas:
Servicio: Esto dirige el tráfico a un pod.
TargetPort: este es el puerto real en el que se ejecuta su aplicación dentro del contenedor.
Puerto: algunas veces su aplicación dentro del contenedor sirve diferentes servicios en un puerto diferente.
Ejemplo: la aplicación real puede ejecutarse
8080
y las comprobaciones de estado de esta aplicación pueden ejecutarse en el8089
puerto del contenedor. Entonces, si ingresa al servicio sin puerto, no sabe a qué puerto del contenedor debe redirigir la solicitud. El servicio debe tener una asignación para que pueda llegar al puerto específico del contenedor.si golpea el
my-service:8089
tráfico se enruta al8080
contenedor (targetPort). Del mismo modo, si golpeamy-service:8443
, se redirige al8085
contenedor (targetPort). Pero estomyservice:8089
es interno al clúster de kubernetes y se puede usar cuando una aplicación quiere comunicarse con otra aplicación. Entonces, para acceder al servicio desde fuera del clúster, alguien necesita exponer el puerto en la máquina host en la que se está ejecutando kubernetes para que el tráfico se redirija a un puerto del contenedor. Esto esnode port
(puerto expuesto en la máquina host). En el ejemplo anterior, puede acceder al servicio desde fuera del clúster (Cartero o cualquier otro cliente de descanso) mediantehost_ip:nodePort
Digamos que su máquina host IP es
10.10.20.20
que puede golpear los protocolos HTTP, las métricas, los servicios de salud10.10.20.20:30475
,10.10.20.20:31261
,10.10.20.20:30013
.Ediciones: Editado según el comentario de Raedwald .
fuente
port
ytargetPort
ser diferente? Entonces, por ejemplo, mirando suhealth
ejemplo, ¿por qué hacer el enport
8443
lugar de8085
? Básicamente, ¿por qué hay dos parámetros en lugar de exponer todos lostargetPort
s en el servicio?Me ayuda a pensar en las cosas desde la perspectiva del servicio .
nodePort
: El puerto en el nodo donde entrará el tráfico externoport
: El puerto de este serviciotargetPort
El puerto de destino en los pod para reenviar el tráfico aEl tráfico entra
nodePort
, reenvía alport
servicio que luego se dirige atargetPort
la (s) cápsula (s).Vale la pena enfatizar más
nodePort
sobre el tráfico externo. Otros pods en el clúster que pueden necesitar acceder al servicio simplemente lo usaránport
, nonodePort
porque es solo acceso interno al servicio.También vale la pena señalar que si
targetPort
no se establece, el valor predeterminado será el mismoport
. Por ejemplo,80:80
para el puerto de servicio80
dirigido al puerto de contenedores80
.fuente
port
ytargetPort
. Realmente despejaste la confusión.La respuesta dada anteriormente por @Manikanta P es correcta. Sin embargo, la explicación de "Puerto" podría ser un poco confusa en la primera lectura. Explicaré con un ejemplo:
Considere una aplicación web con su contenido estático (portada, imágenes, etc.) alojado por httpd y el contenido dinámico (por ejemplo, respuesta a solicitudes, etc.) alojado por tomcat. El
80
servidor web (o el contenido estático) es atendido por httpd en el puerto mientras que el servidor de aplicaciones (o el contenido dinámico) es servido por tomcat en el puerto8080
.Lo que quiere un desarrollador: el usuario debe poder acceder al servidor web desde afuera PERO no al servidor de aplicaciones desde afuera
Solución: El tipo de servicio del servidor web en su service.yml será NodePort, mientras que el tipo de servicio del servidor de aplicaciones en su service.yml será ClusterIP.
Código para el servidor web service.yml:
Código para el service.yml de Appserver
También
httpd.conf
tenga en cuenta que, en el archivo del servidor web, escribiremos la IP que redirige la solicitud de un usuario al servidor de aplicaciones. Esta IP será:host_IP:5050
.¿Qué está pasando exactamente aquí? Un usuario escribe
hostIP:30475
y ve la página del servidor web. Esto se debe a que httpd lo sirve en el puerto80
(targetport). Cuando un usuario hace clic en un botón, se realiza una solicitud. Esta solicitud se redirige al servidor de aplicaciones porque en elhttpd.conf
archivo,5050
se menciona el puerto y este es el puerto donde el contenedor del servidor de aplicaciones y el contenedor del servidor web se comunican internamente. Cuando el servidor de aplicaciones recibe la solicitud, puede atender la solicitud debido a que Tomcat se ejecuta dentro de él en el puerto8080
.fuente
httpd.conf
en "porque en el archivo httpd.conf, se menciona el puerto 5050"Esta respuesta es para hacer referencia a la documentación de Kubernetes además de las otras respuestas:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/ :
fuente
En pocas palabras
nodeport:
Escucha la solicitud externa en todos los nodos de trabajo en nodeip: port y reenvía la solicitud al puerto.port:
Puerto de servicio de clúster interno para contenedor y escucha la solicitud entrante desde el puerto de nodo y reenvía a targetPort.targetPort:
Reciba la solicitud del puerto y reenvíela al contenedor pod (puerto) donde está escuchando. incluso si no especifica esto, se le asignarán por defecto los mismos números de puerto que el puerto.fuente
El "puerto de destino" es el puerto en el que se está ejecutando su contenedor.
Puerto: el puerto redirige el tráfico al contenedor desde el servicio.
Exponiendo el despliegue
NodePort: es el puerto que permite que el servicio acceda externamente.
Espero que esto responda.
fuente
si el contenedor escucha en el puerto 9376, entonces targetPort : 9376
si un servicio escucha en el puerto 80, entonces el puerto : 80
Entonces la configuración de los puertos de servicio se ve a continuación
Finalmente, solicitud recibida en el puerto del servicio y enviada al puerto TargetPort del pod.
fuente