En Kubernetes, los servicios son un recurso fundamental que permite la comunicación entre diferentes componentes de una aplicación desplegada en un clúster. Los servicios proporcionan una forma estable y confiable de acceder a los pods, independientemente de su ciclo de vida. En esta sección, exploraremos los conceptos clave de los servicios en Kubernetes, sus tipos y cómo configurarlos.

Conceptos Clave

¿Qué es un Servicio?

Un servicio en Kubernetes es una abstracción que define un conjunto lógico de pods y una política para acceder a ellos. Los servicios permiten la comunicación entre diferentes partes de una aplicación, ya sea dentro del clúster o desde el exterior.

Selector

Un selector es una etiqueta que se utiliza para identificar los pods que forman parte del servicio. Los servicios utilizan selectores para dirigir el tráfico a los pods correctos.

Endpoints

Los endpoints son las direcciones IP y puertos de los pods que están asociados con un servicio. Kubernetes mantiene y actualiza automáticamente los endpoints a medida que los pods se crean o eliminan.

Tipos de Servicios

Kubernetes ofrece varios tipos de servicios, cada uno con un propósito específico:

  1. ClusterIP: Este es el tipo de servicio predeterminado. Proporciona una dirección IP interna accesible solo dentro del clúster.
  2. NodePort: Expone el servicio en un puerto específico de cada nodo del clúster, permitiendo el acceso externo.
  3. LoadBalancer: Proporciona una IP externa y balancea la carga entre los pods. Requiere soporte del proveedor de la nube.
  4. ExternalName: Mapea el servicio a un nombre DNS externo.

Tabla Comparativa de Tipos de Servicios

Tipo de Servicio Accesibilidad Uso Común
ClusterIP Interna Comunicación interna entre pods
NodePort Externa Acceso externo simple, pruebas locales
LoadBalancer Externa Balanceo de carga, aplicaciones en producción
ExternalName Externa Redirección a servicios externos

Creación de un Servicio

Ejemplo de Servicio ClusterIP

A continuación, se muestra un ejemplo de cómo crear un servicio de tipo ClusterIP en Kubernetes:

apiVersion: v1
kind: Service
metadata:
  name: my-clusterip-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Explicación del Código:

  • apiVersion: v1: Especifica la versión de la API de Kubernetes.
  • kind: Service: Define el tipo de recurso como un servicio.
  • metadata: Contiene información sobre el servicio, como su nombre.
  • spec: Define las especificaciones del servicio.
    • selector: Selecciona los pods con la etiqueta app: my-app.
    • ports: Define los puertos que el servicio expondrá. En este caso, el puerto 80 del servicio se redirige al puerto 8080 de los pods.

Ejemplo de Servicio NodePort

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30007

Explicación del Código:

  • type: NodePort: Define el tipo de servicio como NodePort.
  • nodePort: 30007: Especifica el puerto en el que el servicio estará disponible en cada nodo.

Ejercicio Práctico

Ejercicio 1: Crear un Servicio ClusterIP

  1. Crea un archivo YAML llamado clusterip-service.yaml.
  2. Define un servicio de tipo ClusterIP que seleccione los pods con la etiqueta app: my-app y exponga el puerto 80.

Solución:

apiVersion: v1
kind: Service
metadata:
  name: my-clusterip-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Ejercicio 2: Crear un Servicio NodePort

  1. Crea un archivo YAML llamado nodeport-service.yaml.
  2. Define un servicio de tipo NodePort que seleccione los pods con la etiqueta app: my-app, exponga el puerto 80 y utilice el puerto 30007 en los nodos.

Solución:

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30007

Resumen

En esta sección, hemos aprendido sobre los servicios en Kubernetes, su importancia y los diferentes tipos disponibles. También hemos visto ejemplos prácticos de cómo crear servicios de tipo ClusterIP y NodePort. Los servicios son esenciales para la comunicación dentro del clúster y para exponer aplicaciones al exterior. En la próxima sección, exploraremos los Namespaces y cómo se utilizan para organizar y gestionar recursos en Kubernetes.

Curso de Kubernetes

Módulo 1: Introducción a Kubernetes

Módulo 2: Componentes Principales de Kubernetes

Módulo 3: Gestión de Configuración y Secretos

Módulo 4: Redes en Kubernetes

Módulo 5: Almacenamiento en Kubernetes

Módulo 6: Conceptos Avanzados de Kubernetes

Módulo 7: Monitoreo y Registro

Módulo 8: Seguridad en Kubernetes

Módulo 9: Escalado y Rendimiento

Módulo 10: Ecosistema y Herramientas de Kubernetes

Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real

Módulo 12: Preparación para la Certificación de Kubernetes

© Copyright 2024. Todos los derechos reservados