Docker-ի լռելյայն փուլը փոխելը ցանցերը չի վերահամարակալում
default-address-pools-ը փոխելը կառավարում է միայն նոր ավտոմատ ցանցերը։ Թվարկեք արդեն օգտագործվող միջակայքերը, ապա պլանավորեք գործողի միգրացիան։
default-address-pools-ը փոխելը չի վերահամարակալում ձեր արդեն ունեցած ցանցերը, և դա ակնկալելը հենց այն է, ինչը զգույշ պլանը վերածում է անսպասելի ընդհատման։ Կարգավորումը կառավարում է ավտոմատ հատկացումը այն ցանցերի համար, որոնք ստեղծվում են դեմոնի՝ նոր կոնֆիգուրացիայով վերագործարկվելուց հետո։ Արդեն աշխատող ամեն ինչ պահպանում է իրեն տրված ենթացանցը, որովհետև այդ ենթացանցը ցանցի պահված սահմանման մասն է։ Առասպելը հարմար է, որովհետև ենթադրում է, որ մեկ խմբագրում լուծում է բոլոր համընկնումները, իսկ իրականությունը երկու մասից բաղկացած աշխատանք է՝ ընտրեք իսկապես ազատ միջակայք, ապա միգրացրեք այն ցանցերը, որոնք ազատ չեն։
Առասպելը՝ փուլի մեկ փոփոխությունը լուծում է համընկնումը
Առասպելն ունի որոշակի ձև։ Ինչ-որ մեկը կարդում է, որ Docker-ի լռելյայն փուլը կարելի է փոխել, փոխում է այն, վերագործարկում դեմոնը և եզրակացնում, որ կոնտեյների ցանցն այլևս չի բախվում գրասենյակի VPN-ի հետ։ Հին ցանցը դեռ այնտեղ է, դեռ միացված, և դեռ պահում է այն հասցեն, որը բախվում է։
Փոխվել է հատկացնողի ապագա վարքը, որը իսկապես օգտակար է և իսկապես սահմանափակ։ Բացահայտ --subnet-ով չստեղծված նոր ցանցերը կտրվում են նոր փուլից, իսկ գոյություն ունեցողները երբեք այդ փուլում չեն եղել։ Վերագործարկումը ցանցերը չի վերակառուցում և կոնտեյներները դրանց միջև չի տեղափոխում։ Եթե ախտանիշը շարունակվում է փոփոխությունից հետո, փոփոխությունը իրական էր, իսկ ախտորոշումը՝ թերի։
Հիմնական միջակայքը և հատկացված նախածանցը
Կոնֆիգուրացիան ունի երկու դաշտ, որոնք հեշտ է շփոթել։ base-ը այն միջակայքն է, որտեղից հատկացնողը կտրում է, իսկ size-ը յուրաքանչյուր հատկացված ցանցի նախածանցի երկարությունն է, այնպես որ 10.10.0.0/16 հիմքը 24 չափով բաժանում է /24-ներ այդ /16-ի ներսում։ Դերերի հակադարձումը ստեղծում է հատկացման օրինաչափություն, որը դուք չեք նախատեսել, սովորաբար մեկ հսկայական ցանց կամ սպառված փուլ։
Փուլը ամրագրում է, ոչ ապացույց։ Docker-ը խուսափում է այն կոնֆլիկտներից, որոնք տեսնում է հոսթի երթուղավորման աղյուսակում, և չի կարող տեսնել VPN, որին դեռ չեք միացել։
Այդ սահմանափակումը գիտակցված ընտրության ամբողջ պատճառն է։ Համեմատության ենթակա միջակայքերն այն են, որոնց հոսթը պետք է հասնի՝ գրասենյակի LAN-ը, կորպորատիվ VPN-ի ներքին ենթացանցերը, լաբորատորիայի կամ staging-ի նախածանցերը և նույն overlay-ի ցանկացած այլ կոնտեյներային հոսթ։ Գրեք դրանք որպես CIDR նախքան դեմոնին դիպչելը, որովհետև գլխում պահված ցանկը բաց կթողնի հենց այն մեկը, որ կարևոր է։ Ապա ընտրեք հիմք, որը չի համընկնում դրանցից ոչ մեկի հետ, և ցանկը պահեք տեղակայման հետ միասին, որպեսզի հաջորդ մարդը վարժությունը չկրկնի հիշողությամբ։
Թվարկեք նախքան ընտրելը
Նախ թվարկեք այն, ինչ գոյություն ունի։ docker network ls-ը թվարկում է ցանցերը, իսկ docker network inspect bridge -f '{{.IPAM.Config}}'-ը տպում է ենթացանցը, որն օգտագործում է կոնկրետ ցանցը։ Կրկնեք օգտատիրոջ կողմից սահմանված յուրաքանչյուր ցանցի համար, որովհետև Compose նախագծերը ստեղծում են իրենցը, և compose ֆայլում բացահայտ --subnet-ը շրջանցում է փուլը ամբողջությամբ։
Այդ վերջին կետն է, որ գոյատևում է միգրացիայից։ Փուլի փոփոխությունը չի խանգարում գործընկերոջը compose ֆայլում ամրացնել 172.18.0.0/16-ը, և կոնֆլիկտը վերադառնում է այլ հեղինակով։
Արդեն գոյություն ունեցողի միգրացիան
Գոյություն ունեցող ցանցերի միգրացիան առանձին, աջակցվող գործողություն է։ Յուրաքանչյուր ազդված ցանց պետք է վերստեղծվի նոր ենթացանցով, ինչը նշանակում է անջատել և նորից միացնել այն օգտագործող կոնտեյներները, իսկ ցանցի վերստեղծումը հեռացնում է դրա կոնտեյներային կցումները՝ դրանք տեղափոխելու փոխարեն։ Պահպանեք ծավալներն ու կոնֆիգուրացիան և վերստեղծումը դիտարկեք որպես տեղակայում, ոչ որպես տվյալների զրոյացում։ Կատարեք աշխատանքը սպասարկման պատուհանում, որովհետև վերստեղծված ցանցի կոնտեյներները վերագործարկվում են՝ անկախ նրանից՝ պլանավորել եք դա, թե ոչ։
Հետևեք փաստաթղթավորված դեմոնի կոնֆիգուրացիային ու վերագործարկման ընթացակարգին և համակարգեք ընդհատումը։ Մեկ դեմոնով հոսթում systemctl restart docker-ը վերագործարկում է կոնտեյներները՝ ըստ դրանց վերագործարկման քաղաքականության, և դա վարք է, որն արժե իմանալ ավելի շուտ, քան հետո։
Ապա ստուգեք այն երկու բաները, որոնք փոփոխությունը պետք է ուղղեր։ Ստուգեք նոր ենթացանցը docker network inspect-ով և հաստատեք, որ այն ընտրված հիմքի ներսում է, ապա ստուգեք երթուղին դեպի ներկայացուցչական VPN նպատակակետ ip route get 10.20.30.40-ով և հաստատեք, որ այն գնում է այնտեղ, որտեղ սպասում եք, և ոչ թե կամուրջ։ Փորձարկեք նաև ծառայությունների հայտնաբերումը և կոնտեյներ-կոնտեյներ հաղորդակցությունը, որովհետև այլ հասցեավորությամբ վերստեղծված ցանցը կարող է կոտրել անունների լուծումը այնպես, որ թվում է հավելվածի սխալ։
Ինչ է դեռ կոտրվում դրանից հետո
Երկարատև մասը գրառումն է։ Պահեք հատկացումների ցանկը, ընտրված հիմքն ու չափը, և վերստեղծված ցանցերը տեղակայման նույն վայրում։
Միջակայքի մասնավոր լինելը այն անվտանգ չի դարձնում վերօգտագործման համար։ 10.0.0.0/8-ը մասնավոր է և միևնույն ժամանակ ամենահավանական բանը, որ արդեն օգտագործվում է ուղու ինչ-որ տեղ, դրա համար էլ պատասխանը կոնկրետ ամրագրում է, ոչ թե մեկ բլոկի նախապատվություն։ Docker-ի ցանցային փաստաթղթերը նկարագրում են ենթացանցերի ավտոմատ հատկացումը և փուլի դաշտերը։ Ընտրեք միջակայքը՝ ելնելով նրանից, թե ինչին պետք է հասնեք, ոչ թե նրանից, ինչը կոկիկ է թվում։