Prefacio
Ahora, no importa qué nueva tecnología, aparece un nuevo marco, que hay 2
un problema es que no estamos abiertos, incluido el sistema operativo, incluso no abiertos en torno a este 2
problema, 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 Docker
cuestiones clave a resolver. Hoy aprenderemos juntos Docker
sobre las soluciones de red.
Solución de red en Docker
En Docker
la red los problemas son 3
tipos 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 kubernetes
observar el clúster, se resuelve el mismo problema. Sin embargo kubernetes
, tiene algunas limitaciones, todas las implementaciones de redes deben seguir CNI
estándares (estándares kubernetes
definidos por la comunidad o las empresas para facilitar la expansión). CNI
Las normas se pueden resumir en tres capítulos y cuatro objetivos . como sigue:
Tres capítulos:
pod
Conpod
comunicación directa, no es necesario mostrar el usoNAT
node
Conpod
comunicación directa, no es necesario mostrar el usoNAT
pod
LaIP
dirección visible espod
propiedad de otros cuando se comunica con ella, sin conversión de pantalla.
Cuatro goles:
- Contenedor dando comunicación de contenedor
pod
Y lapod
comunicación entrepod
Y laservice
comunicación entreservice
Comunicació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 3
soluciones mencionadas anteriormente una por una .
Franela
flannel
Por parte del coreos
equipo de desarrollo, el comienzo del diseño es resolver todos los nodos en el clúster, planificando el ip
uso 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 内网IP
comunicar directamente .
La estructura general es la siguiente:
- 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.
etcd
También almacena este correspondiente a cada hostip
.flannel
Usaretcd
unwatch
mecanismo para monitorear/coreos.com/network/subnets
la 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/16
segmento de uso de red superpuesto y cada host tiene/24
una subred. Paquete tan主机a
aceptable10.100.5.0/24
,主机B
aceptable10.100.18.0/24
.flannel
Se utilizaetcd
para mantenerip
el mapeo entre la subred asignada y la dirección real . Para la ruta de datos,flannel
utiliceudp
para encapsularip数据报
y reenviar al host remoto. Se eligió eludp
protocolo porque puede penetrar el firewall.
Un proceso de comunicación completo es el siguiente
- El paquete de datos se envía desde el contenedor de origen y se
docker0
reenvía aflannel0
- Después de que la fuente
flanneld
escucha este paquete de datos, ¿a quién se le debe analizar el paquete de datosflanneld
? Una fuenteflanneld
deetcd
información de enrutamiento de consulta interna de la dirección de destino - El host de origen
flanneld
luegoUDP
encapsula 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
- El extremo opuesto
flanneld
recibe el paquete de datos, lo desempaqueta y lo envía a laflannel0
tarjeta de red, y luego lo reenvía a ladocker0
tarjeta de red. - Finalmente
docker0
enrutado 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 ip
direcciones y identifiers
recursos para ubicar recursos. Es decir, TCP
los 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 VPC
y GCE
el encaminamiento modo de transmisión de datos.
Tejido
weave
Fue desarrollado por la weaveworks
empresa y su propósito es resolver la Docker
comunicación entre hosts y conectar contenedores en múltiples nodos para formar una red de área local. No requiere KV Store
almacenamiento.
Una weave
red se compone de una serie peers
( WRoute
), que WRoute
se almacenan en diferentes hosts. Conéctese entre diferentes hosts WRoute
mediante weave connect
comandos. Esto significa que puede especificar la topología de red del clúster usted mismo.
El diagrama de arquitectura general es el siguiente:
- Hay uno implementado en cada
Docker
host implementado (ya sea una máquina física o una máquina virtual)WRouter
, y también se puede implementar en forma de contenedor.weave
La red se compone de estosweave routers
extremos del mismo nivel (peer
) y laweave
topología de la red se puede personalizar a través de la línea de comandos. - Se
WRoute
establecerá2
una conexión entre cada
- Una
tcp
conexión para el protocolo de enlace e intercambio de información de topología de red. El6783
puerto predeterminado . - Una
udp
conexión para la transferencia de información en el plano de datos. El6783
puerto predeterminado .
- Por el lado de los datos, se realiza
weave
medianteudp
encapsulaciónL2 Overlay
.2
Modos de soporte de encapsulación de datos
sleeve mode
: El modo de usuario, a travéspcap
del dispositivo enLinux bridge
los paquetes de datos interceptados por el paquetewRouter
completoUDP
, admiteL2 traffic
cifrado, admitePartial Connection
, pero pérdida significativa de rendimientofastpath mode
: Modo kernel, a travésOVS
delodp
empaquetadoVxlan
, MPLS,WRouter
no directamente involucrado en el reenvío, este enfoque puede mejorar significativamente el rendimiento, no admite el cifrado
sleeve mode
El patrón es el siguiente:
fastpath mode
El patrón es el siguiente:
Lo anterior es realmente weave
la información básica y la estructura general bajo la introducción , pasemos a un diagrama de flujo más detallado, como sigue:
weave
Se requiere que cada contenedor tenga dos tarjetas de red, una está conectada al puente para manejar elL2
tráfico y la otra está conectadadocker0
aweave-bridge
: Elweave
puente creado, un extremo del puente está conectado al contenedor y un extremo estáweave
docker0
:docker
Red nativa, utilizada para comunicarse con el contenedor de host,Docker0
detrás de ella todavía está laiptables nat
implementación
Los pasos para la comunicación entre contenedores en la figura anterior son los siguientes:
container1
Porveth1
el tráfico que pasa a del huéspedweave-bridge
puente de redWRoute
Utilicepcap
paquetes 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 seWRoute
encapsulan enUDP
paquetes de datos y se transfieren a todos los demás hosts.- En otros hosts,
WRoute
desencapsule el paquete después de recibirlo, luegopcap
inyecte el paquete en la interfaz del puente y luegoveth
reenvíe el tráfico al contenedor a través del puente.
Calicó
calico
Piense 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 calico
solució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 etcd
almacenar metadatos de red.
La estructura general es la siguiente:
Felix
:calico agent
, Responsable de configurar el enrutamiento yACL
(control de acceso), etc.etcd
: Almacenamiento de metadatos de red para garantizarcalico
un estado de red constanteBGP Client(BIDR)
: Principalmente responsable deFelix
escribirkernel
y distribuir información de enrutamiento a laCalico
red actual para garantizarworkload
la efectividad de la comunicación entreBGP Route Reflector(BIRD)
: El despliegue de uso a gran escala, deshacerse de todos los nodos enmesh
modo interconectado , uno o másBGP Route Reflector
para completar la distribución de ruta centralizadacalico-ipam
: Se utiliza principalmente parakubernetes-cni
complementos, no está escrito aquí.
Ejecutará dos programas principales en cada nodo. Uno es Felix
que monitoreará ECTD
el almacenamiento del centro y obtendrá eventos de él. Por ejemplo, el usuario agrega uno a esta máquina IP
o asigna un contenedor. A continuación, se creará un contenedor en esta máquina, y se 网卡、IP、MAC
configurará, y luego se escribirá una entrada en la tabla de enrutamiento del kernel, indicando que IP
debe ir a esta tarjeta de red. BGP Client
Es un programa de enrutamiento estándar. Obtendrá del kernel qué IP
rutas han cambiado y luego se BGP
extenderá a todos los demás hosts a través del protocolo de enrutamiento estándar, de modo que el mundo exterior sepa que esto IP
está aquí, y llegará aquí cuando realice la ruta. Ven.
Calico
Método de red:
calico
Hay dos tipos de métodos de red, como sigue:
IPinIP
: Equivale a un puente de red básico. Solo unoip隧道
BGP
: Border Gateway Protocol, un protocolo de enrutamiento autónomo descentralizado central en Internet
Calico concluye:
Debido a que Calico
es 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 |