Publicado: 21 de noviembre de 2023
Colaboradores: Stephanie Susnjara, Ian Smalley
Las redes de Kubernetes proporcionan la infraestructura de red para permitir la comunicación, la escalabilidad, la seguridad y el acceso externo para aplicaciones contenedorizadas. La red es compleja e implica comunicación entre todos los componentes principales que residen dentro (p. ej., pods, nodos, contenedores, servicios) y fuera (p. ej., tráfico externo) de un clúster de Kubernetes.
Para comunicarse, estos componentes utilizan cuatro métodos de red distintos:
1. Redes de contenedor a contenedor
2. Redes de pod a pod
3. Redes de pod a servicio
4. Redes externas al servicio
Para ingenieros de plataformas y DevOps que buscan operacionalizar la velocidad de comercialización y al mismo tiempo garantizar el rendimiento de las aplicaciones
Suscríbase al boletín de IBM
El nombre Kubernetes proviene del griego y significa timonel o piloto. Basado en Borg, la plataforma de orquestación interna de contenedores de Google, Kubernetes, se presentó al público como una herramienta de código abierto en 2014. Ese mismo año, Google donó Kubernetes a la Cloud Native Computing Foundation (enlace externo a ibm.com), el centro de código abierto y neutral del proveedor de la informática nativa de la nube. Desde entonces, Kubernetes se ha convertido en la herramienta de orquestación de contenedores más utilizada para ejecutar cargas de trabajo basadas en contenedores en todo el mundo.
Kubernetes, también denominado "k8s" o "kube», se diseñó expresamente para automatizar la gestión de contenedores, la unidad estándar de software que empaqueta el código y todas sus dependencias. La herramienta de orquestación es muy valiosa para funcionar de forma rápida y fiable en cualquier entorno de infraestructura, ya sea en local, en la nube privada, en la nube pública o en la nube híbrida.
A diferencia de las máquinas virtuales (VM) que virtualizan el hardware físico, los contenedores virtualizan el sistema operativo (como Linux o Windows). Cada contenedor contiene únicamente las bibliotecas y dependencias de la aplicación. Dado que los contenedores comparten el mismo núcleo del sistema operativo que el host, se consideran ligeros, rápidos y portátiles.
Kubernetes y su ecosistema de servicios, soporte y herramientas se han convertido en la base de la infraestructura moderna en la nube y la modernización de aplicaciones. Todos los principales proveedores de servicios en la nube, incluidos Amazon Web Services (AWS), Google, Microsoft, IBM y Red Hat, integran Kubernetes en sus plataformas en la nube para mejorar las capacidades de Plataforma como servicio (PaaS) e Infraestructura como servicio (IaaS).
La arquitectura de Kubernetes consta de los siguientes componentes fundamentales:
Un clúster de Kubernetes es un conjunto de máquinas físicas o virtuales (nodos) que funcionan juntas para ejecutar aplicaciones en contenedores. Los clústeres conforman la base de la arquitectura de Kubernetes.
Los nodos maestros representan un único host informático, ya sea una máquina virtual o física. Alojan los componentes del plano de control de Kubernetes y son responsables de programar y escalar aplicaciones. Al administrar todos los recursos informáticos, de red y de almacenamiento en un clúster de Kubernetes, el nodo maestro garantiza que las aplicaciones y los servicios en contenedores se implementen por igual en los nodos de trabajo del clúster.
Los nodos de trabajo son responsables de ejecutar los contenedores y de realizar cualquier trabajo asignado por el nodo maestro. También alojan contenedores de aplicaciones, que se agrupan en pods.
Los pods son grupos de uno o más contenedores (como Linux o Docker) que comparten los mismos recursos informáticos y red. Son unidades de implementación de clústeres que también funcionan como unidades de escalabilidad. Por ejemplo, si un contenedor de un pod experimenta un gran volumen de tráfico, Kubernetes puede replicar ese pod en otros nodos del clúster. Kubernetes también puede apagar pods si el volumen de tráfico disminuye.
Entre los componentes adicionales de Kubernetes se incluyen los siguientes:
Las redes informáticas básicas implican conectar dos o más dispositivos informáticos para compartir datos e intercambiar recursos, ya sea por cable o a través de una red wifi WiFi.
En las redes físicas, los servidores físicos están conectados a equipos de red físicos: conmutadores, enrutadores y cables Ethernet para conectarse a Internet.
En las redes virtuales, redes definidas por software (SDN), componentes como dispositivos Ethernet virtuales e interfaces virtuales se instalan en servidores nativos o máquinas virtuales para conectarse a Internet. La implementación de Kubernetes se basa en SDN para configurar y administrar la comunicación de red entre clústeres.
Antes de profundizar en la interconexión de Kubernetes, conviene repasar los términos básicos de interconexión:
Kubernetes se creó para ejecutar sistemas distribuidos con un plano de red distribuido en un clúster de máquinas. Además de proporcionar interconectividad entre componentes, las redes de clústeres de Kubernetes crean un entorno perfecto en el que los datos pueden moverse de forma libre y eficiente a través de redes definidas por software.
Otra característica distintiva de las redes de Kubernetes es su estructura de red plana, lo que significa que todos los componentes pueden conectarse sin depender de otro hardware. En Kubernetes, todos los pods de un clúster se pueden comunicar con todos los demás dispositivos, independientemente del nodo en el que se ejecute. La red plana ofrece un modo eficaz de compartir recursos y elimina la necesidad de asignar puertos de forma dinámica.
En general, las redes Kubernetes abstraen la complejidad, lo que permite a los desarrolladores y operadores centrarse en crear y mantener aplicaciones en lugar de ocuparse de intrincadas configuraciones de red.
Kubernetes proporciona un modelo de red para ayudar a abordar los retos de la orquestación de aplicaciones en contenedores a través de un entorno distribuido. El tiempo de ejecución del contenedor en cada nodo implementa el modelo de red y se adhiere a las siguientes reglas:
El modelo de red de Kubernetes se aplica a cuatro tipos básicos de comunicación de Kubernetes:
Los contenedores son la unidad más pequeña de una red Kubernetes. En las configuraciones de red básicas, los contenedores se comunican dentro de un único pod a través de localhost. Esta comunicación es posible porque los contenedores de un mismo pod comparten el mismo espacio de nombres de red, que incluye recursos de red como almacenamiento, dirección IP y espacio de puertos.
La comunicación de pod a pod incluye la comunicación entre pods en el mismo nodo, así como la comunicación entre pods en diferentes nodos. Cada pod en un clúster de Kubernetes tiene su propia dirección IP única, lo que permite la comunicación directa entre pods independientemente del nodo en el que residan. Además, cada clúster de Kubernetes proporciona automáticamente un servicio DNS (servicio de sistema de nombres de dominio) además de la dirección IP del pod. El servicio DNS en el que se asignan nombres a pods (y servicios) crea nombres fáciles de leer para los administradores, proporcionando un mecanismo ligero para la detección de servicios.
Un servicio en Kubernetes es una abstracción que define un conjunto lógico de pods y permite la exposición externa del tráfico, el equilibrio de carga y el descubrimiento de servicios a esos pods. Los servicios facilitan la comunicación entre pods y servicios y entre externos y servicios.
Según el modelo de red Kubernetes, las direcciones IP de pods son efímeras. Por lo tanto, si un pod falla o se elimina y se crea un nuevo pod en su lugar, lo más probable es que el nuevo pod reciba una nueva dirección IP.
En la comunicación pod-to-service, ClusterIP es un tipo de servicio que proporciona una dirección IP virtual estable a un conjunto de pods. Esta IP interna sólo es accesible dentro del clúster y se puede utilizar para comunicaciones internas entre pods y servicios.
El kube-proxy, instalado en cada nodo de un clúster, mantiene las reglas de red en el host y monitoriza los cambios en los servicios y pods. A medida que se crean o destruyen pods, el kube-proxy actualiza IPtables (un programa de utilidad diseñado para crear reglas en el firewall del núcleo de Linux para enrutar el tráfico) para reflejar ese cambio, de modo que el tráfico enviado a la IP de servicio se enrute correctamente.
Las redes externas a servicios se refieren a la exposición y el acceso a servicios, como servicios externos o bases de datos, desde fuera del clúster Kubernetes.
Kubernetes proporciona varios servicios para facilitar el tráfico externo a un clúster:
Las políticas de red de Kubernetes son una construcción de aplicación que desempeña un papel vital en la red Kubernetes. Estas políticas permiten a los administradores y desarrolladores definir reglas que especifican cómo pueden comunicarse los pods entre sí y con otros endpoints de la red. Las políticas de red se aplican mediante la API de políticas de red de Kubernetes y constan de los siguientes componentes básicos:
Las políticas de red de Kubernetes ayudan a definir y gestionar políticas de seguridad al definir reglas que controlan qué pods pueden comunicarse entre sí, evitando así el acceso no autorizado y los ataques maliciosos. Las políticas de red también garantizan el aislamiento entre pods y servicios para que solo esos pods o servicios puedan comunicarse con un conjunto permitido de pares. Por ejemplo, el aislamiento es fundamental para situaciones de múltiples arrendatarios cuando DevOps u otros equipos comparten el mismo clúster de Kubernetes pero trabajan en diferentes proyectos.
Para las empresas con requisitos de conformidad específicos, las políticas de red ayudan a especificar y aplicar los controles de acceso a la red. Esto ayuda a cumplir con los estándares regulatorios y garantiza que el clúster cumpla con las políticas de la organización.
La interfaz de red de contenedores (CNI, por sus siglas en inglés) es otra característica esencial vinculada a las redes de Kubernetes. Creado y mantenido por Cloud Native Computing Foundation y utilizado por Kubernetes y otros tiempos de ejecución de contenedores, incluidos RedHat OpenShift® y Apache Mesos, CNI es una especificación estandarizada y un conjunto de API que definen cómo los complementos de red deben habilitar las redes de contenedores. Los complementos de CNI pueden asignar direcciones IP, crear espacios de nombres de red, configurar rutas de red, etc. para permitir la comunicación de pod a pod, tanto dentro del mismo nodo como entre nodos.
Si bien Kubernetes proporciona un CNI predeterminado, numerosos complementos CNI de terceros, incluidos Calico, Flannel y Weave, están diseñados para manejar la configuración y la seguridad en entornos de red basados en contenedores. Aunque cada una de ellas tiene características y enfoques diferentes para las redes, como las redes de superposición o el enrutamiento directo, todas cumplen con las especificaciones CNI compatibles con Kubernetes.
Si quieres empezar a trabajar con Kubernetes o quieres mejorar tus habilidades actuales con Kubernetes y las herramientas del ecosistema de Kubernetes, prueba uno de estos tutoriales.
Formación interactiva basada en navegador para implementar y operar un clúster en IBM Cloud Kubernetes Service. No se requieren descargas ni configuración.
Implemente clústeres seguros y de alta disponibilidad en una experiencia nativa de Kubernetes.
Con Red Hat OpenShift on IBM® Cloud, los desarrolladores OpenShift tienen una forma rápida y segura contenerizar e implementar cargas de trabajo empresariales en clústeres Kubernetes.
IBM Cloud Code Engine, una plataforma serverless totalmente gestionada, le permite ejecutar su contenedor, código de aplicación o trabajo por lotes en un tiempo de ejecución de contenedor totalmente gestionado.
Desarrolle sus habilidades en Kubernetes realizando los cursos contenidos en la certificación IBM® Cloud Professional Developer.
Estudiantes exponen sus obras con Red Hat® OpenShift® en IBM® Cloud.
Los contenedores forman parte de una estrategia de nube híbrida que permite crear y gestionar cargas de trabajo desde cualquier lugar.
Kubernetes es una plataforma de orquestación de contenedores para programar y automatizar la implementación, la administración y el escalado de aplicaciones en contenedores.
Los contenedores son unidades ejecutables de software en las que el código de la aplicación se empaqueta junto con sus bibliotecas y dependencias, de forma común para que el código pueda ejecutarse en cualquier lugar.
La orquestación de contenedores automatiza y simplifica el suministro, la implementación y la gestión de aplicaciones en contenedores.