Cosa sono i pool di indirizzi Docker?

Ogni rete Docker dispone di un proprio intervallo di indirizzi IP, chiamato sottorete. Quando crei una rete senza scegliere una sottorete, Docker ne seleziona una da un elenco integrato di pool di indirizzi che inizia con 172.17.0.0/16 e prosegue fino a 172.31.0.0/16 e 192.168.0.0/16. Questo funziona finché l'intervallo scelto non entra in conflitto con qualcos'altro, ad esempio una VPN, una rete aziendale o un database che si trova a un indirizzo fisso. Per correggere il problema per tutte le reti contemporaneamente, modifica i pool di indirizzi nelle impostazioni del daemon Docker.

Descrizione dello strumento

Questo strumento genera le impostazioni daemon.json che controllano quali sottoreti utilizza Docker. Inserisci uno o più intervalli di pool di indirizzi e la dimensione di ogni rete per ottenere l'impostazione default-address-pools. Puoi anche impostare l'indirizzo del bridge docker0 predefinito con bip. Lo strumento mostra quante reti possono rientrare nei tuoi pool e quanti host ha ogni rete, verifica i dati durante la digitazione e segnala gli intervalli che potrebbero causare conflitti. Tutti i calcoli vengono eseguiti nel browser.

Esempi

Assegna a tutte le nuove reti una sottorete /24 ricavata da 10.10.0.0/16, creando spazio per 256 reti con 254 host utilizzabili ciascuna:

{
  "default-address-pools": [
    {
      "base": "10.10.0.0/16",
      "size": 24
    }
  ]
}

Sposta il bridge predefinito in un altro intervallo e utilizza due pool:

{
  "bip": "10.200.0.1/24",
  "default-address-pools": [
    {
      "base": "10.10.0.0/16",
      "size": 24
    },
    {
      "base": "10.20.0.0/20",
      "size": 24
    }
  ]
}

Funzionalità

  • Più intervalli di pool di indirizzi contemporaneamente, uno per riga
  • La dimensione delle reti che Docker ricava da ogni pool
  • Indirizzo opzionale per il bridge docker0 predefinito
  • Mostra quante reti possono rientrare nei pool e quanti host utilizzabili ha ogni rete
  • Avvisa della presenza di intervalli pubblici, pool sovrapposti e indirizzi con bit host impostati
  • Scarica il risultato come daemon.json

Come funziona

Un intervallo viene scritto come un indirizzo e una lunghezza del prefisso, ad esempio 10.10.0.0/16. Il prefisso indica quanti dei 32 bit costituiscono la parte di rete, mentre i restanti identificano gli host. Ogni pool ha un intervallo di base e una dimensione di rete. Docker suddivide la base in reti di quella dimensione e le assegna una alla volta, quindi una base 10.10.0.0/16 con dimensione 24 fornisce 2^(24 − 16) = 256 reti. Una rete /24 ha 256 indirizzi, di cui 254 utilizzabili, perché il primo è l'indirizzo di rete e l'ultimo è l'indirizzo di broadcast. Docker utilizza inoltre il primo indirizzo utilizzabile come gateway di una rete bridge.

La dimensione non può essere inferiore al prefisso della base ed è limitata a /30, perché una rete deve avere spazio per un gateway e almeno un container.

Suggerimenti

  • Scegli intervalli da 10.0.0.0/8 o 172.16.0.0/12 che non siano utilizzati dalla tua VPN o dalla rete aziendale. Gli intervalli vicini a 192.168.0.0/16 sono quelli con maggiore probabilità di entrare in conflitto, perché vengono utilizzati dai router domestici e aziendali
  • Il bridge docker0 predefinito utilizza sempre 172.17.0.0/16. Se questo intervallo entra in conflitto con la tua rete, imposta bip su un altro indirizzo, ad esempio 10.200.0.1/24
  • Salva il risultato come /etc/docker/daemon.json su Linux oppure in Impostazioni → Docker Engine in Docker Desktop, quindi riavvia Docker. Unisci queste impostazioni a quelle già presenti nel file invece di sostituirle
  • Una modifica a default-address-pools influisce solo sulle reti create successivamente. Rimuovi e crea nuovamente le reti esistenti per spostarle nel nuovo intervallo
  • I pool sovrapposti sono difficili da gestire, quindi mantienili separati
  • Quando visualizzi il messaggio "tutti i pool di indirizzi predefiniti sono stati completamente suddivisi in sottoreti", Docker ha esaurito gli intervalli disponibili. Aggiungi una base più grande o una dimensione di rete più piccola per ottenere più reti