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: 8080Explicació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: 30007Explicació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
ClusterIPque seleccione los pods con la etiquetaapp: my-appy 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: 8080Ejercicio 2: Crear un Servicio NodePort
- Crea un archivo YAML llamado
nodeport-service.yaml. - Define un servicio de tipo
NodePortque 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: 30007Resumen
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
