Sprememba default-address-pools ne preštevilči omrežij, ki jih že imate, in prav to pričakovanje spremeni skrben načrt v nepričakovano prekinitev. Nastavitev upravlja samodejno dodeljevanje za omrežja, ustvarjena po ponovnem zagonu demona z novo konfiguracijo. Vse, kar že teče, obdrži dodeljeno podomrežje, ker je to podomrežje del shranjene definicije omrežja. Mit je priročen, ker nakazuje, da ena sprememba odpravi vsako prekrivanje, resničnost pa je delo v dveh delih: izberite obseg, ki je res prost, in nato preselite omrežja, ki niso.

Mit: ena sprememba bazena odpravi prekrivanje

Mit ima določeno obliko. Nekdo prebere, da je privzeti bazen Dockerja mogoče spremeniti, ga spremeni, znova zažene demona in sklene, da se omrežje vsebnikov ne trči več s pisarniškim VPN. Staro omrežje je še vedno tam, še vedno povezano in še vedno drži naslov, ki se trči.

Spremenilo se je prihodnje vedenje dodeljevalnika, ki je res koristno in res omejeno. Nova omrežja, ustvarjena brez izrecnega --subnet, se izrežejo iz novega bazena; obstoječa nikoli niso bila v tem bazenu. Ponovni zagon ne obnovi omrežij in ne premakne vsebnikov med njimi. Če simptom po spremembi vztraja, je bila sprememba resnična, diagnoza pa nepopolna.

Osnovni obseg in dodeljena predpona

Konfiguracija ima dve polji, ki ju je lahko zamenjati. base je obseg, iz katerega dodeljevalnik reže, in size je dolžina predpone vsakega dodeljenega omrežja, zato osnova 10.10.0.0/16 z velikostjo 24 razdeli /24 znotraj tega /16. Zamenjani vlogi ustvarita vzorec dodeljevanja, ki ga niste želeli, običajno eno ogromno omrežje ali izčrpan bazen.

Bazen je rezervacija, ne dokaz. Docker se izogiba sporom, ki jih vidi v usmerjevalni tabeli gostitelja, in ne more videti VPN-a, s katerim se še niste povezali.

Ta omejitev je ves razlog za zavestno izbiro. Obsegi za primerjavo so tisti, ki jih mora gostitelj doseči: pisarniški LAN, notranja podomrežja poslovnega VPN, predpone laboratorija ali staginga in vsak drug gostitelj vsebnikov na istem overlayu. Zapišite jih kot CIDR, preden se dotaknete demona, ker bo seznam v glavi zgrešil prav tistega, ki je pomemben. Nato izberite osnovo, ki se ne prekriva z nobenim od njih, in seznam hranite ob namestitvi, da naslednja oseba ne bo ponavljala vaje po spominu.

Popišite, preden izberete

Najprej popišite, kaj obstaja. docker network ls navaja omrežja, docker network inspect bridge -f '{{.IPAM.Config}}' pa izpiše podomrežje, ki ga uporablja določeno omrežje. Ponovite za vsako uporabniško definirano omrežje, ker projekti Compose ustvarijo svoja in izrecni --subnet v datoteki compose bazen povsem obide.

Prav ta zadnja točka preživi selitev. Sprememba bazena ne prepreči kolegu, da v datoteki compose pripne 172.18.0.0/16, in spor se vrne z drugim avtorjem.

Selitev tega, kar že obstaja

Selitev obstoječih omrežij je ločena, podprta operacija. Vsako prizadeto omrežje je treba znova ustvariti z novim podomrežjem, kar pomeni odklopiti in znova priklopiti vsebnike, ki ga uporabljajo, ponovno ustvarjanje omrežja pa odstrani njegove priklope vsebnikov, namesto da bi jih premaknilo. Ohranite nosilce in konfiguracijo ter ponovno ustvarjanje obravnavajte kot namestitev, ne kot ponastavitev podatkov. Delo opravite v vzdrževalnem oknu, ker se vsebniki v ponovno ustvarjenem omrežju znova zaženejo ne glede na to, ali ste to načrtovali.

Sledite dokumentirani konfiguraciji demona in postopku ponovnega zagona ter uskladite prekinitev. Na gostitelju z enim demonom systemctl restart docker znova zažene vsebnike v skladu z njihovimi pravilniki ponovnega zagona, in to je vedenje, ki ga je vredno poznati prej in ne pozneje.

Nato preverite dve stvari, ki naj bi jih sprememba popravila. Preglejte novo podomrežje s docker network inspect in potrdite, da leži znotraj izbrane osnove, nato preverite pot do reprezentativnega cilja VPN s ip route get 10.20.30.40 in potrdite, da vodi tja, kamor pričakujete, in ne v most. Preizkusite tudi odkrivanje storitev in komunikacijo med vsebniki, ker lahko omrežje, ponovno ustvarjeno z drugačnim naslavljanjem, pokvari razreševanje imen na način, ki izgleda kot napaka aplikacije.

Kaj se še vedno zlomi pozneje

Trajni del je zapis. Hranite seznam dodelitev, izbrano osnovo in velikost ter ponovno ustvarjena omrežja na istem mestu kot namestitev.

To, da je obseg zaseben, ga ne naredi varnega za ponovno uporabo. 10.0.0.0/8 je zaseben in hkrati najverjetneje že nekje na poti v uporabi, zato je odgovor konkretna rezervacija in ne naklonjenost enemu bloku. Dokumentacija omrežij Dockerja opisuje samodejno dodeljevanje podomrežij in polja bazena. Obseg izberite po tem, do česa morate priti, ne po tem, kaj izgleda urejeno.

Sorodni članki