Conceptos de redes para contenedores de Kubernetes
Kubernetes es una plataforma de código abierto portable y extensible para la automatización de la implementación, el escalado y la administración de cargas de trabajo contenedorizadas. Como plataforma de orquestación, Kubernetes ofrece la misma facilidad de uso y flexibilidad que las ofertas de plataforma como servicio (PaaS) e infraestructura como servicio (IaaS).
Importante
Para configurar redes de Kubernetes, deberá comprender conceptos como redes virtuales, equilibradores de carga, proxies inversos.
Clústeres y nodos
Kubernetes se basa en clústeres. En lugar de tener una sola máquina virtual, se usan varias máquinas virtuales denominadas nodos que funcionan en conjunto como si fuera una sola. Kubernetes usa una arquitectura de clúster que consta de un nodo principal y uno o varios nodos de trabajo. El nodo principal ejecuta los componentes del plano de control, como el servidor de API, el programador y el administrador del controlador. Los nodos de trabajo ejecutan los componentes del plano de datos, como el kubelet, el kube-proxy y el runtime del contenedor.
El componente kube-proxy es responsable de las redes de clústeres locales y se ejecuta en cada nodo. Garantiza que cada nodo tenga una dirección IP única. También implementa reglas para controlar el enrutamiento y el equilibrio de carga del tráfico con tablas de IP y un servidor de IP virtual. Este proxy no presta servicios DNS por sí mismo. Se recomienda usar un complemento de clúster DNS basado en CoreDNS, que se instala de forma predeterminada.
Pods
Un pod de Kubernetes agrupa los contenedores y las aplicaciones en una estructura lógica. Estos pods no tienen inteligencia y se componen de uno o varios contenedores de aplicaciones. Cada uno tiene una dirección IP, reglas de red y puertos expuestos.
Una implementación de Kubernetes es una evolución de pods. Una implementación encapsula los pods en un objeto inteligente que les permite escalarse horizontalmente. Puede duplicar y escalar fácilmente la aplicación para que admita más carga sin necesidad de configurar reglas de red complejas.
Recursos de capa de abstracción
Para permitir el acceso a las aplicaciones o entre los componentes de las aplicaciones, Kubernetes proporciona una capa de abstracción para la red virtual. Los nodos de Kubernetes se conectan a una red virtual, que proporciona conectividad de entrada y salida para los pods. El componente kube-proxy se ejecuta en cada nodo para proporcionar estas características de red.
En Kubernetes:
- Los servicios agrupan lógicamente los pods para permitir el acceso directo a un puerto específico mediante una dirección IP o nombre DNS.
- ServiceTypes le permite especificar qué tipo de servicio quiere.
- Puede distribuir el tráfico mediante un equilibrador de carga.
- El enrutamiento de capa 7 del tráfico de la aplicación también se puede lograr con controladores de entrada.
- Puede controlar el tráfico de salida de los nodos del clúster.
- La seguridad y el filtrado del tráfico de los pods es posible con las directivas de red.
Redes en Kubernetes
Kubernetes tiene requisitos específicos para implementar redes para un clúster. Las opciones de configuración afectan cómo se puede exponer las aplicaciones en la red del clúster y cómo almacenar datos. Para simplificar la comunicación, Kubernetes espera que configuremos las funciones de red de manera que permita lo siguiente:
- Los pods pueden comunicarse entre sí entre nodos sin traducción de direcciones de red (NAT).
- Los nodos y pods pueden comunicarse entre sí sin NAT.
- Los agentes de un nodo pueden comunicarse con todos los nodos y pods.
La configuración de un contenedor y los datos que contenga no son persistentes entre las ejecuciones. Después de eliminar un contenedor, toda la información desaparece a menos que esté configurado para usar un volumen. Lo mismo se aplica a la configuración de red del contenedor y a las direcciones IP asignadas que tiene asignadas.
Una implementación es una agrupación lógica de pods. No se considera una carga de trabajo física y no se le asigna una dirección IP. A cada pod, se le asigna automáticamente una dirección IP, que se pierde cuando se destruye el pod. Este comportamiento hace que una estrategia de configuración de red manual sea compleja.
Opciones de red de Kubernetes para contenedores de Windows
Al implementar Kubernetes con contenedores de Windows, tiene dos opciones de red: Servicios y Controlador de entrada. Para usar estas opciones, Windows depende de los complementos de interfaz de red de Container Network Interface (CNI).
Con el fin de simplificar la configuración de red para las cargas de trabajo de la aplicación, Kubernetes usa servicios con el objetivo de agrupar de forma lógica un conjunto de pods y proporcionar conectividad de red. El servicio funciona como punto de entrada para el grupo de pods y proporciona una dirección IP estática. El tráfico llega al servicio del grupo y se distribuye a los pods en un patrón round robin. A medida que cambian las direcciones IP de los pods a lo largo del tiempo, el servicio realiza un seguimiento de los cambios para garantizar el flujo correcto del tráfico de red a los pods.
Las aplicación contenedorizada que se ejecutan en Kubernetes deben enviar y recibir datos a través de Internet. Kubernetes admite esta comunicación a través de componentes de entrada y salida. El controlador de entrada especifica qué tráfico y orígenes pueden conectarse a los servicios. El controlador de salida permite conectar las aplicaciones a entidades externas a través de una puerta de enlace de Internet.
Los complementos de CNI permiten a Kubernetes usar interfaces de red diferentes para las redes de contenedores. Los complementos conectan los pods a la red y asignan las direcciones IP de los pods. Interactúan con Windows Host Networking Service (HNS) y Host Compute Service (HCS) para crear y administrar recursos de red para contenedores de Windows. Algunos ejemplos de complementos son Calico, Flannel y Azure CNI.
ServiceTypes de Kubernetes
Para configurar el servicio deseado, puede especificar uno de los siguientes ServiceTypes de Kubernetes:
- ClusterIP crea una dirección IP interna para usarse dentro del clúster. Este servicio solo es útil para las aplicaciones internas que admiten otras cargas de trabajo dentro del clúster. Este es el valor predeterminado que se usa si no especifica explícitamente un tipo para un servicio.
- NodePort crea una asignación de puerto en el nodo subyacente que permite que se pueda acceder a la aplicación directamente con la dirección IP del nodo y el puerto
- LoadBalancer crea un recurso de equilibrador de carga, configura una dirección IP externa y conecta los pods solicitados al grupo de back-end del equilibrador de carga. Para permitir que el tráfico de los clientes llegue a la aplicación, se crean reglas de equilibrio de carga en los puertos deseados.
Para el equilibrio de carga HTTP/S del tráfico entrante, otra opción es usar un controlador de entrada.
- ExternalName crea una entrada de DNS específica para acceder a la aplicación con más facilidad.
Entrada de Kubernetes
El componente de entrada de Kubernetes expone rutas para el tráfico HTTP y HTTPS desde fuera de un clúster a los servicios que contiene. Las rutas de entrada se definen mediante reglas de entrada. Si no se definen estas rutas, un clúster de Kubernetes rechaza todo el tráfico entrante.
Controlador de entrada
Un controlador de entrada es un software que proporciona el enrutamiento del tráfico configurable para los servicios de Kubernetes. Los recursos de entrada de Kubernetes se usan para configurar las reglas de entrada y las rutas de los distintos servicios de Kubernetes. Con un controlador de entrada y reglas de entrada se puede usar una sola dirección IP para enrutar el tráfico a varios servicios en un clúster de Kubernetes. Después de implementar el controlador en su entorno, puede crear e implementar el manifiesto de entrada. Kubernetes usa controladores de entrada para administrar la configuración de entrada en un clúster y ofrece varias características.
Reglas de entrada
Las reglas de entrada definen de dónde procede el tráfico y a dónde se dirige dentro de un clúster. Las reglas de entrada se definen en un archivo de manifiesto de implementación de entrada. Estas reglas se definen en la clave de reglas del archivo de manifiesto. Cada regla es un conjunto de valores que describe la regla.
Anotaciones de entrada
Una anotación le permite adjuntar metadatos que no son de identificación, como configuraciones de entrada para cargas de trabajo. Puede considerar la anotación como una etiqueta interna que define configuraciones específicas para los recursos. Por ejemplo, es posible que quiera usar un controlador de entrada específico que admita la reescritura de nombres o la limitación de cargas.
Directivas de red
Kubernetes proporciona la característica Directiva de red para controlar el flujo de tráfico de red entre pods. Puede permitir o denegar el tráfico en función de la configuración de las etiquetas asignadas, el espacio de nombres y el puerto de tráfico. Las directivas de red ofrecen un enfoque nativo de la nube que es ideal para controlar el tráfico entre pods de Kubernetes.