¿Qué son los servicios de Kubernetes?
Un servicio de Kubernetes es una desvinculación lógica para un grupo de pods implementados en un clúster que comparten una misma función.
Dado que los pods son efímeros, un servicio permite asignar un nombre y una dirección IP única (clusterIP) a un grupo de pods, que proporcionan funciones específicas (servicios web, procesamiento de imágenes, etc.). Mientras el servicio ejecute esa dirección IP, no cambiará. Los servicios también definen políticas para acceder a ellos.

Estado de Kubernetes

Kubernetes Up and Running
En Kubernetes, ¿cuál es la diferencia entre un servicio y una implementación?
En Kubernetes, una implementación es un método para iniciar un pod con aplicaciones contenedorizadas y garantizar que siempre haya en ejecución el número necesario de réplicas en el clúster.
Por otro lado, un servicio es responsable de mostrar una interfaz para controlar esos pods, lo que permite el acceso a través de la red desde dentro del clúster o entre los procesos externos y el servicio.
¿Qué componentes intervienen en un servicio de Kubernetes?
Los servicios de Kubernetes conectan un conjunto de pods a un nombre de servicio y una dirección IP desvinculados. Los servicios proporcionan detección y enrutamiento entre pods. Por ejemplo, los servicios conectan el front-end de una aplicación a su back-end, cada uno de los cuales se ejecuta en implementaciones independientes en un clúster. Los servicios utilizan etiquetas y selectores para crear correspondencias entre los pods y otras aplicaciones. Estos son los atributos principales de un servicio de Kubernetes:
- Un selector de etiquetas que localiza los pods
- La dirección IP de tipo clusterIP y el número de puerto asignado
- Las definiciones de los puertos
- La asignación opcional de puertos entrantes a un puerto de destino
Los servicios se pueden definir sin selectores de pods. Por ejemplo, para apuntar un servicio hacia otro servicio en un espacio de nombres o clúster diferente.
¿Qué tipos de servicios de Kubernetes existen?
- ClusterIP. Muestra un servicio al que solo se puede acceder desde dentro del clúster.
- NodePort. Muestra un servicio a través de un puerto estático en la IP de cada nodo.
- LoadBalancer. Muestra el servicio a través del balanceador de carga del proveedor de nube.
- ExternalName. Devuelve un valor para el registro CNAME a fin de asignar un servicio a un campo «externalName» predefinido.
¿Qué es el servicio ClusterIP de Kubernetes?
ClusterIP es el tipo de servicio predeterminado, que se utiliza para mostrar un servicio en una dirección IP interna al clúster. El acceso solo se permite desde dentro del clúster.
¿Qué es un servicio desatendido de Kubernetes?
Los servicios que no necesitan balanceo de carga y solo muestran una única IP pueden crear un servicio desatendido especificando «none» como clusterIP.
Los servicios desatendidos se pueden definir mediante selectores, en cuyo caso se crean registros de terminales en la API que modifican el DNS para que devuelva las direcciones que apuntan a los pods que muestran el servicio. Los servicios desatendidos sin selectores no crean registros de terminales. El sistema DNS configura el registro CNAME o un registro para los terminales con el mismo nombre que el servicio.
¿Qué es un servicio NodePort de Kubernetes?
Los NodePort son puertos abiertos en cada nodo del clúster. Kubernetes enrutará hacia el servicio el tráfico que entre en un NodePort, aunque el servicio no se esté ejecutando en ese nodo. NodePort está diseñado como base para otros métodos de entrada de mayor nivel, como los balanceadores de carga, y es útil durante el desarrollo.
¿Qué es un servicio ExternalName de Kubernetes?
Los servicios ExternalName se parecen a otros servicios de Kubernetes; sin embargo, en lugar de acceder a ellos a través de una dirección tipo clusterIP, devuelve un registro CNAME con un valor que se define en el parámetro externalName: al crear el servicio.
¿Qué es un servicio LoadBalancer de Kubernetes?
En el caso de los clústeres que se ejecutan en proveedores de nube pública como AWS o Azure, crear un servicio LoadBalancer proporciona un equivalente a un servicio de tipo clusterIP, y lo extiende a un balanceador de carga externo específico del proveedor de nube. Kubernetes creará automáticamente el balanceador de carga, proporcionará reglas de cortafuegos si es necesario y rellenará los datos del servicio con la dirección IP externa que el proveedor de nube le asigne.
¿Cómo funcionan los servicios de Kubernetes?
Los servicios simplemente apuntan a los pods mediante etiquetas. Puesto que los servicios no son específicos de un nodo, un servicio puede apuntar a un pod independientemente de dónde se ejecute en el clúster en cualquier momento dado. Al mostrar una dirección IP de servicio, así como un nombre de servicio DNS, se puede acceder a la aplicación mediante cualquier método, siempre que exista el servicio.
¿Cómo se define un servicio de Kubernetes?
Los servicios se definen en YAML, igual que todos los objetos de Kubernetes. Supongamos que ha implementado pods en los que se ejecuta un servicio back-end para procesar datos procedentes de una aplicación web front-end. Para mostrar un servicio llamado «service-backend» en la implementación «deployment-backend», debe utilizar lo siguiente:
apiVersion: v1
kind: Service
metadata:
name: service-backend
spec:
ports:
- port: 4000
protocol: TCP
targetPort: 333
selector:
run: deployment-backend
type: ClusterIP
Se creará el servicio «service-backend» y cualquier pod del clúster podrá acceder a él en su puerto 333 a través de http://service-backend:4000 o en la dirección IP del clúster mediante el puerto 4000.
Los servicios de Kubernetes también se pueden crear mediante el comando «kubectl expose», que no requiere un archivo YAML. Se puede crear el mismo servicio con el comando siguiente:
kubectl expose deployment deployment-backend - - port=333- - target-port=4000 - - name=service-backend
¿Cómo se accede a un servicio de Kubernetes?
Hay dos formas de detectar un servicio de Kubernetes:
DNS (la más habitual): el método DNS es el recomendado para detectar servicios. Para utilizar este método, primero se debe instalar un servidor DNS en el clúster. El servidor DNS supervisa la API de Kubernetes y, cuando se crea un servicio nuevo, su nombre pasa a estar disponible para facilitar que las aplicaciones que lo soliciten lo resuelvan.
Variable ENV: este método depende de que el kubelet añada variables de entorno para cada servicio activo de cada nodo en el que se ejecute un pod.
Productos y soluciones relacionados
Laboratorios: modernización de aplicaciones
Migre sus aplicaciones a la nube en cuestión de semanas.
Tanzu for Kubernetes Operations
Establezca la base para una infraestructura de contenedores multinube moderna.
Tanzu Application Platform
Obtenga una experiencia de desarrollo multinube superior en Kubernetes.