Памылка перакрыцця пулаў Docker — не праблема маршруту VPN
Адна памылка ўзнікае падчас выдзялення, другая — пасля змены маршруту. Прачытайце падсеткі IPAM, перш чым кранаць адрасы кантэйнераў або тунель.
Docker адмаўляецца ствараць сетку з паведамленнем, што пул перакрываецца з іншым у гэтай адраснай прасторы, і хтосьці вырашае, што вінаваты маршрут VPN. Гэтага быць не можа. Гэтая памылка ўзнікае, пакуль выдзяляецца пул, да існавання хоць аднаго пакета, і ручны маршрут ядра на яе не ўплывае. VPN важны на крок пазней, калі кантэйнер, які ўжо мае адрас, перастае быць дасяжным пасля з'яўлення маршруту. Дзве праблемы, два наборы доказаў, і змешванне іх дае змену, якая не выпраўляе ніводную.
Дзве памылкі, якія выглядаюць аднолькава
Памылка выдзялення — арыфметычная. Docker параўноўвае падсетку, якую вы запыталі, з падсеткамі, якімі ўжо кіруе, знаходзіць перасячэнне і адмаўляе. Нічога яшчэ не працуе, таму няма ні маршруту, ні кантэйнера, ні трафіку для агляду.
Сімптом падчас працы — пытанне дасяжнасці. Кантэйнер, які адказваў учора, не адказвае цяпер, і нешта змянілася ў табліцы маршрутызацыі хоста. Кантэйнер па-ранейшаму трымае свой адрас; пытанне ў тым, які шлях гэты адрас выбірае.
Абедзве — праблемы адраснага плана. Толькі адна з іх — праблема Docker.
Спачатку прачытайце выдзеленыя пулы
Пералічыце сеткі і агледзьце тыя, што могуць перасякацца. Падсетка жыве ў канфігурацыі IPAM, а далучаныя кантэйнеры пералічаны асобна:
docker network ls
docker network inspect EXISTING_NETWORK
Параўнайце гэтую падсетку з пулам, які запытвае новая сетка, і памятайце, што Compose стварае ўласную сетку па змаўчанні для кожнага праекта. Канфлікт з праектам, пра які вы забыліся, выглядае дакладна як канфлікт з дэманам.
Статычны ipv4_address у сэрвісе — гэта адрас аднаго кантэйнера, а не вызначэнне пула. Яго змена не прыбірае перакрыцце, бо перакрыцце паміж падсеткамі сетак, а не паміж кантэйнерамі. Згодна з даведнікам па стварэнні сетак Docker, для звычайнага размеркавання праз мост патрабуюцца падсеткі, якія не перакрываюцца, і ў ім апісана, як выбраць адну яўна.
Выберыце прэфікс, які перажыве VPN
Непасрэдны канфлікт і будучы маршрут вызначаюцца адным выбарам, таму зрабіце яго аднойчы. Параўнайце магчымы дыяпазон з LAN, з кожным пунктам прызначэння VPN, да якога можа дабрацца хост, і з любым іншым overlay, што выкарыстоўваецца.
Прэфікс, які задавальняе Docker і сутыкаецца з аддаленай сеткай, дасць вам кантэйнер, які чыста запускаецца і становіцца недасяжным у момант, калі тунель падняты. Гэта другая памылка ў гэтым артыкуле, і яе значна цяжэй дыягнаставаць потым, чым пазбегнуць зараз.
Запішыце абраныя дыяпазоны туды, адкуль наступны праект зможа іх прачытаць. Рэестр выдзеленых прэфіксаў у адзін радок таннейшы за тыдзень невядомых тайм-аўтаў.
Выводзьце або змяняйце сетку свядома
Для новай сеткі Compose задайце невыкарыстаны прэфікс у канфігурацыі IPAM гэтай сеткі. Для існуючага праекта сплануйце перанумарацыю: фіксаваныя адрасы, залежныя сэрвісы і крок перастварэння сеткі — усё трэба ўлічыць, бо рэдагаванне YAML не перанумароўвае працуючую сетку.
Калі састарэлая сетка валодае канфліктным выдзяленнем, агледзьце, хто да яе далучаны, перш чым выдаляць. docker network rm адмаўляе, пакуль існуюць актыўныя endpoint-ы, а docker stop прымае імёны або ID кантэйнераў, а не імя сеткі. Спыненне кантэйнера таксама не выдаляе вызначэнне сеткі, якое трымае пул.
Шырокае prune — не інструмент дыягностыкі. Яно дасягае непаўязаных праектаў і знішчае доказы, якія вы збіраліся сабраць.
Пулы па змаўчанні дапамагаюць толькі наступнаму выдзяленню
Налада пула адрасоў па змаўчанні ў дэмана паляпшае будучыя аўтаматычныя выдзяленні, трымаючы іх па-за дыяпазонамі, якія вы рэзервуеце. Яна не пераадрасоўвае заднім числом сеткі, якія ўжо існуюць, і не вырашае яўную падсетку, што перакрываецца з іншай яўнай падсеткай.
Стаўцеся да гэтай налады як да асобнай, спланаванай змены з уласным перазапускам, а не як да часткі рамонту аднаго праекта. Змешванне двух азначае, што перазапуск дэмана трапляе ў сярэдзіну непаўязанага расследавання. Прызначце для яго асобнае акно. Затым пацвердзіце, што адно новае аўтаматычнае выдзяленне сапраўды апынулася па-за дыяпазонамі, якія вы зарэзервавалі.
Калі стварэнне ўдалося, праверце падсетку, якая фактычна працуе, і затым зрабіце адзін рэальны запыт прыкладання, калі VPN у патрэбным стане. Калі пул слушны, а доступ усё яшчэ не працуе, рэштка працы — выбар маршруту, фільтраванне і зваротны шлях. Гэта расследаванне часу выканання, і яно не робіць памылку выдзялення заднім числом бессэнсоўнай.
Парадак працы: прачытайце выдзеленыя пулы, выберыце прэфікс, які абыходзіць і Docker, і пункты прызначэння VPN, свядома перастварыце сетку, затым праверце адзін запыт з паднятым тунелем.