Trije managers en fiif workers oer twa sites, ferbûn troch in tunnel, en docker service ls toant taken dy't oan beide kanten draaie, wylst oproppen tusken tsjinsten ferrinne. Neat yn 'e Swarm-logs liket ferkeard. Dy kombinaasje is de hantekening fan in probleem yn 'e dataplane: de controlplane fûn de nodes, en de ynkapsulearre frames makken de reis nea.

It mesh moat bestean foardat it overlay dat docht

It overlay fan Swarm stjoert ynkapsulearre frames direkt tusken node-adressen, wat betsjut dat elke node in adres nedich hat dat elke oare node sûnder oersetting berikke kin, op 'e interface dy't de tunnel leveret. In tunnel dy't allinnich kliïnten nei in publisearre poarte fiert, is net genôch. De ûnderlaach moat fan node nei node yn beide rjochtingen route.

Test dat foardat jo Swarm oanreitsje. Kontrolearje fan elke node de rûte nei it tunneladres fan in peer, ping it, en test dan de controlpoarte. As ping wurket en de poarte net, is de tunnel goed en stiet der in filter yn 'e wei.

ip -brief address
ip route get 10.20.0.12
ping -c3 10.20.0.12
nc -vz 10.20.0.12 2377

As de rûte nei de fysike interface wiist ynstee fan tun0 of wg0, sil it overlay ynkapsulearje nei in adres dat de fiere site net berikke kin, en it symptoom sil as pakketferlies lêze.

Kontrolearje hokker adres elke node oankundiget

De daemon kundiget ien adres oan, en peers brûke it foar de dataplane. Op in host mei mear netwurken is it maklik om it LAN- of publike adres oan te kundigjen wylst de tunnel wat oars fiert. Undersykje it ynstee fan oan te nimmen, en fêstigje it by join mei --advertise-addr as de standert ferkeard is. In node dy't in adres oankundiget dat allinnich hy berikke kin, joinet dochs by de swarm, en de flater docht him letter foar as tsjinsten dy't net oer sites hinne prate kinne.

It oankundige adres letter feroarje is gjin konfiguraasjebewurking, want de node moat fuortgean en wer joinje.

Skriuw it oankundige adres per node yn jo notysjes, want it ferklearret de measte asymmetryske flaters.

Masquerade is de gewoane skuldige

As in gateway tusken de nodes en de tunnel sit, is de gewoane flater masquerade tapasse op alles wat de fysike interface ferlit. Dat skriuwt ek de binnenste adressen fan it overlay oer, sadat elke peer út 'e gateway liket te kommen en VXLAN-peers inoar net mear werkenne. It resultaat is ûntbrekkend of ienrjochting-ynkapsulearre ferkear wylst gewoane pings noch wurkje.

Route it overlay-prefiks troch de gateway en lit it net-oersetten. As oersetting echt nedich is foar in oar prefiks, behein it dêrta en nea ta it berik dat it overlay brûkt.

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

Kontrolearje de folchoarder fan de regels likegoed as de tekst, want in breed MASQUERADE earder yn 'e keatling wint fan in smelle útsûndering letter.

VXLAN hat romte yn it pakket nedich

VXLAN foeget 50 bytes ta oan 'e frames dy't it fiert. In ûnderlaach fan 1500 bytes dy't in binnenframe fan 1500 bytes fiert, makket in ynkapsulearre pakket dat gjin paad leverje sil, en de flater liket op ûnregelmjittige tsjinstûntdekking ynstee fan in grutteprobleem. Ferleegje de MTU fan 'e tunnel oan beide einen of set de MTU fan it overlay sa dat de driver in noflike lading oankundiget dy't past.

docker network create --driver overlay --attachable --opt com.docker.network.driver.mtu=1400 swarm-overlay

It ingress-netwurk wurdt automatysk oanmakke, dus it feroarjen betsjut it fuortheljen en opnij oanmeitsjen ynstee fan bewurkje op it plak.

As jo mar ien kant fan 'e tunnel reparearje, bliuwt de lytsere MTU dochs dy't ta saak docht.

Sjoch nei de dataplane, net nei de logs

Fange de VXLAN-poarte oan beide einen. Frames dy't ien kant ferlitte en oan 'e oare kant oankomme, betsjutte dat de ûnderlaach goed is en it probleem yn it overlay sit. Frames dy't fuortgeane en nea oankomme, betsjutte in rûte of in filter. Frames dy't hielendal net fuortgeane, betsjutte dat it boarneadres ferkeard is.

Tsjinstûntdekkingsflaters dy't nei in pear sekonden oergeane, wize meastentiids op it pakketbudzjet of in flapperend paad, net op raft-quorum.

Bewarje de opname fan in wurkjend finster, want it fergelykjen mei de brutsen iene is flugger as de konfiguraasje opnij lêze.

Relatearre artikelen