Driver di rete del contenitore Windows
Si applica a: Windows Server 2022, Windows Server 2019, Windows Server 2016
Oltre a sfruttare la rete predefinita "nat" creata da Docker in Windows, gli utenti possono definire le reti di contenitori personalizzate. È possibile creare reti definite dall'utente usando il comando dell'interfaccia della riga di comando di Docker docker network create -d <NETWORK DRIVER TYPE> <NAME>
. In Windows sono disponibili i seguenti tipi di driver di rete:
Driver di rete NAT
I contenitori collegati a una rete creata con il driver "nat" verranno connessi a un commutatore Hyper-V interno e riceveranno un indirizzo IP dal prefisso IP specificato dall'utente (--subnet
). Il port forwarding o il mapping delle porte dall'host contenitore agli endpoint del contenitore è supportato.
Suggerimento
È possibile personalizzare la subnet usata dalla rete "nat" predefinita tramite l'impostazione fixed-cidr
nel file di configurazione del daemon Docker.
Nota
Le reti NAT create in Windows Server 2019 (o versione successiva) non vengono più mantenute dopo il riavvio.
Creazione di una rete NAT
Per creare una nuova rete NAT con subnet 10.244.0.0/24
:
docker network create -d "nat" --subnet "10.244.0.0/24" my_nat
Driver di rete trasparente
I contenitori collegati a una rete creata con il driver "transparent" verranno connessi direttamente alla rete fisica tramite un commutatore Hyper-V esterno . Gli indirizzi IP della rete fisica possono essere assegnati in modo statico (richiede l'opzione --subnet
specificata dall'utente) o dinamico tramite un server DHCP esterno.
Nota
A causa del requisito seguente, la connessione degli host contenitore tramite una rete trasparente non è supportata nelle macchine virtuali di Azure.
Richiede: quando questa modalità viene usata in uno scenario di virtualizzazione (l'host del contenitore è una macchina virtuale) è necessario lo spoofing degli indirizzi MAC.
Creazione di una rete trasparente
Per creare una nuova rete trasparente con subnet 10.244.0.0/24
, gateway 10.244.0.1
, server 10.244.0.7
DNS e ID 7
VLAN:
docker network create -d "transparent" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_transparent
Driver di rete sovrapposto
Usato comunemente dagli agenti di orchestrazione dei contenitori, ad esempio Docker Swarm e Kubernetes, i contenitori collegati a una rete di sovrapposizione possono comunicare con altri contenitori collegati alla stessa rete tra più host contenitore. Ogni rete di sovrapposizione viene creata con la propria subnet IP, definita da un prefisso IP privato. Il driver di rete overlay usa l'incapsulamento VXLAN per ottenere l'isolamento del traffico di rete tra reti contenitore tenant e consente di riutilizzare gli indirizzi IP tra reti sovrapposte.
Richiede: assicurarsi che l'ambiente soddisfi questi prerequisiti necessari per la creazione di reti di sovrapposizione .
Richiede: in Windows Server 2019 questo richiede KB4489899.
Richiede: in Windows Server 2016 è necessario KB4015217.
Nota
In Windows Server 2019 e versioni successive le reti sovrapposte create da Docker Swarm sfruttano le regole NAT VFP per la connettività in uscita. Ciò significa che un determinato contenitore riceve 1 indirizzo IP. Significa anche che gli strumenti basati su ICMP, ping
ad esempio o Test-NetConnection
, devono essere configurati usando le opzioni TCP/UDP nelle situazioni di debug.
Creazione di una rete di sovrapposizione
Per creare una nuova rete di sovrapposizione con subnet 10.244.0.0/24
, server 168.63.129.16
DNS e VSID 4096
:
docker network create -d "overlay" --attachable --subnet "10.244.0.0/24" -o com.docker.network.windowsshim.dnsservers="168.63.129.16" -o com.docker.network.driver.overlay.vxlanid_list="4096" my_overlay
Driver di rete L2bridge
I contenitori collegati a una rete creata con il driver "l2bridge" verranno connessi alla rete fisica tramite un commutatore Hyper-V esterno . In l2bridge il traffico di rete del contenitore avrà lo stesso indirizzo MAC dell'host a causa dell'operazione di conversione degli indirizzi di livello 2 (riscrizione MAC) in ingresso e in uscita. Nei data center questo consente di alleviare lo stress sui commutatori che hanno la necessità di apprendere gli indirizzi MAC di contenitori a volte di breve durata. Le reti L2bridge possono essere configurate in due modi diversi:
- La rete L2bridge è configurata con la stessa subnet IP dell'host contenitore
- La rete L2bridge è configurata con una nuova subnet IP personalizzata
Nella configurazione 2 gli utenti dovranno aggiungere un endpoint nel raggruppamento di rete host che funge da gateway e configurare le funzionalità di routing per il prefisso designato.
Creazione di una rete l2bridge
Per creare una nuova rete l2bridge con subnet 10.244.0.0/24
, gateway 10.244.0.1
, server 10.244.0.7
DNS e ID VLAN 7:
docker network create -d "l2bridge" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_l2bridge
Suggerimento
Le reti L2bridge sono altamente programmabili; Altre informazioni su come configurare l2bridge sono disponibili qui.
Driver di rete L2tunnel
La creazione è identica a l2bridge, ma questo driver deve essere usato solo in Microsoft Cloud Stack (Azure). L'unica differenza rispetto a l2bridge è che tutto il traffico dei contenitori viene inviato all'host di virtualizzazione in cui vengono applicati i criteri SDN, abilitando in tal modo funzionalità come i gruppi di sicurezza di rete di Azure per i contenitori.
Topologie di rete e Gestione indirizzi IP
La tabella seguente illustra in che modo viene fornita la connettività di rete per le connessioni interne (da contenitore a contenitore) ed esterne di ogni driver di rete.
Modalità di rete/driver Docker
Driver di rete Di Windows Docker | Usi tipici | Da contenitore a contenitore (nodo singolo) | Da contenitore a esterno (nodo singolo + multinodo) | Da contenitore a contenitore (multinodo) |
---|---|---|---|---|
NAT (impostazione predefinita) | Valido per gli sviluppatori |
|
Indirizzato tramite la scheda di interfaccia di rete virtuale di gestione (associata a WinNAT) | Non supportato direttamente: richiede l'esposizione delle porte tramite host |
Modalità trasparente | Valido per sviluppatori o distribuzioni di piccole dimensioni |
|
Instradato tramite l'host contenitore con accesso diretto alla scheda di rete (fisica) | Instradato tramite l'host contenitore con accesso diretto alla scheda di rete (fisica) |
Sovrapposizione | Buono per il multinodo; obbligatorio per Docker Swarm, disponibile in Kubernetes |
|
Non supportato direttamente: richiede un secondo endpoint contenitore collegato alla rete NAT in Windows Server 2016 o regola NAT VFP in Windows Server 2019. | Stessa/cross subnet: il traffico di rete viene incapsulato tramite VXLAN e indirizzato tramite la scheda di interfaccia di rete virtuale Mgmt |
L2Bridge | Usato per Kubernetes e Microsoft SDN |
|
Indirizzo MAC del contenitore riscritto in ingresso e in uscita |
|
L2Tunnel | Solo Azure | Stessa/cross subnet: aggiunta di capelli al commutatore virtuale Hyper-V dell'host fisico alla posizione in cui vengono applicati i criteri | Il traffico deve passare attraverso il gateway di rete virtuale di Azure | Stessa/cross subnet: aggiunta di capelli al commutatore virtuale Hyper-V dell'host fisico alla posizione in cui vengono applicati i criteri |
Gestione indirizzi IP
Gli indirizzi IP vengono allocati e assegnati in modo diverso per ogni driver di rete. Windows usa il servizio rete host (HNS, Host Networking Service) per fornire la gestione indirizzi IP per il driver nat e la modalità Docker Swarm (KVS interno) per fornire una gestione indirizzi IP per il driver overlay. Tutti gli altri driver di rete usano una gestione indirizzi IP esterna.
Modalità di rete/Driver | Gestione indirizzi IP |
---|---|
NAT | Allocazione e assegnazione ip dinamica da parte del servizio di rete host (HNS) dal prefisso della subnet NAT interno |
Modalità trasparente | Assegnazione e allocazione IP statica o dinamica (tramite server DHCP esterno) da indirizzi IP all'interno del prefisso di rete dell'host contenitore |
Sovrapposizione (Overlay) | Allocazione IP dinamica da prefissi e assegnazione gestiti in modalità Swarm del motore Docker tramite HNS |
L2Bridge | Allocazione e assegnazione di indirizzi IP dinamici dal servizio di rete host (HNS) dal prefisso della subnet specificato |
L2Tunnel | Solo Azure - Allocazione e assegnazione di indirizzi IP dinamici dal plug-in |
Individuazione dei servizi
La funzionalità Individuazione dei servizi è supportata solo per determinati driver di rete di Windows.
Nome del driver | Individuazione dei servizi locali | Individuazione dei servizi globali |
---|---|---|
nat | YES | SÌ con Docker EE |
overlay | YES | SÌ con Docker EE o kube-dns |
transparent | NO | NO |
l2bridge | SÌ con kube-dns | SÌ con kube-dns |