Redes de Kubernetes: una guía completa para comprender el modelo de red
Publicado: 2020-02-18La gestión de contenedores es un aspecto vital de la creación de redes. Con los cambiantes requisitos de tráfico actuales, la importancia de Kubernetes se ha multiplicado por diez. Y si está interesado en aprender sobre redes, primero deberá familiarizarse con Kubernetes. Aprender sobre Kubernetes lo ayudará a manejar la administración de contenedores de manera efectiva. Kubernetes también es una de las principales herramientas de DevOps del mercado para 2020.
Pero no se preocupe porque, en esta guía detallada, hablaremos de lo mismo. Kubernetes es una herramienta de administración de contenedores y, en este artículo, aprenderá por qué se usa, cuáles son los componentes de su red y cómo enrutan el tráfico.
Aprenda ingeniería de software en línea de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.
Sumerjámonos.
Tabla de contenido
¿Qué es Kubernetes?
Antes de comenzar a hablar sobre las redes en Kubernetes, debemos considerar los conceptos básicos de esta herramienta. De esta manera, no enfrentará confusión más adelante en el artículo y tendrá una comprensión básica de todo lo mencionado aquí.
Kubernetes es una herramienta de orquestación de contenedores de código abierto. Lo ayuda con la administración de contenedores, que se han convertido en el aspecto más crítico de las redes en estos días. Kubernetes tiene muchas funciones, incluido el escalado de contenedores, el despliegue de contenedores, el desescalado de contenedores, etc.

Mientras que Docker ayuda a los profesionales con la creación de contenedores, Kubernetes los ayuda en la gestión de los mismos. Es por eso que ambos son tan importantes. Kubernetes ejecuta un sistema distribuido en un clúster. Comprender su estructura y su red le permitirá evitar errores y administrar contenedores sin errores.
¿Por qué se utiliza Kubernetes?
Los requisitos de contenedores de las empresas han aumentado enormemente en los últimos años. A menos que sean demasiado pequeños, no pueden depender de uno o dos contenedores. Necesitarían tener un gran conjunto de contenedores para equilibrar la carga. El requisito podría ser de cientos para mantener una alta disponibilidad y equilibrar el tráfico.
Cuando el tráfico aumentaría, necesitarían más contenedores para manejar las solicitudes. Del mismo modo, cuando el tráfico sea menor, será necesario reducir los contenedores. Administrar los contenedores de acuerdo con la demanda puede ser un desafío, especialmente si lo hace manualmente.
Orquestar manualmente los contenedores puede requerir mucho tiempo y recursos, que fácilmente se habrían gastado en otro lugar. La automatización de esta tarea simplifica mucho las cosas. Entonces no tendría que preocuparse por escalar y descalcificar los contenedores. Eso es lo que hace Kubernetes. Lea cómo crear proyectos DevOps para principiantes con la ayuda de Kubernetes en nuestro artículo sobre proyectos principales de DevOps para principiantes.
Automatiza la orquestación y gestión de contenedores. Es muy popular debido a su funcionalidad. Es un producto de Google y su rendimiento ayuda considerablemente a las organizaciones a automatizar el escalado de contenedores.
Componentes de Kubernetes
Ahora que sabe qué es Kubernetes y cuáles son sus funciones, podemos comenzar a analizar sus múltiples componentes. Puede comprender la creación de redes en esta herramienta solo después de familiarizarse con sus diferentes partes. Sin embargo, no hay mucho de qué preocuparse. Eso es porque estamos aquí para ayudar. A continuación se presenta una breve descripción de sus diversos componentes. Aunque la descripción es concisa, debería ser suficiente para darle una idea general.
vainas
¿Recuerdas los átomos en química, los objetos independientes más pequeños de la materia? Bueno, los Pods son los átomos de Kubernetes. One Pod es una carga de trabajo en un clúster. Puede contener uno o varios contenedores con almacenamiento. Cada Pod tiene una dirección IP única que actúa como su identidad cuando interactúa con otros componentes de Kubernetes. Todos los contenedores de un pod están programados y ubicados dentro de la misma máquina.
Controladores
Los controladores construyen los Kubernetes. Los controladores observan el estado del servidor API para asegurarse de que su estado actual coincida con el estado que ha especificado. Si el estado del servidor API cambia por algún motivo, reacciona en consecuencia. Los controladores utilizan un bucle para verificar los estados de los clústeres y compararlos con los estados requeridos. También puede realizar tareas para cambiar el estado actual al estado necesario.
Nodos
Si los Pods son los átomos, los Nodos son los engranajes de Kubernetes. Ejecutan el clúster. Las máquinas virtuales son nodos accesibles en los clústeres de Kubernetes. Mucha gente tiende a usar la palabra "host" en lugar de "nodo". Hemos tratado de usar el término nodos de manera consistente en este artículo.
Servidor API
El servidor API es la puerta de entrada al almacén de datos en Kubernetes. Le permite especificar el estado deseado para los clústeres. Deberá realizar llamadas a la API si desea cambiar el estado de su clúster de Kubernetes y describir su estado requerido.
Como está familiarizado con los componentes de la red de Kubernetes, podemos comenzar con su modelo de red y cómo funciona.
Explicación de las redes de Kubernetes
La red de Kubernetes sigue un modelo específico que tiene las siguientes restricciones:
- Los pods se comunican con todos los demás pods sin traducción de direcciones de red
- Nods puede comunicarse con Pods sin traducción de direcciones de red
- La IP de un Pod que otros Pods ven por él es la misma IP que ve por sí mismo
Debido a estas restricciones, Kubernetes tiene solo unas pocas secciones de redes. Ellos son:
- Transferencias de contenedor a contenedor
- Transferencias de pod a pod
- Transferencias de pod a servicio
- Transferencias de Internet a servicio
Contenedor a contenedor
Puede pensar que en las redes, una máquina virtual interactúa directamente con un dispositivo ethernet, pero hay más que eso.
Si usa Linux, el espacio de nombres de red le proporcionará una pila de red que tiene sus dispositivos de red, rutas y reglas para el firewall. Cada proceso en ejecución en Linux se comunicaría con este espacio de nombres de red.
Un pod posee un grupo de contenedores dentro de un espacio de nombres de red. Estos contenedores tienen el mismo espacio de puerto y dirección IP, que se les asigna a través del espacio de nombres de la red. Estos contenedores se encuentran entre sí a través de localhost porque están ubicados en el mismo espacio de nombres. Si sus aplicaciones están dentro de un pod, también pueden acceder a los volúmenes compartidos.

Vaina a vaina
Los pods se comunican entre sí a través de sus direcciones IP. Cada Pod tiene una dirección IP real y distinta en Kubernetes. Ya sabes qué son los Pods, así que no hace falta que toquemos ese tema. Sabemos que Kubernetes usa IPs para facilitar la comunicación entre pods; vamos a discutir cómo lo hace.
Los pods se comunican a través de sus nodos. Es por eso que para comprender la comunicación de pod a pod, y deberá comprender la interacción entre los nodos.
- Comunicación entre nodos
- Comunicación intranodo
Hablaremos de cada uno de ellos en detalle:
Comunicación entre nodos
Cuando los nodos estén situados en diferentes pods, se comunicarán a través de este método. Podemos entender este método de comunicación a través de un ejemplo sencillo. Supongamos que hay cuatro redes de módulos distintas, a saber, módulo 1, módulo 2, módulo 3, etc. Los pods 1 y 2 están ubicados en la red raíz del nodo 1, y los pods 3 y 4 están ubicados en la segunda red.
Debe transferir un paquete del módulo 1 al módulo 4.
El paquete primero tiene que salir de la red del módulo 1 e ingresar a la red raíz a través de veth0. Pasa por el puente de Linux, lo que le ayuda a encontrar su destino. Como el nodo no tiene un objetivo dentro de su Pod, se envía de vuelta a la interfaz eth0. Ahora deja el primer nodo para la tabla de rutas. La tabla de rutas enruta el paquete al nodo requerido, que se encuentra en pod4. El paquete llega primero al nodo 2, luego llega al puente, que lo dirige a su destino.
Comunicación intranodo
La comunicación intranodo tiene lugar cuando los nodos están situados en el mismo Pod. Podemos explicar la comunicación entre nodos de la misma manera que explicamos la comunicación entre nodos. En estos casos, el paquete viaja desde el primer Pod en eth0. Entra en la red raíz a través de veth0. Luego tiene que pasar al puente, después de lo cual va a la IP designada.
Así es como los pods se comunican entre sí en Kubernetes. Pasemos a la siguiente sección.
Pod a servicio
Ya vio en la sección anterior cómo se enruta el tráfico entre las direcciones IP de los pods. Sin embargo, hay un problema con las direcciones IP. Las IP de los pods pueden desaparecer y reaparecer según la escala de los contenedores. Por lo tanto, si se escalan los contenedores, la cantidad de IP de pod aumentará y viceversa.
Los servicios ayudan en la gestión de esta situación. Aquí tienes una breve explicación de qué servicios hay en Kubernetes, para que no tengas ninguna confusión.
¿Qué son los servicios en Kubernetes?
Los servicios en Kubernetes configuran proxies que tienen que transferir solicitudes a un grupo de pods. Esos pods obtienen tráfico y el selector se encarga de esta tarea. Después de la creación de un servicio, recibe una dirección IP que maneja sus solicitudes. Hay varios tipos de servicios, y debemos discutirlos antes de pasar a la comunicación de servicio de Pod.
Hay un total de 4 tipos de servicios en Kubernetes. Ellos son:
- IP de clúster
- Puerto de nodo
- equilibrador de carga
- ExternalName
ClusterIP es el tipo de servicio predeterminado. En este tipo, solo se puede acceder al servicio en el clúster. En NodePort, el servicio está expuesto a la IP de cada nodo. El NodePort enruta a un servicio ClusterIP como el sistema lo crea de antemano. A diferencia de ClusterIP, puede comunicarse con este servicio fuera de un clúster.
LoadBalancer utiliza el balanceador de carga de una nube para exponer el servicio a redes externas. NodePort y ClusterIP se crean automáticamente debido a esto, y el servicio ExternalName lo transfiere como refleja un registro CNAME.
Ahora que sabe qué son los servicios y cuántos tipos de servicios hay, analicemos cómo se lleva a cabo la comunicación de pod a servicio.
¿Cómo funciona?
En este escenario, el paquete sale del Pod a través de eth0. Va al puente a través del dispositivo Ethernet desde donde se transfiere a la ruta predeterminada de eth0. Sin embargo, tiene que pasar por iptables antes de que sea aceptado en eth0. Las iptables determinan el destino del paquete usando las reglas especificadas que tiene y envía el paquete al Pod requerido. Una vez hecho esto, el paquete va a la IP real de un pod en lugar de a la IP virtual del servicio.
Servicio externo
Los tres métodos anteriores de enrutamiento de tráfico se referían solo a Kubernetes. Pero en casos reales, lo más probable es que tenga que conectar su red de Kubernetes a una red de terceros para enrutar el tráfico. Y esta sección es más o menos lo mismo.
Cuando se conecta con una red externa, Kubernetes puede realizar dos funciones:
- Enrutar el tráfico de Internet a su red.
- Enrutar el tráfico de su red a Internet.
El primero requiere una red de entrada y el segundo requiere una red de salida. Echemos un vistazo a ellos.
Ingreso
Enrutar su tráfico desde una red pública a su sistema Kubernetes es muy complicado. Requiere LoadBalancer y Controller para manejar los paquetes. Aquí hay un ejemplo de cómo funciona.
Primero, implementará un servicio y su proveedor de nube creará un nuevo balanceador de carga. El equilibrador de carga distribuirá el tráfico entre las máquinas virtuales dentro de su clúster mediante el uso del puerto designado de su servicio. Aquí, las iptables transfieren el tráfico que obtienen del balanceador de carga al Pod requerido. El Pod responderá al cliente con su IP, y conntrack ayuda a reescribir las IP de la manera correcta.
Los balanceadores de carga de capa 7 presentes en la red son capaces de segmentar el tráfico entrante de acuerdo con las URL y las rutas. Esto es muy útil cuando trabaja con una red Ingress.
Salida
Cuando enruta el tráfico desde un nodo de su red de Kubernetes a Internet, depende mucho de las configuraciones de su red en cuanto a cómo funcionaría todo. Discutiremos un ejemplo general aquí para tocar el tema.
El paquete comienza desde el espacio de nombres del Pod y va al espacio de nombres raíz a través del veth. Luego va al puente desde donde viaja al servicio predeterminado porque la IP a la que debe ir no está conectada con el puente. Pasa por iptables mientras va al espacio de nombres raíz.

Lea: Requisito previo para DevOps: no es lo que cree que es
Ahora las puertas de enlace de Internet solo aceptan direcciones IP que están conectadas con máquinas virtuales. Y el pod de origen de nuestro bolsillo no está conectado con una máquina virtual. Entonces, las iptables hacen un NAT de origen y cambian el origen del paquete. Ahora llega a la puerta de enlace de Internet donde pasa por otro NAT y luego ingresa a la Internet pública (su destino).
Y esto es todo. Ahora ya sabe todo sobre las redes de Kubernetes y sus diversos componentes.
Conclusión
Kubernetes es, sin duda, una de las herramientas esenciales que debe aprender si está interesado en la creación de redes. Quienes no estén familiarizados con este campo no sabrán cuán vital es. Administrar contenedores y enrutar el tráfico de acuerdo con esos requisitos de tráfico puede ayudarlo considerablemente. Hemos tratado de mantener esta guía lo más clara posible para ayudarlo a comprender todo.
Si desea aprender y dominar Kubernetes, DevOps y más, consulte el programa Executive PG de IIIT-B & upGrad en desarrollo de software: especialización en desarrollo de pila completa.