Introducción
En el ecosistema de Kubernetes, la gestión de aplicaciones desplegadas en contenedores presenta desafíos específicos, especialmente por la naturaleza efímera de los pods. Estos objetos pueden ser creados y eliminados dinámicamente, lo que provoca que sus direcciones IP internas cambien constantemente. Esta volatilidad complica que otros componentes o clientes se comuniquen de forma estable con ellos. Para resolver esta problemática, Kubernetes introduce un recurso fundamental conocido como Servicio, que garantiza un acceso confiable y transparente a los pods, sin importar su ciclo de vida. En este artículo, exploraremos en profundidad qué son los servicios en Kubernetes, cómo se configuran, sus tipos y mejores prácticas para su implementación eficaz.
¿Qué es un Servicio en Kubernetes?
Un servicio en Kubernetes es un objeto que actúa como una abstracción frente a un conjunto de pods, proporcionando una dirección IP fija y una forma coherente de acceder a ellos. Además, maneja balanceo de carga entre los pods seleccionados, lo que garantiza alta disponibilidad y escalabilidad de las aplicaciones.
El servicio representa un punto de acceso estable para clientes dentro y, en algunos casos, fuera del clúster, evitando la necesidad de conocer las IPs dinámicas de los pods, que pueden cambiar tras reinicios o escalamiento.
Características fundamentales de un Service
- Estabilidad de IP: Proporciona una IP fija (ClusterIP) dentro del clúster, que no cambia durante la existencia del servicio.
- Balanceo de carga: Distribuye el tráfico entrante entre los pods seleccionados de manera transparente para el cliente.
- Selector de pods: Define qué pods están agrupados por el servicio mediante etiquetas.
- Exposición flexible: Permite exponer la aplicación internamente o hacia el exterior mediante distintos tipos de servicio.
El problema del cambio de IP en pods
Los pods de Kubernetes son objetos efímeros, lo que significa que pueden desaparecer en cualquier momento, ya sea por reinicios, actualizaciones o escalamiento. Cada vez que un pod se crea, se le asigna una dirección IP interna diferente, generando un problema para las aplicaciones que necesitan comunicarse directamente con ellos.
Por ejemplo, al eliminar un pod y crear uno nuevo para reemplazarlo, el nuevo pod tendrá una IP distinta. Cualquier cliente que apunte a la IP antigua no podrá establecer comunicación, produciendo fallos que afectan la disponibilidad y la experiencia de usuario.
Escenario típico sin servicio
- Un cliente se conecta a un pod mediante su IP.
- El pod es eliminado y recreado por un deployment.
- El nuevo pod recibe una IP diferente.
- El cliente sigue apuntando a la IP obsoleta y la conexión falla.
Por qué no es viable manejar IPs directamente
La naturaleza dinámica de pods hace inviable el acceso mediante IPs directas. Además, el aumento del número de réplicas y la complejidad arquitectónica dificultan mantener la comunicación eficiente sin una capa de abstracción.
Creación y configuración de un Servicio en Kubernetes
Para crear un servicio es necesario definir un manifiesto YAML, donde se especifican las propiedades clave del objeto, tales como la versión de la API, el tipo, metadatos, puertos y selectores.
Estructura básica del manifiesto YAML de un Servicio
apiVersion: v1 kind: Service metadata: name: hello-world spec: selector: app: hello-world ports: - protocol: TCP port: 80 # Puerto del servicio targetPort: 80 # Puerto del pod
En este ejemplo:

- selector: define qué pods serán expuestos por el servicio, en este caso, todos los pods con etiqueta
app: hello-world
. - ports: configura el puerto en el que el servicio escuchará las solicitudes (
port
) y el puerto del pod al que redirigirá el tráfico (targetPort
).
Implementación paso a paso
- Crear un archivo YAML con la definición del servicio.
- Aplicar el manifiesto mediante
kubectl apply -f servicio.yaml
. - Verificar la creación con
kubectl get svc
para obtener la IP del servicio. - Los clientes internos podrán consumir la aplicación usando esta IP fija del servicio.
Tipos de Servicios en Kubernetes
Kubernetes ofrece diferentes tipos de servicios para ajustarse a distintas necesidades según el caso de uso y el nivel de exposición necesario.
Tabla comparativa de tipos de servicios
Tipo de Servicio | Descripción | Uso principal | Alcance |
---|---|---|---|
ClusterIP | Proporciona una IP interna estable accesible solo dentro del clúster. | Comunicación interna entre pods y aplicaciones dentro del clúster. | Interno al clúster |
NodePort | Expone el servicio en un puerto estático de cada nodo del clúster, accesible desde fuera. | Acceso desde fuera del clúster sin balanceador de carga externo. | Interno y externo |
LoadBalancer | Proporciona un IP externo y balanséo de carga mediante recursos de nube. | Exposición pública y balanceo de carga en infraestructuras de nube. | Externo al clúster |
ExternalName | Mapea el servicio a un nombre DNS externo. | Redireccionar a servicios externos fuera del clúster. | Externo al clúster |
Elección adecuada según la necesidad
Para aplicaciones internas, ClusterIP es suficiente. En caso de exponer aplicaciones al exterior, NodePort o LoadBalancer serán opciones más convenientes, dependiendo de la infraestructura y escalabilidad deseada.
Balanceo de carga y alta disponibilidad con Servicios
Cuando un servicio agrupa múltiples réplicas de pods, es fundamental distribuir la carga entrante equitativamente. Kubernetes maneja este balanceo a nivel de servicio, retransmitiendo las solicitudes a los pods disponibles.
El uso de un selector basado en etiquetas permite al servicio detectar automáticamente los pods activos que deben recibir tráfico. Esto facilita la escalabilidad del deployment sin modificar la configuración del cliente.
Escalamiento de un Deployment y su impacto en el Servicio
- Al aumentar el número de réplicas, el servicio extiende el balanceo de carga a más pods.
- Al reducir réplicas, el servicio elimina pods de su routing automáticamente.
- Clientes conectados siguen usando la IP estable del servicio, sin necesidad de actualización.
Resolución de nombres y DNS interno en Kubernetes
Una ventaja importante de los servicios es que Kubernetes añade registros DNS internos que enlazan el nombre del servicio con su IP fija. De esta forma, los clientes pueden consumir la aplicación llamando al nombre del servicio, facilitando una conexión aún más intuitiva y desacoplada de configuraciones estáticas.
Por ejemplo, si existe un servicio llamado hello-world
, los pods y aplicaciones dentro del clúster pueden usar http://hello-world
para acceder a la aplicación.
Beneficios clave de la resolución DNS
- Evita el uso de direcciones IP, que pueden ser difíciles de recordar o gestionar.
- Facilita la resiliencia frente a cambios internos.
- Mejora la legibilidad y mantenibilidad del código y la configuración.
Para comprender mejor estos conceptos, te invitamos a ver este video que ilustra la creación, funcionamiento y beneficios del servicio en Kubernetes, mostrando ejemplos prácticos y el comportamiento con deployments escalados.
Buenas prácticas para la gestión de Servicios en Kubernetes
- Uso adecuado de selectores: Define etiquetas claras y coherentes en tus pods para que los servicios los agrupen correctamente.
- Definir puertos correctamente: Asegúrate de que el puerto
targetPort
coincida con el puerto que la aplicación escucha dentro del pod. - Evitar direcciones IP hardcodeadas: Siempre referenciar el servicio mediante su IP estable o, preferentemente, su nombre DNS.
- Escalar deployments con planificación: Configura el número de réplicas según la demanda para asegurar disponibilidad sin desperdiciar recursos.
- Monitorear servicios: Implementa herramientas de monitoreo para observar el estado de servicios y endpoints relacionados.
Modo de exposición de Servicios hacia el exterior
En casos donde la aplicación deba ser accesible desde fuera del clúster, Kubernetes ofrece métodos para exponer servicios de forma controlada y segura.

NodePort y LoadBalancer
- NodePort: Abre un puerto fijo en cada nodo, permitiendo el acceso externo directo. Puede ser útil en entornos on-premise o en pruebas.
- LoadBalancer: Genera un balanceador de carga externo en proveedores de nube públicos, facilitando acceso y escalamiento automático.
Ingress y servicios
Complementariamente, el recurso Ingress permite administrar el acceso externo a múltiples servicios a través de reglas HTTP y HTTPS, ofreciendo funcionalidades avanzadas como enrutamiento, TLS y autenticación.
Impacto del Servicio en la arquitectura y la seguridad
Al agrupar pods y abstraer sus direcciones IP, el servicio ayuda no solo en la eficiencia, sino en la seguridad, permitiendo implementar políticas de red más precisas y separando las capas de acceso.
Además, esto facilita el cumplimiento normativo, auditoría y segmentación de tráfico en entornos de nube híbrida o multi-clúster.
Terminología clave y su importancia
Pod
Unidad mínima de ejecución en Kubernetes. Son contenedores efímeros con IPs dinámicas. Comprender su naturaleza es fundamental para establecer buenas prácticas sobre servicios.
Deployment
Controlador que asegura la cantidad deseada de pods en ejecución, reiniciándolos o escalándolos según sea necesario. Su interacción con servicios es clave para alta disponibilidad.
Selector
Mecanismo de filtrado usado por servicios para determinar qué pods agrupar mediante etiquetas, permitiendo flexibilidad y modularidad.
ClusterIP
IP estática interna asignada a un servicio para el acceso desde dentro del clúster. Es la forma más habitual de comunicación interna en Kubernetes.
ServiceName
Nombre del servicio utilizado en el DNS interno de Kubernetes. Es preferible usar el nombre por sobre la IP para garantizar resiliencia al cambio.

ReplicaSet
Objeto que mantiene la cantidad de réplicas deseadas de un pod en un deployment, colaborando con los servicios para balancear la carga.
LoadBalancer
Tipo de servicio que pone a disposición una IP externa y balanceo mediante plataformas cloud, importante para exponer aplicaciones públicamente.
Errores comunes y soluciones en la gestión de Servicios Kubernetes
- Selector mal configurado: No coincide con las etiquetas de pods —> servicio no encuentra endpoints.
- Puertos incorrectos: El puerto
targetPort
no corresponde con el contenedor —> no llega el tráfico. - Uso incorrecto de IPs: Clientes apuntan a IPs de pods, no al servicio —> fallas tras eliminación de pods.
- No escalar deployments: Servicios quedan expuestos a un solo pod, no distribuyen carga ni resistencia.
- No supervisar servicios: Falta de monitoreo puede ocultar problemas de disponibilidad.
Extensión práctica: Ejemplo completo de creación y uso de un Servicio
Veamos un ejemplo para desplegar un servicio que exponga una aplicación «hello-world» mediante un deployment y un servicio asociado.
Definición del Deployment (hello-world-deployment.yaml)
apiVersion: apps/v1 kind: Deployment metadata: name: hello-world spec: replicas: 3 selector: matchLabels: app: hello-world template: metadata: labels: app: hello-world spec: containers: - name: hello-container image: your-dockerhub/hello-world:latest ports: - containerPort: 80
Definición del Servicio (hello-world-service.yaml)
apiVersion: v1 kind: Service metadata: name: hello-world spec: selector: app: hello-world ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP
Pasos para aplicar los recursos
- Aplicar deployment:
kubectl apply -f hello-world-deployment.yaml
- Aplicar servicio:
kubectl apply -f hello-world-service.yaml
- Verificar pods:
kubectl get pods
- Verificar servicio:
kubectl get svc
(observar IP del servicio) - Acceder a la aplicación usando la IP o nombre del servicio (
http://hello-world
) desde otros pods.
Consejos para optimizar la gestión de Servicios en Kubernetes
- Etiquetado consistente: Mantén un esquema claro y uniforme de etiquetas para facilitar la selección y agrupación.
- Documenta las configuraciones: Guarda los manifiestos YAML en repositorios con control de versiones.
- Automatiza despliegues: Usa pipelines de CI/CD para mantener coherencia y agilidad.
- Monitorea conectividad: Utiliza herramientas como Prometheus y Grafana para supervisar servicios y pods.
- Gestiona secretos y configuraciones: Integra ConfigMaps y Secrets para parametrización segura.
Palabras clave relacionadas y su relevancia
Servicio en Kubernetes
Concepto base que permite abstraer y unificar el acceso a los pods mediante una IP y/o nombre DNS estables.
Pod
Unidad efímera fundamental que ejecuta contenedores. Su naturaleza dinámica implica la necesidad de los servicios para acceso estable.
Deployment
Mecanismo para controlar la creación, escalamiento y actualización de pods, trabajando conjuntamente con servicios para balanceo y disponibilidad.
ClusterIP
Tipo de servicio estándar para acceso interno dentro del clúster, representando la IP fija para consumir las aplicaciones.
NodePort y LoadBalancer
Modos de exposición que permiten acceso externo, vitales para proyectos que requieren conexión fuera del entorno Kubernetes.

Etiquetas y Selectores
Elementos cruciales para que servicios agrupen correctamente los pods y gestionen tráfico adecuadamente sin intervención manual constante.
Preguntas frecuentes (FAQ)
¿Qué es un servicio en Kubernetes?
Un Servicio en Kubernetes es un objeto que agrupa un conjunto de puntos finales (endpoints) generados por pods, unificándolos en un solo recurso accesible con una dirección IP estable. Facilita a los clientes acceder a los pods sin necesidad de conocer sus IPs dinámicas, permitiendo balanceo de carga y alta disponibilidad.
¿Qué es el servicio en Kubernetes?
El servicio en Kubernetes representa la abstracción de un conjunto de pods que ejecutan la misma función. Mediante un selector, el servicio agrupa esos pods y ofrece una IP de clúster estable para que las aplicaciones clientes puedan acceder sin interrupciones, independientemente de los cambios en los pods subyacentes.
¿Qué es el servicio administrado de Kubernetes?
Un servicio administrado de Kubernetes generalmente se refiere a los servicios gestionados por proveedores de nube que simplifican la implementación y operación de clusters Kubernetes. Estos servicios brindan facilidades administrativas, como despliegue sencillo, escalabilidad automática y manejo simplificado de servicios como el balanceo de carga (LoadBalancer), facilitando la exposición controlada de aplicaciones.
¿Cómo se configura un servicio para que siempre tenga la misma IP?
Al crear un servicio de tipo ClusterIP
en Kubernetes, la IP asignada al servicio dentro del clúster es fija durante toda su existencia. Esta estabilidad es gestionada automáticamente por Kubernetes, y no se recomienda modificar manualmente estas IPs.
¿Qué ocurre si los pods detrás de un servicio cambian?
Kubernetes adapta dinámicamente el servicio actualizando sus endpoints asociados conforme se crean o eliminan pods que coinciden con el selector definido.
¿Cómo se puede exponer un servicio fuera del clúster?
Mediante servicios de tipo NodePort
, LoadBalancer
o utilizando Ingress, es posible exponer servicios a redes externas, facilitando el acceso público o restringido según la configuración.
¿Cuál es la diferencia entre un servicio y un deployment?
Un Deployment se encarga de gestionar el ciclo de vida y escalabilidad de pods, mientras que el Servicio gestiona el acceso estable y balanceo a esos pods. Son componentes complementarios pero con funciones distintas.

¿Por qué usar el nombre DNS del servicio en lugar de su IP?
El uso del nombre DNS gestionado internamente por Kubernetes evita problemas derivados de cambios en la IP y facilita la portabilidad y mantenibilidad de las aplicaciones.
¿Qué problemas resuelven los servicios en Kubernetes?
- Estabilidad en el acceso a pods efímeros.
- Balanceo de carga automático.
- Abstracción del detalle de red interna.
- Facilidad para exponer aplicaciones interna y externamente.
¿Cómo escalar un deployment sin afectar el acceso del servicio?
Incrementa o disminuye las réplicas del deployment mediante ajustes en el YAML o comandos de Kubernetes. El servicio detectará automáticamente los pods activos y ajustará la distribución del tráfico sin que el cliente note cambios.
Conclusión
El conocimiento profundo y dominio en la configuración de servicios en Kubernetes es fundamental para garantizar una arquitectura de microservicios eficiente, escalable y resiliente. Los servicios abstraen las complejidades de la red interna y aseguran que las aplicaciones permanezcan accesibles a pesar de la naturaleza dinámica de los pods. Implementar estos conceptos con buenas prácticas es crucial para el éxito de cualquier entorno Kubernetes.
¿Buscás implementar este tipo de soluciones en tu empresa? En Código6 podemos ayudarte. Somos especialistas en automatización, inteligencia artificial y transformación digital. Contactanos para comenzar tu proyecto hoy.
Leave A Comment