Zmena predvoleného poolu Dockeru siete neprečísluje
Zmena default-address-pools riadi len nové automatické siete. Zinventarizujte rozsahy, ktoré už používate, a potom naplánujte migráciu toho, čo už beží.
Zmena default-address-pools neprečísluje siete, ktoré už máte, a práve toto očakávanie mení starostlivý plán na neočakávaný výpadok. Nastavenie riadi automatické prideľovanie pre siete vytvorené po reštarte démona s novou konfiguráciou. Všetko, čo už beží, si ponechá pridelenú podsiete, pretože tá podsiete je súčasťou uloženej definície siete. Mýtus je pohodlný, pretože naznačuje, že jedna úprava vyrieši každé prekrytie, a realita je práca v dvoch častiach: vyberte rozsah, ktorý je skutočne voľný, a potom migrujte siete, ktoré voľné nie sú.
Mýtus: jedna zmena poolu vyrieši prekrytie
Mýtus má konkrétnu podobu. Niekto sa dočíta, že predvolený pool Dockeru možno zmeniť, zmení ho, reštartuje démona a usúdi, že kontajnerová sieť už nekoliduje s kancelárskou VPN. Stará sieť je stále tam, stále pripojená a stále drží adresu, ktorá koliduje.
Zmenilo sa budúce správanie alokátora, čo je naozaj užitočné a naozaj obmedzené. Nové siete vytvorené bez explicitného --subnet sa vyrezávajú z nového poolu; tie existujúce v ňom nikdy neboli. Reštart neprestavuje siete a nepresúva kontajnery medzi nimi. Ak príznak po zmene pretrváva, zmena bola skutočná a diagnóza neúplná.
Základný rozsah a pridelený prefix
Konfigurácia má dve polia, ktoré sa ľahko pletú. base je rozsah, z ktorého alokátor vyrezáva, a size je dĺžka prefixu každej pridelenej siete, takže základ 10.10.0.0/16 s veľkosťou 24 rozdeľuje /24 vnútri toho /16. Prehodenie rolí vytvorí vzorec prideľovania, ktorý ste nechceli, zvyčajne jednu obrovskú sieť alebo vyčerpaný pool.
Pool je rezervácia, nie dôkaz. Docker sa vyhýba konfliktom, ktoré vidí v smerovacej tabuľke hostiteľa, a nemôže vidieť VPN, ku ktorej ste sa ešte nepripojili.
To obmedzenie je celý dôvod voliť vedome. Rozsahy na porovnanie sú tie, ktoré musí hostiteľ dosiahnuť: kancelárska LAN, vnútorné podsiete podnikovej VPN, prefixy laboratória alebo stagingu a akýkoľvek iný kontajnerový hostiteľ v tom istom overlayi. Zapíšte ich ako CIDR, skôr než sa dotknete démona, pretože zoznam v hlave vám unikne práve ten, na ktorom záleží. Potom vyberte základ, ktorý sa s žiadnym neprekrýva, a držte zoznam pri nasadení, aby ďalší človek neopakoval cvičenie z pamäti.
Zinventarizujte, kým vyberiete
Najprv zinventarizujte, čo existuje. docker network ls vypisuje siete a docker network inspect bridge -f '{{.IPAM.Config}}' vypíše podsiete, ktorú konkrétna sieť používa. Zopakujte pre každú používateľsky definovanú sieť, pretože projekty Compose si vytvárajú vlastné a explicitný --subnet v súbore compose pool úplne obíde.
Práve ten posledný bod prežije migráciu. Zmena poolu nezabráni kolegovi pripnúť 172.18.0.0/16 v súbore compose, a konflikt sa vráti s iným autorom.
Migrácia toho, čo už existuje
Migrácia existujúcich sietí je samostatná, podporovaná operácia. Každú zasiahnutú sieť treba znovu vytvoriť s novou podsiete, čo znamená odpojiť a znovu pripojiť kontajnery, ktoré ju používajú, a znovuvytvorenie siete odstráni jej pripojenia kontajnerov namiesto toho, aby ich presunulo. Zachovajte zväzky a konfiguráciu a berte znovuvytvorenie ako nasadenie, nie ako reset dát. Pracujte v okne údržby, pretože kontajnery na znovu vytvorenej sieti sa reštartujú bez ohľadu na to, či ste to plánovali.
Postupujte podľa dokumentovanej konfigurácie démona a postupu reštartu a prerušenie koordinujte. Na hostiteľovi s jedným démonom systemctl restart docker reštartuje kontajnery podľa ich reštartovacích politík, a to je správanie, ktoré je dobré poznať vopred, nie až potom.
Potom overte dve veci, ktoré mala zmena opraviť. Preskúmajte novú podsiete pomocou docker network inspect a potvrďte, že leží v zvolenom základe, potom skontrolujte trasu k reprezentatívnemu cieľu VPN pomocou ip route get 10.20.30.40 a potvrďte, že vedie tam, kam očakávate, a nie do mosta. Otestujte aj objavovanie služieb a komunikáciu medzi kontajnermi, pretože sieť znovu vytvorená s iným adresovaním môže pokaziť preklad mien spôsobom, ktorý vyzerá ako chyba aplikácie.
Čo sa aj potom kazí
Trvalá časť je záznam. Uchovávajte zoznam pridelení, zvolený základ a veľkosť a znovu vytvorené siete na tom istom mieste ako nasadenie.
To, že je rozsah súkromný, ho nerobí bezpečným na opätovné použitie. 10.0.0.0/8 je súkromný a zároveň najpravdepodobnejšie už niekde na ceste použitý, a preto je odpoveďou konkrétna rezervácia, nie preferencia jedného bloku. Dokumentácia sietí Dockeru opisuje automatické prideľovanie podsietí a polia poolu. Vyberajte rozsah podľa toho, čo musíte dosiahnuť, nie podľa toho, čo vyzerá upratane.