Змена default-address-pools не перанумароўвае сеткі, якія ў вас ужо ёсць, і менавіта чаканне гэтага ператварае акуратны план у нечаканы збой. Налада кіруе аўтаматычным размеркаваннем для сетак, створаных пасля перазапуску дэмана з новай канфігурацыяй. Усё, што ўжо працуе, захоўвае сваю падсетку, бо гэтая падсетка з'яўляецца часткай захаванага азначэння сеткі. Міф зручны, бо мяркуе, што адна праўка выпраўляе ўсякае перасячэнне, а рэальнасць — праца з дзвюх частак: выбраць дыяпазон, які сапраўды свабодны, а затым міграваць сеткі, якія такімі не з'яўляюцца.

Міф: адна змена пула выпраўляе перасячэнне

Міф мае канкрэтную форму. Хтосьці чытае, што пул Docker па змаўчанні можна змяніць, змяняе яго, перазапускае дэман і робіць выснову, што сетка кантэйнераў больш не сутыкаецца з офісным VPN. Старая сетка ўсё яшчэ там, усё яшчэ далучана і ўсё яшчэ трымае адрас, які сутыкаецца.

Змяніліся будучыя паводзіны размеркавальніка, што сапраўды карысна і сапраўды абмежавана. Новыя сеткі, створаныя без яўнага --subnet, выразаюцца з новага пула; існыя ж ніколі ў тым пуле не былі. Перазапуск не перабудоўвае сеткі і не перамяшчае кантэйнеры паміж імі. Калі сімптом застаецца пасля змены, змена была рэальнай, а дыягназ — няпоўным.

Базавы дыяпазон і размеркаваны прэфікс

У канфігурацыі ёсць два палі, якія лёгка зблытаць. base — гэта дыяпазон, з якога выразае размеркавальнік, а size — даўжыня прэфікса кожнай размеркаванай сеткі, таму база 10.10.0.0/16 з памерам 24 выдае /24 унутры гэтага /16. Перавернутыя ролі даюць схему размеркавання, якую вы не планавалі, звычайна адну велізарную сетку або вычарпаны пул.

Пул — гэта рэзерваванне, а не доказ. Docker пазбягае канфліктаў, якія бачыць у табліцы маршрутызацыі хоста, і не можа ўбачыць VPN, да якога вы яшчэ не далучыліся.

Гэтае абмежаванне — уся прычына выбіраць свядома. Дыяпазоны для параўнання — тыя, да якіх хост павінен дацягнуцца: офісная LAN, унутраныя падсеткі карпаратыўнага VPN, прэфіксы лабараторыі ці стэйджынгу і любы іншы хост кантэйнераў у тым жа оверлеі. Запішыце іх як CIDR, перш чым чапаць дэман, бо спіс у галаве прапусціць менавіта той, які важны. Затым выберыце базу, якая ні з чым не перасякаецца, і трымайце спіс разам з разгортваннем, каб наступны чалавек не паўтараў практыкаванне па памяці.

Пералічыце перад выбарам

Спачатку пералічыце тое, што ёсць. docker network ls пералічвае сеткі, а docker network inspect bridge -f '{{.IPAM.Config}}' друкуе падсетку, якую выкарыстоўвае пэўная сетка. Паўтарыце для кожнай сеткі, вызначанай карыстальнікам, бо праекты Compose ствараюць свае, а яўны --subnet у файле compose цалкам абыходзіць пул.

Апошні пункт — той, што перажывае міграцыю. Змена пула не перашкаджае калегу замацаваць 172.18.0.0/16 у файле compose, і канфлікт вяртаецца з іншым аўтарам.

Міграцыя таго, што ўжо ёсць

Міграцыя існых сетак — асобная, падтрыманая аперацыя. Кожную закранутую сетку трэба перастварыць з новай падсеткай, што азначае адлучыць і зноў далучыць кантэйнеры, якія яе выкарыстоўваюць, а перастварэнне сеткі выдаляе яе далучэнні кантэйнераў, а не пераносіць іх. Захавайце томы і канфігурацыю і стаўцеся да перастварэння як да разгортвання, а не як да скіду даных. Рабіце гэта ў акно абслугоўвання, бо кантэйнеры на перастворанай сетцы перазапускаюцца незалежна ад таго, ці планавалі вы гэта.

Выконвайце дакументаваную канфігурацыю дэмана і працэдуру перазапуску і ўзгадніце перапынак. На хосце з адным дэманам systemctl restart docker перазапускае кантэйнеры згодна з іх палітыкамі перазапуску, і гэтыя паводзіны варта ведаць раней, а не потым.

Затым праверце дзве рэчы, якія змена павінна была выправіць. Даследуйце новую падсетку праз docker network inspect і пацвердзіце, што яна ўнутры абранай базы, затым праверце маршрут да прадстаўнічага прызначэння VPN праз ip route get 10.20.30.40 і пацвердзіце, што ён ідзе туды, куды вы чакаеце, а не ў мост. Праверце таксама выяўленне службаў і сувязь паміж кантэйнерамі, бо сетка, пераствораная з іншай адрасацыяй, можа зламаць развязанне імёнаў так, што выглядае як памылка праграмы.

Што ўсё яшчэ ламаецца потым

Доўгатрывалая частка — гэта запіс. Трымайце спіс размеркавання, абраныя базу і памер, а таксама пераствораныя сеткі ў тым жа месцы, што і разгортванне.

Тое, што дыяпазон прыватны, не робіць яго бяспечным для паўторнага выкарыстання. 10.0.0.0/8 прыватны і адначасова найбольш імаверна ўжо выкарыстоўваецца недзе на шляху, таму адказ — канкрэтнае рэзерваванне, а не перавага аднаму блоку. Дакументацыя па сетках Docker апісвае аўтаматычнае размеркаванне падсетак і палі пула. Выбірайце дыяпазон з таго, да чаго вам трэба дацягнуцца, а не з таго, што выглядае акуратна.

Падобныя артыкулы