Docker Swarm cez VPN: úlohy bežia, volania medzi službami zlyhávajú
Úlohy bežia na oboch lokalitách a volania medzi službami vypršia. Overlay potrebuje trasy medzi uzlami, nepreložené adresy a miesto pre 50 bajtov VXLAN.
Traja manažéri a päť pracovníkov na dvoch lokalitách, spojených tunelom, a docker service ls zobrazuje úlohy bežiace na oboch stranách, zatiaľ čo volania medzi službami vypršia. V protokoloch Swarmu nič nevyzerá zle. Táto kombinácia je podpisom problému v dátovej rovine: riadiaca rovina našla uzly a zapuzdrené rámce cestu nikdy nevykonali.
Sieť musí existovať skôr ako overlay
Overlay v Swarme posiela zapuzdrené rámce priamo medzi adresami uzlov, čo znamená, že každý uzol potrebuje adresu, na ktorú každý iný uzol dosiahne bez prekladu, na rozhraní, ktoré poskytuje tunel. Tunel, ktorý prepravuje len klientov k publikovanému portu, nestačí. Spodná vrstva musí smerovať od uzla k uzlu v oboch smeroch.
Otestujte to skôr, ako sa Swarmu dotknete. Z každého uzla skontrolujte trasu k tunelovej adrese partnera, pingnite ju a potom otestujte riadiaci port. Ak ping funguje a port nie, tunel je v poriadku a v ceste stojí filter.
ip -brief address
ip route get 10.20.0.12
ping -c3 10.20.0.12
nc -vz 10.20.0.12 2377
Ak trasa ukazuje na fyzické rozhranie namiesto tun0 alebo wg0, overlay zapuzdrie na adresu, na ktorú vzdialená lokalita nedosiahne, a príznak bude vyzerať ako strata paketov.
Skontrolujte, akú adresu každý uzol inzeruje
Démon inzeruje jednu adresu a partneri ju používajú pre dátovú rovinu. Na hostiteľovi s viacerými sieťami je ľahké inzerovať LAN alebo verejnú adresu, zatiaľ čo tunel nesie niečo iné. Preskúmajte ju namiesto predpokladu a pri pripojení ju zafixujte pomocou --advertise-addr, keď je predvolená nesprávna. Uzol, ktorý inzeruje adresu dostupnú len jemu, sa do swarmu aj tak pripojí a zlyhanie sa prejaví neskôr ako služby, ktoré sa nedokážu rozprávať medzi lokalitami.
Zmena inzerovanej adresy neskôr nie je úprava konfigurácie, pretože uzol musí odísť a znova sa pripojiť.
Zapíšte si inzerovanú adresu každého uzla do poznámok, pretože vysvetľuje väčšinu asymetrických zlyhaní.
Masquerade je zvyčajný vinník
Keď medzi uzlami a tunelom stojí brána, častou chybou je aplikovať masquerade na všetko, čo vychádza z fyzického rozhrania. To prepisuje aj vnútorné adresy overlaya, takže každý partner vyzerá, že prichádza z brány, a partneri VXLAN sa prestanú navzájom rozpoznávať. Výsledkom je chýbajúca alebo jednosmerná zapuzdrená prevádzka, zatiaľ čo obyčajné pingy stále fungujú.
Smerujte prefix overlaya cez bránu a nechajte ho nepreložený. Ak je preklad naozaj potrebný pre iný prefix, obmedzte ho tam a nikdy na rozsah, ktorý overlay používa.
ip route add 172.16.0.0/22 via 10.20.0.1
iptables -t nat -I POSTROUTING -o tun0 -s 172.16.0.0/22 -j ACCEPT
Skontrolujte poradie pravidiel aj ich text, pretože široké MASQUERADE skôr v reťazci vyhráva nad úzkou výnimkou neskôr.
VXLAN potrebuje v pakete miesto
VXLAN pridáva k prenášaným rámcom 50 bajtov. Spodná vrstva 1500 bajtov, ktorá nesie vnútorný rámec 1500 bajtov, vytvorí zapuzdrený paket, ktorý žiadna cesta nedoručí, a zlyhanie vyzerá ako občasné objavovanie služieb, nie ako problém veľkosti. Buď znížte MTU tunela na oboch koncoch, alebo nastavte MTU overlaya tak, aby ovládač inzeroval užitočné zaťaženie, ktoré sa zmestí.
docker network create --driver overlay --attachable --opt com.docker.network.driver.mtu=1400 swarm-overlay
Sieť ingress sa vytvára automaticky, takže jej zmena znamená odstránenie a nové vytvorenie, nie úpravu na mieste.
Ak opravíte len jednu stranu tunela, menšie MTU stále zostáva tým, na ktorom záleží.
Sledujte dátovú rovinu, nie protokoly
Zachyťte port VXLAN na oboch koncoch. Rámce, ktoré opúšťajú jednu stranu a dorazia na druhú, znamenajú, že spodná vrstva je v poriadku a problém je vnútri overlaya. Rámce, ktoré odchádzajú a nikdy nedorazia, znamenajú trasu alebo filter. Rámce, ktoré neodídu vôbec, znamenajú, že zdrojová adresa je nesprávna.
Zlyhania objavovania služieb, ktoré po pár sekundách zmiznú, zvyčajne ukazujú na paketový rozpočet alebo nestabilnú cestu, nie na raft kvórum.
Uchovajte zachytenie z fungujúceho okna, pretože porovnanie s pokazeným je rýchlejšie ako opätovné čítanie konfigurácie.