Diferencia entre targetPort y puerto en kubernetes Definición del servicio
(2)
Estoy tratando de explorar los servicios de kubernetes. Cuando leo la definición del servicio, descubrí que hay targetPort y que el puerto está especificando 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 el puerto y el puerto de destino en la definición del servicio kubernetes? ¿Alguien puede aclarar la confusión?
Servicio: Esto dirige el tráfico a un pod.
TargetPort: este es el puerto real en el que se ejecuta su aplicación en el contenedor.
Puerto: algunas veces su aplicación dentro del contenedor sirve diferentes servicios en un puerto diferente. Por ejemplo: la aplicación real puede ejecutar 8080 y las comprobaciones de estado de esta aplicación pueden ejecutarse en el puerto 8089 del contenedor. Entonces, si aciertas el 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.
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 presiona my-service: 8089, el tráfico se enruta al 8080 del contenedor (targetPort). Del mismo modo, si presiona my-service: 8443, se redirige al 8085 del contenedor (targetPort).
Pero este myservice: 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. En eso puede usar nodePort.
En el ejemplo anterior, puede acceder al servicio desde fuera del clúster (Cartero o cualquier otro 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 antes del 10.10.20.20:30475,10.10.20.20:31261,10.10.20.20:30013
Puerto : Puerto es el número de puerto que hace que un servicio sea visible para otros servicios que se ejecutan dentro del mismo clúster K8. En otras palabras, en caso de que un servicio quiera invocar otro servicio que se ejecute dentro del mismo clúster de Kubernetes, podrá hacerlo utilizando el puerto especificado contra "puerto" en el archivo de especificaciones del servicio.
Puerto de destino : el puerto de destino es el puerto en el POD donde se ejecuta el servicio.
Nodeport : el puerto de nodo es el puerto en el que se puede acceder al servicio desde usuarios externos utilizando Kube-Proxy. Eche un vistazo a la siguiente especificación que define un servicio de muestra:
apiVersion: v1
kind: Service
metadata:
name: test-service
spec:
ports:
- port: 8080
targetPort: 8170
nodePort: 33333
protocol: TCP
selector:
component: test-service-app
Preste atención a algunos de los siguientes en las especificaciones anteriores:
El puerto es 8080, lo que representa que otros servicios del clúster pueden acceder al servicio de prueba en el puerto 8080. El puerto de destino es 8170, que representa que el servicio de prueba se está ejecutando realmente en el puerto 8170 en pods. El puerto de nodo es 33333, que representa esa prueba. Se puede acceder al servicio a través de kube-proxy en el puerto 33333.