Redes de Kubernetes: una guía completa de los conceptos de redes en Kubernetes



Este blog sobre Kubernetes Networking profundizará en los conceptos involucrados en Kubernetes, como la comunicación con pods, servicios y redes de entrada.

En el blog anterior sobre , debe haber adquirido conocimientos sobre Kubernetes. En este blog sobre redes de Kubernetes, me centraré principalmente en los conceptos de redes involucrados en Kubernetes.

En este blog sobre redes de Kubernetes, comprenderá los siguientes temas:





¿Qué es Kubernetes?

Puede definir Kubernetes como una herramienta de orquestación de contenedores de código abierto que proporciona una plataforma portátil para automatizar la implementación de aplicaciones en contenedores.

Ahora, cualquier persona que trabaje con Kubernetes debe tener una comprensión clara de Kubernetes Cluster, ya que eso lo ayudará a comprender Kubernetes Networking.



Clúster de Kubernetes

La plataforma Kubernetes ofrece la gestión de estado deseada, que permite que se ejecuten los servicios de clúster, la configuración alimentada en la infraestructura. Dejame explicarte con un ejemplo.

Considere un archivo YAML que tiene toda la información de configuración que debe introducirse en los servicios del clúster. Por lo tanto, este archivo se alimenta a la API de los servicios de clúster, y luego dependerá de los servicios de clúster averiguar cómo programar pods en el entorno. Por lo tanto, suponga que hay dos imágenes de contenedor para el pod 1 con tres réplicas y una imagen de contenedor para el pod 2 con dos réplicas; dependerá de los servicios de clúster asignar estos pares de pod-réplica a los trabajadores.

como hacer una alerta en html

Clúster de Kubernetes - Redes de Kubernetes - Edureka



Consulte el diagrama anterior. Ahora, como puede ver, los servicios de clúster han asignado al primer trabajador con dos pares de réplicas de pod, al segundo trabajador con un solo par de réplica de pod y al tercer trabajador con dos pares de réplica de pod. Ahora, es el proceso de Kubelet el responsable de comunicar los servicios de clúster con los trabajadores.

Entonces, toda esta configuración de servicios de clúster y los propios trabajadores componen esta Clúster de Kubernetes !!

¿Cómo crees que se comunican entre sí estos módulos asignados individualmente?

¡La respuesta está en Kubernetes Networking!

Suscríbete a nuestro canal de youtube para recibir nuevas actualizaciones ..!

Hay principalmente 4 problemas para resolver con los conceptos de redes.

  • Comunicación contenedor a contenedor
  • Comunicación de pod a pod
  • Comunicación de la vaina al servicio
  • Comunicación externa al servicio

Ahora, déjeme decirle cómo se resuelven los problemas anteriores con Kubernetes Networking.

Redes de Kubernetes

La comunicación entre pods, servicios y servicios externos a los de un clúster trae el concepto de redes de Kubernetes.

Entonces, para su mejor comprensión, permítame dividir los conceptos en los siguientes.

  • Comunicación de contenedores y vainas
  • Servicios
  • Conexión de servicios externos a través de la red de ingreso

Comunicación de contenedores y vainas

Antes de decirte cómo se comunican los pods, déjame presentarte qué son los pods.

Vainas

Los pods son unidades básicas de las aplicaciones de Kubernetes, que constan de uno o más contenedores asignados en el mismo host para compartir una pila de red y otros recursos. Por lo tanto, esto implica que todos los contenedores de un pod pueden llegar a otros en un host local.

Ahora, déjeme informarle sobre cómo se comunican estas cápsulas.

Hay 2 tipos de comunicación. los comunicación entre nodos y el comunicación intranodo.

Entonces, comencemos con la comunicación entre nodos, pero antes de eso, permítanme presentarles los componentes de la red de pod.

Intranodo en red

La red de pod intranodo es básicamente la comunicación entre dos nodos diferentes en el mismo pod. Déjame explicarte con un ejemplo.

Suponga que un paquete va de pod1 a pod2.

  • El paquete sale de la red del Pod 1 en eth0 y entra en la red raíz en veth0
  • Luego, el paquete pasa al puente de Linux (cbr0) que descubre el destino mediante una solicitud ARP
  • Entonces, si veth1 tiene la IP, el puente ahora sabe dónde reenviar el paquete.

Ahora, de manera similar, permítame contarle sobre la comunicación de pod entre nodos.

¿Interesado en aprender Kubernetes?
Internodo bajo la red

Considere dos nodos que tienen varios espacios de nombres de red, interfaces de red y un puente de Linux.

Ahora, suponga que un paquete viaja desde pod1 a un pod4 que está en un nodo diferente.

  • El paquete sale de la red del pod 1 y entra en la red raíz en veth0
  • Luego, el paquete pasa al puente de Linux (cbr0) cuya responsabilidad es realizar una solicitud ARP para encontrar el destino.
  • Una vez que el puente se da cuenta de que este módulo no tiene la dirección de destino, el paquete vuelve a la interfaz de red principal eth0.
  • El paquete ahora sale del nodo 1 para encontrar su destino en el otro nodo y entra en la tabla de rutas que enruta el paquete al nodo cuyo bloque CIDR contiene el pod4.
  • Entonces, ahora el paquete llega al nodo2 y luego el puente toma el paquete que hace una solicitud ARP para averiguar que la IP que pertenece a veth0.
  • Finalmente, el paquete cruza el par de tuberías y llega a pod4.

Entonces, así es como las vainas se comunican entre sí. Ahora, sigamos adelante y veamos cómo los servicios ayudan en la comunicación de los pods.

Entonces, ¿qué crees que son los servicios?

Servicios

Básicamente, los servicios son un tipo de recurso que configura un proxy para reenviar las solicitudes a un conjunto de pods, que recibirán tráfico y lo determina el selector. Una vez que se crea el servicio, tiene una dirección IP asignada que aceptará solicitudes en el puerto.

Ahora, existen varios tipos de servicios que le brindan la opción de exponer un servicio fuera de la dirección IP de su clúster.

Tipos de servicios

Existen principalmente 4 tipos de servicios.

ClusterIP: Este es el tipo de servicio predeterminado que expone el servicio en una IP interna del clúster al hacer que el servicio solo sea accesible dentro del clúster.

NodePort: Esto expone el servicio en la IP de cada nodo en un puerto estático. Desde un ClusterIP El servicio, al que se enrutará el servicio NodePort, se crea automáticamente. Podemos contactar con el servicio NodePort fuera del clúster.

LoadBalancer: Este es el tipo de servicio que expone el servicio de forma externa mediante el equilibrador de carga de un proveedor de nube. Entonces, los servicios NodePort y ClusterIP, a los que se enrutará el balanceador de carga externo, se crean automáticamente.

ExternalName : Este tipo de servicio asigna el servicio al contenido del externalName campo devolviendo un CNAME registrar con su valor.

Entonces, chicos, eso era todo sobre servicios. Ahora, es posible que se pregunte cómo se conectan los servicios externos a estas redes, ¿verdad?

Bueno, eso es nada menos que Red de ingreso .

Red de ingreso

Bueno, la red Ingress es la forma más poderosa de exponer servicios, ya que es una colección de reglas que permiten conexiones entrantes, que se pueden configurar para brindar servicios externamente a través de URL accesibles. Entonces, básicamente actúa como un punto de entrada al clúster de Kubernetes que administra el acceso externo a los servicios en un clúster.

Ahora, déjame explicarte el funcionamiento de Ingress Network con un ejemplo.

Tenemos 2 nodos, que tienen el pod y los espacios de nombres de la red raíz con un puente de Linux. Además de esto, también tenemos un nuevo dispositivo ethernet virtual llamado flannel0 (complemento de red) agregado a la red raíz.

Ahora, queremos que el paquete fluya de pod1 a pod 4.

  • Entonces, el paquete sale de la red de pod1 en eth0 y entra a la red raíz en veth0.
  • Luego se pasa a cbr0, que hace la solicitud ARP para encontrar el destino y luego descubre que nadie en este nodo tiene la dirección IP de destino.
  • Entonces, el puente envía el paquete a flannel0 ya que la tabla de rutas del nodo está configurada con flannel0.
  • Ahora, el demonio de franela habla con el servidor API de Kubernetes para conocer todas las IP de los pods y sus respectivos nodos para crear mapeos de IP de pods a IP de nodo.
  • El complemento de red envuelve este paquete en un paquete UDP con encabezados adicionales que cambian las direcciones IP de origen y destino a sus respectivos nodos y envía este paquete a través de eth0.
  • Ahora, dado que la tabla de enrutamiento ya sabe cómo enrutar el tráfico entre los nodos, envía el paquete al nodo2 de destino.
  • El paquete llega a eth0 del nodo2 y vuelve a flannel0 para desencapsularlo y volver a emitirlo en el espacio de nombres de la red raíz.
  • Nuevamente, el paquete se reenvía al puente de Linux para realizar una solicitud ARP para averiguar la IP que pertenece a veth1.
  • El paquete finalmente cruza la red raíz y llega al Pod4 de destino.

Así es como se conectan los servicios externos con la ayuda de una red de entrada. Ahora, mientras hablaba de los complementos de red, permítanme presentarles la lista de complementos de red populares disponibles.

Ahora que les he contado tanto sobre Kubernetes Networking, permítanme mostrarles un caso de estudio de la vida real.

Estudio de caso: Wealth Wizard usando Kubernetes Networking

Wealth Wizards es una plataforma de planificación financiera en línea que combina la planificación financiera y la tecnología de software inteligente para brindar asesoramiento experto a un costo asequible.

Desafíos

Ahora, era extremadamente importante para la empresa descubrir y eliminar rápidamente las vulnerabilidades de código con visibilidad completa de su entorno de nube, pero quería controlar el tráfico a través de restricciones de acceso.

Por lo tanto, usaron la infraestructura de Kubernetes para administrar el aprovisionamiento y la implementación de los clústeres con la ayuda de herramientas para administrar la implementación y configuración de microservicios en los clústeres de Kube.

También utilizaron una función de política de red de Kubernetes para permitirles controlar el tráfico mediante restricciones de acceso.

Ahora, el problema era que estas políticas están orientadas a las aplicaciones y solo pueden evolucionar con las aplicaciones, pero no había ningún componente para hacer cumplir estas políticas.

Entonces, la única solución que la compañía pudo encontrar para esto fue usar un complemento de red y, por lo tanto, comenzaron a usar Weave Net.

Solución

Este complemento de red crea una red virtual que tiene un controlador de políticas de red para administrar y hacer cumplir las reglas en Kubernetes. No solo esto, sino que también conecta los contenedores de Docker en varios hosts y permite su descubrimiento automático.

Por lo tanto, suponga que tiene una carga de trabajo en el clúster y desea detener cualquier otra carga de trabajo en el clúster hablando con ella. Puede lograr esto creando una política de red que restrinja el acceso y solo permita el ingreso a través del controlador de ingreso en un puerto específico.

Ahora, con su implementación en cada nodo de Kubernetes, el complemento administra el enrutamiento entre pods y tiene acceso para manipular las reglas de IPtables. En términos simples, cada política se convierte en una colección de reglas de IPtables, coordinadas y configuradas en cada máquina para traducir las etiquetas de Kubernetes.

Muy bien, ahora que ha analizado tanta teoría sobre Kubernetes Networking, permítame mostrarle cómo se hace en la práctica.

Las manos en

Entonces, asumiendo que todos ustedes han instalado Kubernetes en sus sistemas, tengo un escenario para mostrar.

Suponga que desea almacenar el nombre del producto y la identificación del producto, para eso necesitará una aplicación web. Básicamente, necesita un contenedor para la aplicación web y necesita un contenedor más como MySQL para el backend, y ese contenedor MySQL debe estar vinculado al contenedor de la aplicación web.

¿Qué tal si ejecuto prácticamente el ejemplo mencionado anteriormente?

¡Empecemos!

Paso 1: Cree una carpeta en el directorio que desee y cambie la ruta del directorio de trabajo a esa carpeta.

mkdir HandsOn cd HandsOn /

Paso 2: Ahora cree archivos YAML de implementación para la aplicación web y la base de datos MySQL.

Paso 3: Una vez que cree los archivos de implementación, implemente ambas aplicaciones.

kubectl apply -f webapp.yml kubectl apply -f mysql.yml

Paso 3.1: Compruebe ambas implementaciones.

kubectl obtener implementación

Etapa 4: Ahora, debe crear servicios para ambas aplicaciones.

kubectl aplicar -f webservice.yml kubectl aplicar -f sqlservice.yml

Paso 4.1: Una vez que se crean los servicios, implemente los servicios.

Paso 4.2: Compruebe si los servicios se han creado o no.

kubectl obtener servicio

Paso 5: Ahora, verifique la configuración de los pods en ejecución.

kubectl obtener vainas

Paso 6: Vaya al contenedor dentro de la cápsula de la aplicación web.

kubectl exec -it container_id bash nano var / www / html / index.php

Paso 6.1 : Ahora, cambie el $ servername de localhost al nombre del servicio SQL que es ' webapp-sql1 'En este caso, y $ contraseña de '' a ' edureka ”. Además, complete todos los detalles de la base de datos requeridos y guarde su archivo index.php usando el atajo de teclado Ctrl + x y después de eso presione y para guardar y presionar entrar .

Paso 7: Ahora, vaya al contenedor MySQL presente en el pod.

kubectl exec it container_id bash

Paso 7.1: Obtenga acceso para usar el contenedor MySQL.

mysql -u root -p edureka

Donde -u representa al usuario y -p es la contraseña de su máquina.

Paso 7.2: Cree una base de datos en MySQL que se utilizará para obtener datos de la aplicación web.

CREAR BASE DE DATOS Detalles del producto

Paso 7.3: Utilice la base de datos creada.

USAR Detalles del producto

Paso 7.4: Cree una tabla en esta base de datos en MySQL que se utilizará para obtener datos de la aplicación web.

CREATE TABLE productos (product_name VARCHAR (10), product_id VARCHAR (11))

Paso 7.5: Ahora, salga del contenedor MySQL también usando el comando Salida .

Paso 8: Verifique el número de puerto en el que está funcionando su aplicación web.

kubectl obtener servicios

Paso 8.1: Ahora, abra la aplicación web en su número de puerto asignado.

Paso 9: Una vez que haces clic en Enviar consulta , vaya al nodo en el que se está ejecutando su servicio MySQL y luego entre en el contenedor.

Esto le mostrará la salida de todos los productos de la lista, de los cuales ha completado los detalles.

¿Interesado en aprender Kubernetes?

Si este blog de Kubernetes Networking le pareció relevante, consulte el por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo.