Notas de estudio del programa de implementación de la red Docker

Prefacio

Ahora, no importa qué nueva tecnología, aparece un nuevo marco, que hay 2un problema es que no estamos abiertos, incluido el sistema operativo, incluso no abiertos en torno a este 2problema, pero también una pregunta muy básica - 网络y 存储.
Recuerde los siguientes marcos aprendidos antes, recuerde los siguientes principios del sistema operativo, ¿es imposible pasar por alto estos dos puntos? Estos dos puntos son la base de todos los procedimientos y también son Dockercuestiones clave a resolver. Hoy aprenderemos juntos Dockersobre las soluciones de red.

Solución de red en Docker

En Dockerla red los problemas son 3tipos de soluciones. como sigue:

  • Flannel
  • Weave
  • Calico

Su propósito no es más que resolver el mismo problema: ¿cómo hacer que los contenedores se comuniquen entre sí? Este problema se vuelve a escalar y, al kubernetesobservar el clúster, se resuelve el mismo problema. Sin embargo kubernetes, tiene algunas limitaciones, todas las implementaciones de redes deben seguir CNIestándares (estándares kubernetesdefinidos por la comunidad o las empresas para facilitar la expansión). CNILas normas se pueden resumir en tres capítulos y cuatro objetivos . como sigue:

Tres capítulos:

  • podCon podcomunicación directa, no es necesario mostrar el usoNAT
  • nodeCon podcomunicación directa, no es necesario mostrar el usoNAT
  • podLa IPdirección visible es podpropiedad de otros cuando se comunica con ella, sin conversión de pantalla.

Cuatro goles:

  • Contenedor dando comunicación de contenedor
  • podY la podcomunicación entre
  • podY la servicecomunicación entre
  • serviceComunicación externa

Además, en general, las principales plataformas en la nube combinarán sus propias soluciones de red para lograr una solución y las ignorarán por ahora. Estudiemos las 3soluciones mencionadas anteriormente una por una .

Franela

flannelPor parte del coreosequipo de desarrollo, el comienzo del diseño es resolver todos los nodos en el clúster, planificando el ipuso de la dirección de reglas, de modo que el contenedor se pueda obtener en diferentes nodos 同一个内网y 不重复的IP地址, y pertenezca al contenedor en diferentes nodos, se pueda 内网IPcomunicar directamente .

La estructura general es la siguiente:
Inserte la descripción de la imagen aquí

  • Flannel utiliza etcd para almacenar datos de configuración e información de asignación de subredes. Una vez iniciada la franela, el proceso en segundo plano primero recupera la configuración y la lista de subredes en uso, luego selecciona una subred disponible y luego intenta registrarla. etcdTambién almacena este correspondiente a cada host ip. flannelUsar etcdun watchmecanismo para monitorear /coreos.com/network/subnetsla siguiente información para todos los elementos de cambio y mantenerla de acuerdo con una tabla de enrutamiento.
  • Cada host está configurado con un segmento ip y el número de subredes. Por ejemplo, puede configurar un 10.100.0.0/16segmento de uso de red superpuesto y cada host tiene /24una subred. Paquete tan 主机aaceptable 10.100.5.0/24, 主机Baceptable 10.100.18.0/24. flannelSe utiliza etcdpara mantener ipel mapeo entre la subred asignada y la dirección real . Para la ruta de datos, flannelutilice udppara encapsular ip数据报y reenviar al host remoto. Se eligió el udpprotocolo porque puede penetrar el firewall.

Un proceso de comunicación completo es el siguiente

  1. El paquete de datos se envía desde el contenedor de origen y se docker0reenvía aflannel0
  2. Después de que la fuente flanneldescucha este paquete de datos, ¿a quién se le debe analizar el paquete de datos flanneld? Una fuente flanneldde etcdinformación de enrutamiento de consulta interna de la dirección de destino
  3. El host de origen flanneldluego UDPencapsula el paquete de datos utilizando el protocolo y luego entrega el paquete de datos al extremo opuesto de acuerdo con la tabla de enrutamiento.flanneld
  4. El extremo opuesto flanneldrecibe el paquete de datos, lo desempaqueta y lo envía a la flannel0tarjeta de red, y luego lo reenvía a la docker0tarjeta de red.
  5. Finalmente docker0enrutado al contenedor final.

Flannel concluyó que
flannel es esencialmente un tipo "覆盖网络(overlay network)", lo que significa que una red que se ejecuta en Internet (red de capa de aplicación) no depende de direcciones IP para transmitir mensajes, sino que utiliza un mecanismo de mapeo para asignar ipdirecciones y identifiersrecursos para ubicar recursos. Es decir, TCPlos datos de embalaje en otra red y el reenvío de paquetes de enrutamiento de la comunicación en el interior, ahora soportes UDP, VxLAN, AWS VPCy GCEel encaminamiento modo de transmisión de datos.

Tejido

weaveFue desarrollado por la weaveworksempresa y su propósito es resolver la Dockercomunicación entre hosts y conectar contenedores en múltiples nodos para formar una red de área local. No requiere KV Storealmacenamiento.

Una weavered se compone de una serie peers( WRoute), que WRoutese almacenan en diferentes hosts. Conéctese entre diferentes hosts WRoutemediante weave connectcomandos. Esto significa que puede especificar la topología de red del clúster usted mismo.

El diagrama de arquitectura general es el siguiente:
Inserte la descripción de la imagen aquí

  • Hay uno implementado en cada Dockerhost implementado (ya sea una máquina física o una máquina virtual) WRouter, y también se puede implementar en forma de contenedor. weaveLa red se compone de estos weave routersextremos del mismo nivel ( peer) y la weavetopología de la red se puede personalizar a través de la línea de comandos.
  • Se WRouteestablecerá 2una conexión entre cada
  1. Una tcpconexión para el protocolo de enlace e intercambio de información de topología de red. El 6783puerto predeterminado .
  2. Una udpconexión para la transferencia de información en el plano de datos. El 6783puerto predeterminado .
  • Por el lado de los datos, se realiza weavemediante udpencapsulación L2 Overlay. 2Modos de soporte de encapsulación de datos
  1. sleeve mode: El modo de usuario, a través pcapdel dispositivo en Linux bridgelos paquetes de datos interceptados por el paquete wRoutercompleto UDP, admite L2 trafficcifrado, admite Partial Connection, pero pérdida significativa de rendimiento
  2. fastpath mode: Modo kernel, a través OVSdel odpempaquetado Vxlan, MPLS, WRouterno directamente involucrado en el reenvío, este enfoque puede mejorar significativamente el rendimiento, no admite el cifrado

sleeve modeEl patrón es el siguiente:
Inserte la descripción de la imagen aquí

fastpath modeEl patrón es el siguiente:
Inserte la descripción de la imagen aquí

Lo anterior es realmente weavela información básica y la estructura general bajo la introducción , pasemos a un diagrama de flujo más detallado, como sigue:
Inserte la descripción de la imagen aquí

  • weaveSe requiere que cada contenedor tenga dos tarjetas de red, una está conectada al puente para manejar el L2tráfico y la otra está conectada docker0a
  • weave-bridge: El weavepuente creado, un extremo del puente está conectado al contenedor y un extremo estáweave
  • docker0: dockerRed nativa, utilizada para comunicarse con el contenedor de host, Docker0detrás de ella todavía está la iptables natimplementación

Los pasos para la comunicación entre contenedores en la figura anterior son los siguientes:

  1. container1Por veth1el tráfico que pasa a del huésped weave-bridgepuente de red
  2. WRouteUtilice pcappaquetes de datos interceptados y excluya el tráfico de datos reenviado directamente por el kernel a través del puente (tráfico dentro de esta subred, contenedor local, contenedor y host). Los paquetes capturados se WRouteencapsulan en UDPpaquetes de datos y se transfieren a todos los demás hosts.
  3. En otros hosts, WRoutedesencapsule el paquete después de recibirlo, luego pcapinyecte el paquete en la interfaz del puente y luego vethreenvíe el tráfico al contenedor a través del puente.

Calicó

calicoPiense en la pila de protocolos de cada sistema operativo como un enrutador, y luego considere todos los contenedores como terminales conectados a este enrutador, ejecute protocolos de enrutamiento estándar entre enrutadores BGP协议y permítales aprender la topología de la red por sí mismos Cómo reenviar.

Por lo tanto, la calicosolución es una solución pura de tres niveles (no requerida Overlay), lo que significa que las tres capas de cada nodo aseguran la conectividad de tres niveles entre los dos contenedores en la máquina local y entre los dos contenedores en el host. Necesita etcdalmacenar metadatos de red.

La estructura general es la siguiente:
Inserte la descripción de la imagen aquí

  • Felix: calico agent, Responsable de configurar el enrutamiento y ACL(control de acceso), etc.
  • etcd: Almacenamiento de metadatos de red para garantizar calicoun estado de red constante
  • BGP Client(BIDR): Principalmente responsable de Felixescribir kernely distribuir información de enrutamiento a la Calicored actual para garantizar workloadla efectividad de la comunicación entre
  • BGP Route Reflector(BIRD): El despliegue de uso a gran escala, deshacerse de todos los nodos en meshmodo interconectado , uno o más BGP Route Reflectorpara completar la distribución de ruta centralizada
  • calico-ipam: Se utiliza principalmente para kubernetes-cnicomplementos, no está escrito aquí.

Ejecutará dos programas principales en cada nodo. Uno es Felixque monitoreará ECTDel almacenamiento del centro y obtendrá eventos de él. Por ejemplo, el usuario agrega uno a esta máquina IPo asigna un contenedor. A continuación, se creará un contenedor en esta máquina, y se 网卡、IP、MACconfigurará, y luego se escribirá una entrada en la tabla de enrutamiento del kernel, indicando que IPdebe ir a esta tarjeta de red. BGP ClientEs un programa de enrutamiento estándar. Obtendrá del kernel qué IPrutas han cambiado y luego se BGPextenderá a todos los demás hosts a través del protocolo de enrutamiento estándar, de modo que el mundo exterior sepa que esto IPestá aquí, y llegará aquí cuando realice la ruta. Ven.

CalicoMétodo de red:

calicoHay dos tipos de métodos de red, como sigue:

  1. IPinIP: Equivale a un puente de red básico. Solo unoip隧道
  2. BGP: Border Gateway Protocol, un protocolo de enrutamiento autónomo descentralizado central en Internet

Calico concluye:

Debido a que Calicoes una implementación pura de tres capas, puede evitar la operación de encapsulación de paquetes de datos relacionada con el esquema de dos capas. No hay nada en el medio NAT, y no hay ninguno overlay, por lo que su eficiencia de reenvío puede ser la más alta entre todos los esquemas, debido a su El paquete va directamente al original TCP/IP协议栈y su aislamiento también es fácil de realizar gracias a esta pila. Debido a que TCP/IP协议栈proporciona un conjunto completo de reglas de firewall, puede lograr una lógica de aislamiento más compleja mediante las reglas de `IPTABLES.

para resumir

Las ventajas y desventajas de las tres opciones:

Programa ventaja Desventaja
Franela 1. Simple y estable
2. Sin necesidad de NAT
3. Modo de superposición y modo puro de 3 capas
1. No se proporciona la función DNS y solo se puede acceder a los contenedores a través de ip
2. Se requiere etcd
3. No se admite la política de red
Tejido 1. Admite el acceso al nombre de host
2. No es necesario NAT
3. Intercambia información de red por ti mismo sin almacenamiento
4. Admite cifrado
1. Red superpuesta
2. Se requiere una configuración compleja, conexión de tejido o lanzamiento de tejido para unirse a la red
Calicó 1. Tres capas puras, sin superposición, alta eficiencia
2. Admite acceso al nombre de host
3. Sin necesidad de NAT
4. Estrategia de red perfecta
1. Necesita almacenar
2. Debido a que está en la tercera capa, actualmente es compatible con tcp y udp
3. Hay requisitos para la red subyacente y se requiere la dirección MAC de la segunda capa para comunicarse

Supongo que te gusta

Origin blog.csdn.net/Free_time_/article/details/107647236
Recomendado
Clasificación