Docker swarm препятствует участию узла во входной сети
Вполне возможно, очень тривиальный вопрос, но я не могу найти ничего в документации о такой функции, как эта. Как мы знаем из документации по сетке маршрутизации:
Все узлы участвуют во входной сетке маршрутизации. Сетка маршрутизации позволяет каждому узлу в рое принимать соединения через опубликованные порты для любой службы, работающей в рое, даже если на узле не выполняется никаких задач. Сетка маршрутизации направляет все входящие запросы на опубликованные порты на доступных узлах в активный контейнер.
Однако я не хочу, чтобы некоторые узлы участвовали в сетке маршрутизации, но я все же хочу, чтобы они участвовали в размещении сервиса.
Конфигурация, которую я пытаюсь достичь, выглядит примерно так:
У меня есть один сервис, hello-world
с тремя экземплярами, по одному на каждый узел.
Я хотел бы, в этом примере, только node-1
а также node-2
участвовать в экстернализации ingress
сеть. Тем не менее, когда я посещаю 10.0.0.3
он все еще выставляет порт 80
а также 443
как это все еще должно иметь ingress
сеть на нем, чтобы иметь возможность запустить контейнер hello-world
и я бы хотел, чтобы это было не так.
По сути, я хотел бы иметь возможность запускать контейнеры для службы, которая размещает порт 80
& 443
на 10.0.0.3
без доступа к нему, посетив 10.0.0.3
в веб-браузере. Есть ли способ настроить это? Даже если на узле нет запущенного контейнера, он все равно будет перенаправлять трафик в работающий контейнер.
Спасибо!
1 ответ
Короткий ответ на ваш конкретный вопрос: нет, не существует поддерживаемого способа выборочно включать / отключать входную сеть на определенных узлах для определенных оверлейных сетей.
Но исходя из того, что вы просите сделать, ожидаемая модель использования только определенных узлов для входящего трафика заключается в том, чтобы контролировать, какие узлы получают трафик, а не отключать порты на определенных узлах...
В типичном рое из 6 узлов вы разделили своих менеджеров для защиты в другой подсети от DMZ (например, подсети позади рабочих). Вы бы использовали ограничения размещения, чтобы гарантировать, что рабочие нагрузки вашего приложения были назначены только рабочим узлам, и эти узлы были единственными в VLAN/Security Group/etc. за доступность из трафика пользователя / клиента.
Большинство проектов Swarm рекомендуют защищать ваших менеджеров (которые управляют оркестровкой и расписанием контейнеров, хранят секреты и т. Д.) От внешнего трафика.
Почему бы не разместить свои прокси на рабочих в сети, доступной для клиента, и иметь эти узлы только в DMZ/ внешнем LB.
Обратите внимание, что если вы разрешаете брандмауэр /LB-доступ только некоторым узлам (например, только 3 сотрудникам), то другие узлы, которые не получают внешний входящий трафик, фактически не используют свои входные сети, что позволяет достичь желаемого результата. Узел, который получает внешнее соединение, использует свой VIP для маршрутизации трафика непосредственно к узлу, на котором выполняется опубликованный порт контейнера.