VPN аркылуу Docker Swarm: тапшырмалар иштейт, кызмат чакыруулары ишке ашпайт
Тапшырмалар эки сайтта тең иштейт, ал эми кызматтардын ортосундагы чакыруулар убакытты бүтүрөт. Overlay түйүндөн түйүнгө маршруттарды, которулбаган даректерди жана VXLAN үчүн 50 байт орунду талап кылат.
Эки сайттагы үч менеджер жана беш жумушчу туннел менен туташкан, жана docker service ls эки тарапта тең иштеп жаткан тапшырмаларды көрсөтөт, ал эми кызматтардын ортосундагы чакыруулар убакытты бүтүрөт. Swarm журналдарында эч нерсе туура эмес көрүнбөйт. Бул айкалыш маалымат тегиздигинин көйгөйүнүн белгиси: башкаруу тегиздиги түйүндөрдү тапты, ал эми капталган кадрлар жолду эч качан басып өткөн эмес.
Тор overlay-дан мурун болушу керек
Swarm overlay капталган кадрларды түйүн даректеринин ортосунда түз жөнөтөт, башкача айтканда ар бир түйүнгө каалаган башка түйүн которуусуз жете ала турган дарек керек, туннел сунуш кылган интерфейсте. Кардарларды гана жарыяланган портко алып барган туннел жетишсиз. Төмөнкү катмар эки багытта тең түйүндөн түйүнгө маршрутташы керек.
Муну Swarm-га тийүүдөн мурун текшериңиз. Ар бир түйүндөн өнөктөштүн туннел дарегине маршрутту текшериңиз, ага ping жасаңыз, анан башкаруу портун текшериңиз. Эгер ping иштеп, порт иштебесе, туннел жакшы жана жолдо чыпка турат.
ip -brief address
ip route get 10.20.0.12
ping -c3 10.20.0.12
nc -vz 10.20.0.12 2377
Эгер маршрут tun0 же wg0 ордуна физикалык интерфейсти көрсөтсө, overlay алыскы сайт жете албаган дарекке каптайт, жана симптом пакет жоготуусуна окшойт.
Ар бир түйүн кайсы даректи жарыялаарын текшериңиз
Демон бир даректи жарыялайт, ал эми өнөктөштөр аны маалымат тегиздиги үчүн колдонушат. Көп тармактуу хостто LAN же жарыя даректи жарыялоо оңой, ал эми туннел башка нерсени ташыйт. Болжолдоонун ордуна аны текшериңиз жана демейки туура эмес болсо, кошулуу учурунда --advertise-addr менен бекитиңиз. Өзү гана жете алган даректи жарыялаган түйүн баары бир swarm-га кошулат, ал эми бузулуу кийинчерээк сайттардын ортосунда сүйлөшө албаган кызматтар түрүндө көрүнөт.
Жарыяланган даректи кийин өзгөртүү конфигурацияны түзөтүү эмес, анткени түйүн чыгып, кайра кошулушу керек.
Ар бир түйүндүн жарыяланган дарегин жазууларыңызга жазыңыз, анткени ал асимметриялык бузулуулардын көбүн түшүндүрөт.
Masquerade — кадимки күнөөкөр
Түйүндөр менен туннелдин ортосунда дарбаза турганда, көп кездешүүчү ката — физикалык интерфейстен чыккандын баарына masquerade колдонуу. Бул overlay-дун ички даректерин да кайра жазат, ошондуктан ар бир өнөктөш дарбазадан келгендей көрүнөт жана VXLAN өнөктөштөрү бири-бирин таанууну токтотот. Натыйжада жөнөкөй ping иштеп турганда жоголгон же бир багыттуу капталган трафик пайда болот.
overlay префиксин дарбаза аркылуу маршруттаңыз жана аны которулбай калтырыңыз. Эгер которуу чындап башка префикс үчүн керек болсо, аны ошол жер менен чектеңиз жана эч качан overlay колдонгон диапазонго колдонбоңуз.
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
Эрежелердин тартибин да, текстин да текшериңиз, анткени чынжырда эрте турган кең MASQUERADE кийинки тар эрежеден басымдуу.
VXLAN пакетте орун талап кылат
VXLAN ташыган кадрларына 50 байт кошот. 1500 байттык төмөнкү катмар 1500 байттык ички кадрды ташыганда, эч бир жол жеткире албаган капталган пакет пайда болот, жана бузулуу өлчөм көйгөйү эмес, үзгүлтүктүү кызмат издөө сыяктуу көрүнөт. Же эки учунда тең туннелдин MTU-сун азайтыңыз, же overlay-дун MTU-сун драйвер баткан пайдалуу жүктү жарыялай тургандай коюңуз.
docker network create --driver overlay --attachable --opt com.docker.network.driver.mtu=1400 swarm-overlay
ingress тармагы автоматтык түрдө түзүлөт, ошондуктан аны өзгөртүү — ордунда түзөтүү эмес, өчүрүп кайра түзүү.
Туннелдин бир гана тарабын оңдосоңуз, кичине MTU баары бир маанилүү бойдон калат.
Журналдарды эмес, маалымат тегиздигин байкаңыз
VXLAN портун эки учунда кармаңыз. Бир тараптан чыгып, экинчи тарапка жеткен кадрлар төмөнкү катмар жакшы экенин жана көйгөй overlay ичинде экенин билдирет. Чыгып, эч качан жетпеген кадрлар маршрут же чыпканы билдирет. Такыр чыкпаган кадрлар булак дареги туура эмес экенин билдирет.
Бир нече секунддан кийин жоголгон кызмат издөө бузулуулары адатта пакет бюджетине же туруксуз жолго ишарат кылат, raft кворумуна эмес.
Иштеп жаткан терезеден кармоону сактаңыз, анткени аны бузулган менен салыштыруу конфигурацияны кайра окуудан тезирээк.