kubernetes

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.