Docker Swarm-ը VPN-ի վրա։ առաջադրանքները աշխատում են, ծառայությունների կանչերը ձախողվում են
Առաջադրանքները աշխատում են երկու տեղամասերում, իսկ ծառայությունների միջև կանչերը սպառում են ժամանակը։ overlay-ին անհրաժեշտ են հանգույց-հանգույց երթուղիներ, չթարգմանված հասցեներ և 50 բայթ VXLAN-ի տեղ։
Երեք կառավարիչ և հինգ աշխատող երկու տեղամասում, թունելով միացված, և 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 քվորումը։
Պահեք աշխատող պատուհանի գրավումը, քանի որ այն կոտրվածի հետ համեմատելն ավելի արագ է, քան կազմաձևը նորից կարդալը։