Kubernetes (K8s): guía de aprendizaje rápido
Kubernetes, también abreviado como K8s, es una plataforma de código abierto para automatizar y orquestar el despliegue, el escalado y la gestión de aplicaciones y cargas de trabajo en contenedores. Proporciona una infraestructura informática con flexibilidad, escalabilidad, fiabilidad, alta disponibilidad y portabilidad integradas para aplicaciones que se ejecutan como contenedores en cualquier entorno: en las instalaciones, en la nube y en el extremo de la red.
¿Qué es Kubernetes?
Kubernetes automatiza las tareas más habituales asociadas a la gestión a gran escala de cargas de trabajo en contenedores, como el despliegue, el equilibrio de carga, el escalado horizontal, las actualizaciones y reversiones, y la autorrecuperación.
Muchas organizaciones ya utilizan Kubernetes en producción, ya sea para algunas de sus aplicaciones o para la mayoría, mientras que otras están evaluando su adopción. Su popularidad ha convertido a Kubernetes en el estándar de facto para la orquestación y la gestión de contenedores.
Ventajas de Kubernetes
La adopción de Kubernetes está creciendo rápidamente porque puede ayudar a:
- Acelerar y simplificar el ciclo de vida de las versiones de las aplicaciones
- Permita la portabilidad de las cargas de trabajo entre entornos de nube pública, privada e híbrida, así como entornos multinube
- Mejorar la eficiencia en el uso de los recursos
- Facilitar la escalabilidad y la preparación para la producción
- Optimizar el entorno para cumplir los acuerdos de nivel de servicio (SLA) empresariales
Kubernetes y microservicios
La refactorización de las aplicaciones monolíticas tradicionales en componentes más pequeños y con un acoplamiento débil, denominados microservicios ayuda a mejorar la agilidad empresarial, ya que permite lanzar nuevas funcionalidades y actualizaciones de las aplicaciones con mayor rapidez y escalarlas más fácilmente. La adopción de una arquitectura de microservicios nativa de la nube exige modernizar la infraestructura informática subyacente, por lo que la transición de los sistemas físicos y las máquinas virtuales a los contenedores se perfila como una de las formas más eficientes de ejecutar microservicios.
A medida que aumenta el número de microservicios y contenedores, también crece la necesidad de automatizar la gestión de los contenedores. Aquí es donde entra en juego Kubernetes.
¿Qué es Kubernetes?
Kubernetes, también abreviado como K8s, es una plataforma de código abierto para automatizar y orquestar el despliegue, el escalado y la gestión de aplicaciones y cargas de trabajo en contenedores. Proporciona una infraestructura informática con flexibilidad, escalabilidad, fiabilidad, alta disponibilidad y portabilidad integradas para aplicaciones que se ejecutan como contenedores en cualquier entorno: en las instalaciones, en la nube y en el extremo de la red.
Kubernetes automatiza las tareas más habituales asociadas a la gestión de cargas de trabajo en contenedores a gran escala, como el despliegue, el equilibrio de carga, el escalado horizontal, las actualizaciones y reversiones, y la recuperación automática.
Muchas organizaciones ya utilizan Kubernetes en producción, ya sea para algunas de sus aplicaciones o para la mayoría, mientras que otras están evaluando su adopción. Su popularidad ha convertido a Kubernetes en el estándar de facto para la orquestación y gestión de contenedores.
Ventajas de Kubernetes
La adopción de Kubernetes está creciendo rápidamente porque puede ayudar a:
- Acelerar y simplificar el ciclo de vida de las versiones de las aplicaciones
- Permita la portabilidad de las cargas de trabajo entre entornos de nube pública, privada e híbrida, así como entornos multinube
- Mejorar la eficiencia en el uso de los recursos
- Facilitar la escalabilidad y la preparación para la producción
- Optimizar el entorno para cumplir los acuerdos de nivel de servicio (SLA) de la empresa
Kubernetes y microservicios
La refactorización de las aplicaciones monolíticas tradicionales en componentes más pequeños y débilmente acoplados, denominados microservicios (https://www.f5.com/glossary/microservices-architecture), ayuda a mejorar la agilidad empresarial, ya que permite lanzar nuevas funcionalidades y actualizaciones de las aplicaciones con mayor rapidez y escalarlas más fácilmente. La adopción de una arquitectura de microservicios nativa de la nube impulsa la necesidad de modernizar la infraestructura informática subyacente, por lo que observamos la transición de los sistemas físicos y las máquinas virtuales a los contenedores como una de las formas más eficientes de ejecutar microservicios.
A medida que aumenta el número de microservicios y contenedores, también crece la necesidad de automatizar la gestión de los contenedores. Aquí es donde entra en juego Kubernetes.
Kubernetes frente a Docker
Kubernetes orquesta y ejecuta aplicaciones en contenedores a gran escala; sin embargo, no proporciona los medios necesarios para empaquetar el código de una aplicación en un formato de contenedor para su distribución y ejecución (una imagen de contenedor incluye el código de la aplicación y los entornos de ejecución, las bibliotecas y otras dependencias de software necesarios). Para que los pods puedan ejecutarse, Kubernetes también requiere que se instale un entorno de ejecución de contenedores en cada nodo. Originalmente, Kubernetes utilizaba Docker Engine como entorno de ejecución de contenedores. Sin embargo, desde Kubernetes 1.24, el entorno de ejecución de contenedores debe ser compatible con la interfaz de ejecución de contenedores (CRI), algo que Docker Engine no cumple. Dos entornos de ejecución de contenedores populares compatibles con CRI son CRI-O y containerd (originalmente un proyecto de Docker).
Para empaquetar aplicaciones en contenedores, se necesita una herramienta como Docker, una de las herramientas más populares para crear, compartir y ejecutar aplicaciones en contenedores. Esta herramienta agiliza y automatiza el empaquetado de aplicaciones en imágenes de contenedor portátiles listas para ejecutarse e implementarse en entornos locales y en la nube, incluidos los entornos de Kubernetes. Los contenedores empaquetados con Docker pueden ejecutarse de forma nativa en los entornos de ejecución containerd y CRI-O.
Arquitectura de Kubernetes
Una plataforma de Kubernetes está formada por nodos que se agrupan en un clúster en el que comparten recursos informáticos. Cada clúster gestiona pods, que son las unidades desplegables más pequeñas de la arquitectura de Kubernetes. Un pod contiene uno o varios contenedores de aplicaciones. Los pods se agrupan para formar un servicio. Se puede acceder desde el exterior a las aplicaciones de un clúster de Kubernetes mediante varios métodos, entre los cuales el controlador de Ingress es uno de los más populares y eficientes.
Veamos más de cerca los componentes de un entorno de Kubernetes:
Pods de Kubernetes
Un pod de Kubernetes es la unidad ejecutable más pequeña que se puede desplegar en Kubernetes. El pod es un «host virtual» para la imagen o las imágenes de contenedor de la aplicación (como lo sería un servidor físico o una máquina virtual para las aplicaciones tradicionales) y encapsula uno o varios contenedores que comparten los mismos recursos informáticos, de almacenamiento y de red (por lo que puede considerarse que están estrechamente acoplados). Los pods se despliegan y ejecutan en nodos de Kubernetes.
Nodos de Kubernetes
Un nodo de Kubernetes es la unidad más pequeña de una infraestructura informática. El nodo puede ser una máquina virtual o un servidor físico que asigna recursos de procesador, memoria, almacenamiento y red para desplegar, ejecutar, escalar y gestionar pods. Los nodos se agrupan para formar un clúster.
Clústeres de Kubernetes
Un clúster de Kubernetes es un grupo de nodos en el que los recursos informáticos agrupados se comparten entre los pods. Hay dos tipos de nodos en un clúster:
- Nodos de trabajo: Ejecutan las aplicaciones en contenedores dentro de los pods
- Nodos maestros – Ejecutan el plano de control de Kubernetes, que orquesta y gestiona los nodos de trabajo y los pods
Normalmente, en un clúster de Kubernetes hay más de un nodo de cada tipo para garantizar una alta disponibilidad y tolerancia a fallos.
Despliegues de Kubernetes
Un despliegue de Kubernetes describe cómo ejecutar una aplicación como un conjunto de réplicas (o instancias) del pod en un clúster. Un despliegue define:
- El número de réplicas del pod que se deben ejecutar
- Cómo implementar gradualmente las actualizaciones de los pods
- Cómo revertir las réplicas de pods al estado anterior
- Cómo escalar horizontalmente las réplicas de pods
Conectividad de aplicaciones en Kubernetes
Kubernetes admite una pila dual IPv4/IPv6 para proporcionar conectividad de red a las aplicaciones en contenedores que se ejecutan en un clúster. Tanto las comunicaciones entrantes y salientes de las aplicaciones del clúster de Kubernetes como las comunicaciones entre los servicios del clúster se gestionan en la capa 4 (dirección IP, puerto) y la capa 7 (nombre de host, identificador uniforme de recursos [URI]), e incluyen funciones de enrutamiento, equilibrio de carga, seguridad, supervisión y visibilidad.
Redes de Kubernetes
En el modelo de red de Kubernetes , cada pod tiene una dirección IP única que se asigna dinámicamente desde el conjunto de direcciones privadas del clúster. Todos los pods que se ejecutan en todos los nodos del mismo clúster pertenecen a la misma red IP y pueden comunicarse entre sí a través de ella. Los distintos contenedores de un pod se comunican entre sí mediante la interfaz de bucle invertido.
Servicios de Kubernetes
Un servicio de Kubernetes permite acceder a través de la red a la aplicación o al microservicio que se ejecuta en uno o varios pods del clúster (es decir, «lo expone»). Un servicio de Kubernetes representa la aplicación como un grupo lógico de pods designados que realizan la misma función, por ejemplo, servir contenido web. Se aplica el mismo selector (o etiqueta) a todos los pods de un servicio para indicar que pertenecen a él. Kubernetes utiliza la etiqueta para realizar un seguimiento del conjunto de pods de un servicio a medida que se despliegan nuevos pods o se detienen los que están en ejecución.
Los servicios de Kubernetes pueden comunicarse entre sí dentro del clúster de acuerdo con las políticas de conectividad definidas y pueden hacerse accesibles desde fuera del clúster, por ejemplo, mediante un controlador Ingress.
Ingress de Kubernetes
El objeto Ingress, que forma parte de la API de Ingress de Kubernetes, puede utilizarse para exponer externamente aplicaciones que se ejecutan en Kubernetes mediante protocolos de capa 7 (capa de aplicación), como HTTP. Las puertas de enlace de Ingress y los controladores de Ingress son herramientas diseñadas para controlar el objeto Ingress y gestionar las comunicaciones entre los usuarios y las aplicaciones (conectividad de usuario a servicio o norte-sur).
Por diseño, el objeto Ingress ofrece una compatibilidad limitada con las políticas personalizadas de gestión de solicitudes; por ejemplo, no permite definir ni asociar políticas de seguridad. Por ello, muchos proveedores utilizan definiciones de recursos personalizados (CRD) para ampliar las capacidades de sus controladores de Ingress y satisfacer así las necesidades cambiantes de los clientes.
Por ejemplo, NGINX Ingress Controller define recursos personalizados (VirtualServer, VirtualServerRoute, TransportServer y Policy) para mejorar el rendimiento, la resiliencia, la disponibilidad, la seguridad y la observabilidad de las funciones de puerta de enlace de API, equilibrador de carga e Ingress en el perímetro de un clúster de Kubernetes.
NGINX proporciona servicios de equilibrio de carga, autenticación, autorización, control de acceso, cifrado, observabilidad y distribución del tráfico (disyuntor, pruebas A/B y despliegues azul-verde y canary) para garantizar que la comunicación sea rápida, fiable y segura. Para facilitar los lanzamientos frecuentes de aplicaciones, los recursos personalizados de NGINX también permiten una gobernanza de autoservicio entre equipos de desarrollo y DevOps multiinquilino.
API Gateway de Kubernetes
La API de Gateway es un proyecto de código abierto cuyo objetivo es mejorar y estandarizar las redes de servicios en Kubernetes. Gestionada por la comunidad de Kubernetes, la especificación de la API de Gateway evolucionó a partir de la API de Ingress de Kubernetes para resolver las limitaciones del recurso Ingress en entornos de producción, incluida la capacidad de definir políticas detalladas para el procesamiento de solicitudes y delegar el control de la configuración entre varios equipos y roles.
Obtenga más información sobre la implementación de la Gateway API de NGINX en 5 aspectos que debe conocer sobre NGINX Gateway Fabric en nuestro blog.
Malla de servicios
Una malla de servicios es una capa de infraestructura que controla las comunicaciones entre los servicios de un clúster de Kubernetes (conectividad de servicio a servicio o este-oeste). Los casos de uso más habituales de una malla de servicios incluyen la autenticación y el cifrado mediante mTLS, así como la observabilidad de las comunicaciones entre los servicios de un clúster de K8s.
Obtenga más información sobre la entrega unificada de aplicaciones con NGINX Gateway Fabric, una solución diseñada para combinar eficazmente en una sola herramienta los casos de uso de un controlador de Ingress y una malla de servicios, en la entrada Anuncio de NGINX Gateway Fabric versión 1.0 de nuestro blog.
Seguridad de Kubernetes
La seguridad de Kubernetes es un enfoque por capas para proteger la infraestructura (recursos informáticos locales y en la nube, comunicaciones de red y plano de gestión), así como las aplicaciones que se ejecutan dentro de un clúster de Kubernetes.
Para proteger la infraestructura, siga las recomendaciones de seguridad, los tutoriales y las prácticas recomendadas generales para proteger las implementaciones en la nube y en las instalaciones.
Para proteger las aplicaciones, implemente controles de seguridad sólidos en el perímetro y dentro de un clúster de Kubernetes que proporcionen autenticación, autorización, control de acceso, cifrado, supervisión y visibilidad, con un firewall de aplicaciones web y protección contra ataques de denegación de servicio opcionales, para todas las comunicaciones entrantes, salientes e internas del clúster.
Obtén más información sobre cómo proteger Kubernetes en nuestro blog «Seis formas de proteger Kubernetes mediante herramientas de gestión del tráfico».
Kubernetes en producción
En los primeros tiempos de la adopción de Kubernetes, predominaba el enfoque «hágalo usted mismo» (DIY). Sin embargo, para muchas organizaciones resulta complejo y difícil de implementar y gestionar. Por este motivo, para los despliegues en producción, las organizaciones están adoptando plataformas de Kubernetes gestionadas en la nube y distribuciones de Kubernetes preconfiguradas que integran diversos componentes tecnológicos, simplifican el ciclo de vida del mantenimiento y pueden desplegarse en entornos híbridos y multinube.
A continuación se muestran algunos ejemplos de plataformas de Kubernetes gestionadas y preempaquetadas:
Kubernetes gestionado en la nube:
- Amazon Elastic Kubernetes Service (EKS)
- Servicio de Kubernetes de Microsoft Azure (AKS)
- Google Kubernetes Engine (GKE)
Distribuciones de Kubernetes preempaquetadas:
Cómo puede ayudar NGINX
La plataforma de conectividad y seguridad de NGINX, diseñada específicamente para Kubernetes, ayuda a mejorar la experiencia de los clientes al reducir la complejidad, aumentar el tiempo de actividad y ofrecer una visibilidad detallada en tiempo real y a gran escala de las aplicaciones de Kubernetes que se ejecutan en entornos locales, en la nube y en el edge.
Stack de conectividad para Kubernetes – Optimiza, escala y protege las aplicaciones de Kubernetes en entornos híbridos y multinube.
- NGINX Ingress Controller – Una puerta de enlace de API, un equilibrador de carga y un controlador de Ingress unificados que permiten mejorar los acuerdos de nivel de servicio (SLA) empresariales y obtener información sobre el estado y el rendimiento de las aplicaciones a gran escala en entornos de Kubernetes distribuidos.
- NGINX Gateway Fabric – Una plataforma unificada de entrega de aplicaciones que simplifica la conectividad de aplicaciones, servicios y API en entornos de Kubernetes híbridos y multinube.
- NGINX App Protect – Una solución integral de seguridad WAF y defensa contra ataques de denegación de servicio (DoS), diseñada para proteger aplicaciones y API frente a ataques de capa 7.
Empieza solicitando tu prueba gratuita de 30 días de NGINX Ingress Controller con NGINX App Protect WAF y protección contra ataques DoS.

