Дополнительные сети VLAN для подов и виртуальных машин — теперь бесплатно в нашей Deckhouse Platform

Стандартная сеть Kubernetes даёт поду один интерфейс и адрес из внутреннего диапазона, но иногда приложениям этого не хватает: нужны дополнительные сети для интеграции с legacy-инфраструктурой, изоляции трафика или прямого доступа в публичные сети. В ванильном K8s это превращается в сложную настройку нескольких компонентов и ручную работу на каждом узле.

Мы в Deckhouse эту боль закрыли модулем sdn, где дополнительные сети описываются декларативно, а агент на узле сам поднимает нужные VLAN-интерфейсы. Теперь базовые возможности модуля — кластерные VLAN-сети с DHCP и настройкой MTU — входят в бесплатную Deckhouse Platform Open и в базовую Deckhouse Platform Core. А всё, что относится к самостоятельному управлению сетями команд, прямому доступу к интерфейсам узлов и системным сетям, вошло в расширение «Продвинутые сетевые возможности». 

Всем привет! Я Петр Антонов — руководитель продуктовых направлений «Сети и провайдеры для частной инфраструктуры» в команде Deckhouse. В новости рассказываю, какие возможности sdn теперь входят в базовую платформу, что доступно в расширении и как настроить дополнительную сеть в кластере.

Запутались в базовых возможностях платформы и расширениях? Объясняем, как изменилась доступность модуля sdn после обновления продуктовой линейки Deckhouse — какие редакции были раньше и как это устроено сейчас (кликайте).

Как было раньше:

Раньше у Deckhouse были бесплатная редакция Community Edition и коммерческие Basic Edition, Standard Edition, Standard Edition+ и Enterprise Edition. Модуль sdn с возможностями создания дополнительных сетей был доступен только в Enterprise Edition.

Что изменилось:

Мы провели крупные изменения платформы. Теперь состав редакций выглядит так:

  • Deckhouse Platform Open — та же бесплатная редакция с открытым исходным кодом (прежнее название — Deckhouse Community Edition).

  • Deckhouse Platform Core — включает базовые возможности платформы и позволяет собрать индивидуальное решение под ваши задачи с помощью совместимых расширений. Теперь пользователи не ограничены фиксированным набором редакций Enterprise, Basic, Standard или Standard Edition+. 

  • Deckhouse Platform Ultimate — включает все базовые возможности платформы и расширения «из коробки».

Подробнее об изменениях в продуктах читайте в новости про Deckhouse Platform и новую продуктовую линейку. 

Как стало сейчас:

Базовые возможности модуля sdn (кластерные VLAN-сети с DHCP, адресацией и настройкой MTU) теперь входят в саму платформу — доступны и в Deckhouse Platform Open, и в Deckhouse Platform Core.

Продвинутые возможности (самостоятельное управление сетями команд, прямой доступ к сетевым интерфейсам узлов, создание системных сетей) вошли в расширение «Продвинутые сетевые возможности», которое можно подключить к Core или получить сразу в составе Deckhouse Platform Ultimate.

Для использования потребуются модуль sdn версии 0.8.0 и выше и Kubernetes 1.32 и выше.

Зачем поду или виртуальной машине физическая сеть

Для типичных микросервисов достаточно одного интерфейса и IP-адреса из внутреннего диапазона кластера. Но есть сценарии, где нужны дополнительные сетевые интерфейсы:

  • Запуск монолитных приложений в классической виртуализации. Классическим приложениям или виртуалке нужен IP из того же VLAN, где остались её соседние компоненты, чтобы не переделывать всю маршрутизацию в ЦОДе.

  • Изоляция трафика. Базе данных или хранилищу нужен выделенный сегмент сети, чтобы не делить общую полосу с остальным кластером.

  • Доступ в публичные сети. Сервису (например, работающему на уровне L4), который принимает внешний трафик, иногда нужен честный публичный IP без прослоек в виде балансировщиков и NAT.

Чтобы подключить к поду или виртуальной машине дополнительную сеть, в Kubernetes обычно требуется несколько компонентов: мета-плагин для подключения нескольких сетевых интерфейсов, отдельный CNI-плагин для VLAN, IPAM для выдачи адресов и настройка сетевых интерфейсов на узлах.

Наш модуль sdn объединяет всё это в одном решении, и вместо ручной настройки сетевых интерфейсов на каждом узле достаточно один раз описать желаемое состояние сети. Подробности дальше.

Какие возможности модуля sdn теперь входят в состав платформы

Кластерные сети и всё необходимое для их работы доступны в Deckhouse Platform Core и в бесплатной Deckhouse Platform Open.

Как это работает «под капотом»:

Кластерная сеть (ClusterNetwork). Это L2-домен, который администратор создаёт один раз и может подключать к подам и виртуальным машинам в любом неймспейсе кластера. Сеть строится поверх тегированного VLAN (тогда коммутация идёт на оборудовании ЦОДа, а в кластере можно завести до 4094 таких сетей) или на выделенных интерфейсах узлов без тегов. Внутри пода сеть появляется как отдельный сетевой интерфейс с заданным именем.

Интерфейсы узлов (NodeNetworkInterface). Сетевые карты обнаруживаются автоматически, а Bond, мосты и VLAN-интерфейсы поверх них описываются декларативно.

Адресация (ClusterIPAddressPool и IPAddress). Адрес из пула выдаётся автоматически при подключении пода/ВМ или может быть запрошен явно. Назначить его можно двумя способами: напрямую на интерфейс или по DHCP, тогда адрес отдаётся в ответ на запрос из пода или виртуальной машины. DHCP-сервер реализован на eBPF в агенте узла и отдельный сервис для него не нужен. Освободившиеся адреса удерживаются в течение заданного времени и не выдаются повторно сразу. Пока поддерживается только IPv4.

MTU. Задаётся отдельным полем в описании сети. Интерфейсы подов наследуют его. При изменении значения уже подключённые поды переконфигурируются без пересоздания.

Так выглядит кластерная сеть поверх VLAN 900 с пулом адресов:

apiVersion: network.deckhouse.io/v1alpha1kind: ClusterIPAddressPoolmetadata: name: public-net-poolspec: leaseTTL: 24h pools: - network: 203.0.113.0/24 ranges: - 203.0.113.10-203.0.113.200---apiVersion: network.deckhouse.io/v1alpha1kind: ClusterNetworkmetadata: name: public-networkspec: type: VLAN vlan: id: 900 parentNodeNetworkInterfaces: labelSelector: matchLabels: nic-group: extra ipam: ipAddressPoolRef: kind: ClusterIPAddressPool name: public-net-pool

Метка nic-group: extra заранее ставится на те ресурсы NodeNetworkInterface, поверх которых разрешено строить дополнительные сети. К поду сеть подключается аннотацией:

apiVersion: v1kind: Podmetadata: name: app-with-public-network annotations: network.deckhouse.io/networks-spec: | [ { "type": "ClusterNetwork", "name": "public-network", "ifName": "net1" } ]spec: containers: - name: app image: nginx

После запуска в аннотации network.deckhouse.io/networks-status видно, какой адрес и какие маршруты получил интерфейс, а также в каком он состоянии.

Администратор описывает сеть один раз, и на каждом узле появляется VLAN с мостом. Под получает второй интерфейс с адресом напрямую, виртуальная машина — по DHCP в гостевую системуАдминистратор описывает сеть один раз, и на каждом узле появляется VLAN с мостом. Под получает второй интерфейс с адресом напрямую, виртуальная машина — по DHCP в гостевую системуЧто даёт расширение «Продвинутые сетевые возможности»

Кластерную сеть заводит администратор, и она общая для всего кластера. Всё, что относится к самостоятельным сетям команд, прямому доступу к сетевым картам узлов и служебным сетям, входит в расширение «Продвинутые сетевые возможности»:

  • Сети проектов. Помимо кластерных сетей, можно выделить изолированную сеть в рамках одного проекта. Сетевой инженер один раз задаёт безопасные границы (диапазоны VLAN ID и интерфейсы) через ресурс NetworkClass. После этого команды самостоятельно создают свои сети и управляют ими (ресурсы Network и IPAddressPool) в своём неймспейсе. Это автоматизирует рутинные задачи, избавляя сетевых специалистов от потока мелких запросов. 

  • Проброс сетевых карт. Ресурс UnderlayNetwork отдаёт подам физические или виртуальные функции сетевых карт через Dynamic Resource Allocation. Такой режим используется, в частности, для SR-IOV и высокопроизводительных сетевых нагрузок с DPDK и VFIO.

  • Системные сети. SystemNetwork позволяет создавать дополнительные служебные сети на узлах поверх underlay-сетей для трафика хранилищ и управления.

Без расширения эти ресурсы в кластере не появляются: модуль собирается отдельно для каждой поставки.

Как попробовать модуль

Важный нюанс: модуль sdn находится на стадии Preview. Это значит, что часть функциональности ещё может измениться, а при переходе на будущие версии может потребоваться ручная миграция. Для сетей поверх VLAN также нужно заранее выделить диапазоны VLAN ID на коммутаторах и настроить их на портах узлов.

Включить модуль можно через веб-интерфейс платформы в разделе «Модули», командой d8 system module enable sdn в CLI или применив манифест ModuleConfig:

apiVersion: deckhouse.io/v1alpha1kind: ModuleConfigmetadata: name: sdnspec: enabled: true

После включения модуля в кластере появятся ресурсы типа NodeNetworkInterface с текущим состоянием интерфейсов узлов. Дальше по шагам из руководства администратора нужно разметить интерфейсы, создать пул адресов и сеть и подключить её к поду по руководству пользователя. Описание всех ресурсов ищите в разделе документации модуля «Кастомные ресурсы».

Попробуйте модуль в деле, делитесь идеями по улучшению и задавайте вопросы в Telegram-сообществе.

P. S. 

Больше материалов о сетях:

  • Доклад «Путь к SDN: чего не хватает в классической сети Kubernetes?» от руководителя разработки сетевой подсистемы Deckhouse

  • Статья «IP подов кончились, а обычные решения не подошли: как мы расширили сеть на проде, не пересоздавая кластер»

  • Статья «Балансировка входящего трафика на железе: как надёжно вывести K8s наружу с MetalLB, BGP и L2»

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев