Chyba překrytí poolů v Dockeru není problémem trasy VPN
Jedna chyba nastává při přidělování, druhá po změně trasy. Přečtěte si podsítě IPAM, než sáhnete na adresy kontejnerů nebo tunel.
Docker odmítá vytvořit síť se zprávou, že se pool překrývá s jiným v tomto adresním prostoru, a někdo rozhodne, že příčinou musí být trasa VPN. Nemůže. Tato chyba vzniká při přidělování poolu, dříve než existuje jediný paket, a ruční jaderná trasa na ni nemá vliv. VPN je důležitá o krok později, když kontejner, který už má adresu, přestane být dostupný poté, co se objeví trasa. Dva problémy, dvě sady důkazů, a jejich míchání vede ke změně, která neopraví ani jeden.
Dvě chyby, které vypadají stejně
Chyba přidělení je aritmetická. Docker porovná podsíť, kterou jste požadovali, s podsítěmi, které už spravuje, najde průnik a odmítne. Nic ještě neběží, takže neexistuje trasa, kontejner ani provoz k prozkoumání.
Příznak za běhu je otázka dostupnosti. Kontejner, který včera odpovídal, teď neodpovídá, a něco se změnilo v routovací tabulce hostitele. Kontejner si stále drží svou adresu; otázkou je, kterou cestou se tato adresa vydá.
Oba jsou problémy adresního plánu. Jen jeden z nich je problém Dockeru.
Nejprve si přečtěte přidělené pooly
Vypište sítě a prohlédněte ty, které by se mohly protínat. Podsíť žije v konfiguraci IPAM a připojené kontejnery jsou uvedeny zvlášť:
docker network ls
docker network inspect EXISTING_NETWORK
Porovnejte tuto podsíť s poolem, který nová síť požaduje, a pamatujte, že Compose vytváří vlastní výchozí síť pro každý projekt. Konflikt s projektem, na který jste zapomněli, vypadá přesně jako konflikt s daemonem.
Statická ipv4_address u služby je adresa jednoho kontejneru, ne definice poolu. Její změna neodstraní překrytí, protože překrytí je mezi síťovými podsítěmi, ne mezi kontejnery. Referenční příručka network-create Dockeru vyžaduje pro běžné přidělování přes bridge nepřekrývající se podsítě a dokumentuje, jak jednu explicitně vybrat.
Vyberte prefix, který přežije VPN
Okamžitý konflikt i budoucí trasu rozhoduje stejná volba, takže ji udělejte jednou. Porovnejte kandidátní rozsah s LAN, s každým cílem VPN, kterého hostitel dosáhne, a s jakýmkoli dalším používaným overlayem.
Prefix, který vyhovuje Dockeru a koliduje se vzdálenou sítí, vám dá kontejner, který se čistě spustí a stane se nedostupným v okamžiku, kdy se tunel zvedne. To je druhá chyba v tomto článku a je mnohem těžší ji později diagnostikovat, než se jí teď vyhnout.
Zapište zvolené rozsahy někam, odkud je další projekt přečte. Jednořádkový registr přidělených prefixů je levnější než týden nevysvětlených timeoutů.
Vyřaďte nebo změňte síť záměrně
Pro novou síť Compose nastavte nepoužitý prefix v konfiguraci IPAM dané sítě. U existujícího projektu naplánujte přečíslování: pevné adresy, závislé služby i krok opětovného vytvoření sítě je třeba zohlednit, protože úprava YAML běžící síť nepřečísluje.
Pokud konfliktní přidělení vlastní zastaralá síť, před jejím odstraněním zjistěte, kdo je k ní připojen. docker network rm odmítá, dokud existují aktivní endpointy, a docker stop přijímá názvy nebo ID kontejnerů, nikoli název sítě. Zastavení kontejneru také neodstraní definici sítě, která pool drží.
Široký prune není diagnostický nástroj. Dosáhne na nesouvisející projekty a zničí důkazy, které jste se právě chystali shromáždit.
Výchozí pooly pomáhají jen dalšímu přidělení
Nastavení výchozího poolu adres daemona zlepšuje budoucí automatická přidělení tím, že je drží mimo rozsahy, které si rezervujete. Nemění zpětně adresy sítí, které už existují, a neřeší explicitní podsíť, která se překrývá s jinou explicitní podsítí.
Berte toto nastavení jako samostatnou, plánovanou změnu s vlastním restartem, ne jako součást opravy jednoho projektu. Míchání obojího znamená, že restart daemona přistane uprostřed nesouvisejícího vyšetřování. Naplánujte ho ve vlastním okně. Poté potvrďte, že jedno nové automatické přidělení skutečně skončí mimo rozsahy, které jste rezervovali.
Jakmile vytvoření uspěje, ověřte podsíť, která skutečně běží, a poté proveďte jeden skutečný požadavek aplikace s VPN v zamýšleném stavu. Pokud je pool platný a přístup stále selhává, zbývající prací je volba trasy, filtrování a zpětná cesta. To je vyšetřování za běhu a nečiní chybu přidělení zpětně bezvýznamnou.
Pořadí práce: přečtěte přidělené pooly, zvolte prefix, který se vyhne Dockeru i cílům VPN, záměrně znovu vytvořte síť a poté otestujte jeden požadavek se zvednutým tunelem.