Te doy la bienvenida a nuestra página web, en este sitio hallarás la solucíon de lo que buscas.
Solución:
Servicio: Esto dirige el tráfico a un grupo.
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 se puede ejecutar 8080
y las comprobaciones de estado de esta aplicación se pueden ejecutar en 8089
puerto del contenedor. Entonces, si accede al servicio sin puerto, no sabe a qué puerto del contenedor debe redirigir la solicitud. El servicio debe tener un mapeo para que pueda llegar al puerto específico del contenedor.
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- name: http
nodePort: 30475
port: 8089
protocol: TCP
targetPort: 8080
- name: metrics
nodePort: 31261
port: 5555
protocol: TCP
targetPort: 5555
- name: health
nodePort: 30013
port: 8443
protocol: TCP
targetPort: 8085
si golpeas el my-service:8089
el tráfico se encamina a 8080
del contenedor (targetPort). Del mismo modo, si aciertas my-service:8443
luego se redirige a 8085
del contenedor (targetPort). Pero esto myservice:8089
es interno al clúster de Kubernetes y se puede usar cuando una aplicación desea comunicarse con otra aplicación. Entonces, para acceder al servicio desde fuera del clúster, alguien debe 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. Este es node port
(puerto expuesto en la máquina host). En el ejemplo anterior, puede acceder al servicio desde fuera del clúster (Postman o cualquier resto-cliente) mediante host_ip:nodePort
Digamos que la ip de su máquina host es 10.10.20.20
puede acceder a http, métricas, servicios de salud por 10.10.20.20:30475
, 10.10.20.20:31261
, 10.10.20.20:30013
.
Ediciones: Editado según el comentario de Raedwald.
Me ayuda a pensar 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 (s) para reenviar el tráfico a
El tráfico entra nodePort
, reenvía a port
en el servicio que luego se dirige a targetPort
en las vainas.
Vale la pena enfatizar más que nodePort
es para tráfico externo. Otros pods del clúster que puedan necesitar acceder al servicio solo usarán port
, no nodePort
ya que es solo acceso interno al servicio.
También vale la pena señalar que si targetPort
no está configurado, por defecto tendrá el mismo valor que port
. P.ej 80:80
para puerto de servicio 80
puerto de contenedores de destino 80
.
La respuesta dada arriba por @Manikanta P es correcta. Sin embargo, la explicación de “Puerto” puede resultar un poco confusa en la primera lectura. Te lo explicaré con un ejemplo:
Considere una aplicación web con su static contenido (portada, imágenes, etc.) alojado por httpd y el contenido dinámico (por ejemplo, respuesta a solicitudes, etc.) alojado por tomcat. El servidor web (o el static contenido) es servido por httpd en el puerto 80
mientras que el servidor de aplicaciones (o el contenido dinámico) es servido por tomcat en el puerto 8080
.
Lo que quiere un desarrollador: el usuario debe poder acceder al servidor web desde fuera, PERO no al servidor de aplicaciones desde fuera.
Solución: El tipo de servicio de Webserver en su service.yml será NodePort mientras que el tipo de servicio de Appserver en su service.yml será ClusterIP.
Código para service.yml del servidor web:
spec:
selector:
app: Webserver
type: NodePort // written to make this service accessible from outside.
ports:
- nodePort: 30475 // To access from outside, type :30475 in browser.
port: 5050 // (ignore for now, I will explain below).
protocol: TCP
targetPort: 80 // port where httpd runs inside the webserver pod.
Código para el service.yml del servidor de aplicaciones
spec:
selector:
app: appserver
type: ClusterIP // written to make this service NOT accessible from outside.
ports:
- port: 5050 // port to access this container internally
protocol: TCP
targetPort: 8080 // port where tomcat runs inside the appserver pod.
También tenga en cuenta que en el httpd.conf
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 está siendo atendido por httpd en el puerto. 80
(puerto de destino). Cuando un usuario hace clic en un botón, se realiza una solicitud. Esta solicitud se redirige al servidor de aplicaciones porque en httpd.conf
archivo, el puerto 5050
se menciona y este es el puerto donde el contenedor de Appserver 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 puerto. 8080
.
Valoraciones y comentarios
Puedes corroborar nuestra faena poniendo un comentario y valorándolo te estamos agradecidos.