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:
- ClusterIP: Este es el tipo de servicio predeterminado. Proporciona una dirección IP interna accesible solo dentro del clúster.
- NodePort: Expone el servicio en un puerto específico de cada nodo del clúster, permitiendo el acceso externo.
- LoadBalancer: Proporciona una IP externa y balancea la carga entre los pods. Requiere soporte del proveedor de la nube.
- 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 etiquetaapp: 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 comoNodePort
.nodePort: 30007
: Especifica el puerto en el que el servicio estará disponible en cada nodo.
Ejercicio Práctico
Ejercicio 1: Crear un Servicio ClusterIP
- Crea un archivo YAML llamado
clusterip-service.yaml
. - Define un servicio de tipo
ClusterIP
que seleccione los pods con la etiquetaapp: 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
- Crea un archivo YAML llamado
nodeport-service.yaml
. - Define un servicio de tipo
NodePort
que seleccione los pods con la etiquetaapp: 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
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
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
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster