Chyba prekrytia poolov v Dockeri nie je problémom trasy VPN
Jedna chyba vzniká pri prideľovaní, druhá po zmene trasy. Prečítajte si podsiete IPAM, skôr než sa dotknete adries kontajnerov alebo tunela.
Docker odmieta vytvoriť sieť so správou, že sa pool prekrýva s iným v tomto adresnom priestore, a niekto rozhodne, že príčinou musí byť trasa VPN. Nemôže. Táto chyba vzniká počas prideľovania poolu, skôr než existuje jediný paket, a ručná jadrová trasa na ňu nemá vplyv. VPN je dôležitá o krok neskôr, keď kontajner, ktorý už má adresu, prestane byť dostupný po tom, čo sa objaví trasa. Dva problémy, dve sady dôkazov, a ich miešanie vedie k zmene, ktorá neopraví ani jeden.
Dve chyby, ktoré vyzerajú rovnako
Chyba pridelenia je aritmetická. Docker porovná podsieť, ktorú ste žiadali, s podsieťami, ktoré už spravuje, nájde prienik a odmietne. Nič ešte nebeží, takže neexistuje trasa, kontajner ani prevádzka na preskúmanie.
Príznak za behu je otázka dostupnosti. Kontajner, ktorý včera odpovedal, teraz neodpovedá, a v smerovacej tabuľke hostiteľa sa niečo zmenilo. Kontajner si stále drží svoju adresu; otázkou je, ktorou cestou sa tá adresa vydá.
Obe sú problémy adresného plánu. Iba jeden z nich je problém Dockeru.
Najprv si prečítajte pridelené pooly
Vypíšte siete a preskúmajte tie, ktoré by sa mohli pretínať. Podsieť žije v konfigurácii IPAM a pripojené kontajnery sú uvedené zvlášť:
docker network ls
docker network inspect EXISTING_NETWORK
Porovnajte túto podsieť s poolom, ktorý nová sieť žiada, a pamätajte, že Compose vytvára vlastnú predvolenú sieť pre každý projekt. Konflikt s projektom, na ktorý ste zabudli, vyzerá presne ako konflikt s démonom.
Statická ipv4_address v službe je adresa jedného kontajnera, nie definícia poolu. Jej zmena neodstráni prekrytie, pretože prekrytie je medzi sieťovými podsieťami, nie medzi kontajnermi. Referenčná príručka network-create Dockeru vyžaduje neprekrývajúce sa podsiete pre bežné prideľovanie cez most a dokumentuje, ako jednu explicitne vybrať.
Vyberte prefix, ktorý prežije VPN
Bezprostredný konflikt aj budúcu trasu rozhoduje rovnaká voľba, takže ju urobte raz. Porovnajte kandidátsky rozsah s LAN, s každým cieľom VPN, ktoré hostiteľ dosiahne, a s akýmkoľvek iným používaným overlayom.
Prefix, ktorý vyhovuje Dockeru a koliduje so vzdialenou sieťou, vám dá kontajner, ktorý sa čisto spustí a stane sa nedostupným v okamihu, keď sa tunel zdvihne. To je druhá chyba v tomto článku a je oveľa ťažšie ju neskôr diagnostikovať, než sa jej teraz vyhnúť.
Zapíšte zvolené rozsahy niekam, odkiaľ ich ďalší projekt prečíta. Jednoriadkový register pridelených prefixov je lacnejší než týždeň nevysvetlených časových limitov.
Vyraďte alebo zmeňte sieť zámerne
Pre novú sieť Compose nastavte nepoužitý prefix v konfigurácii IPAM siete. Pri existujúcom projekte naplánujte prečíslovanie: pevné adresy, závislé služby aj krok opätovného vytvorenia siete treba zohľadniť, pretože úprava YAML bežiacu sieť neprečísluje.
Ak konfliktnú alokáciu vlastní zastaraná sieť, pred jej odstránením zistite, kto je k nej pripojený. docker network rm odmieta, kým existujú aktívne endpointy, a docker stop prijíma názvy alebo ID kontajnerov, nie názov siete. Zastavenie kontajnera tiež neodstráni definíciu siete, ktorá drží pool.
Široký prune nie je diagnostický nástroj. Dosiahne na nesúvisiace projekty a zničí dôkazy, ktoré ste sa práve chystali zhromaždiť.
Predvolené pooly pomáhajú len ďalšiemu prideleniu
Nastavenie predvoleného poolu adries démona zlepšuje budúce automatické pridelenia tým, že ich drží mimo rozsahov, ktoré si rezervujete. Nemení spätne adresy sietí, ktoré už existujú, a nerieši explicitnú podsieť, ktorá sa prekrýva s inou explicitnou podsieťou.
Berte toto nastavenie ako samostatnú, plánovanú zmenu s vlastným reštartom, nie ako súčasť opravy jedného projektu. Miešanie oboch znamená, že reštart démona pristane uprostred nesúvisiaceho vyšetrovania. Naplánujte ho vo vlastnom okne. Potom potvrďte, že jedno nové automatické pridelenie skutočne skončí mimo rozsahov, ktoré ste rezervovali.
Keď vytvorenie uspeje, overte podsieť, ktorá skutočne beží, a potom vykonajte jednu skutočnú požiadavku aplikácie s VPN v zamýšľanom stave. Ak je pool platný a prístup stále zlyháva, zostávajúcou prácou je voľba trasy, filtrovanie a spätná cesta. To je vyšetrovanie za behu a nerobí chybu pridelenia spätne bezvýznamnou.
Poradie práce: prečítajte pridelené pooly, zvoľte prefix, ktorý sa vyhne Dockeru aj cieľom VPN, zámerne znova vytvorte sieť a potom otestujte jednu požiadavku so zdvihnutým tunelom.