Дополнительные сети

Обзор

Дополнительные сети позволяют использовать пользовательские сети в дополнение к основному CNI Cilium. Для SR-IOV используются ресурсы SriovNetworkNodePolicy и SriovNetwork; для пользовательских сетей при установленном модуле shturval-metacni используется NetworkAttachmentDefinition.


SR-IOV

SR-IOV позволяет подключать контейнеры непосредственно к сетевому оборудованию. Ресурсы SriovNetworkNodePolicy и SriovNetwork связаны между собой и вместе обеспечивают управление сетевыми настройками SR-IOV на уровне узла.

Все ресурсы SR-IOV должны находиться в том же неймспейсе, где установлен SRIOV-Operator. В интерфейсе для этих ресурсов автоматически применяется неймспейс kube-system.

Настройка выполняется в таком порядке:

  1. Создайте SriovNetworkNodePolicy: она определяет, какие узлы и сетевые карты охватываются политикой SR-IOV.
  2. Создайте SriovNetwork: она создаёт сеть для SR-IOV-совместимой сетевой карты и связывается с политикой через ResourceName.
  3. Проверьте созданные ресурсы.

Создание SriovNetworkNodePolicy

  1. Откройте страницу SriovNetworkNodePolicy в разделе Сети.
  2. Нажмите + Добавить SriovNetworkNodePolicy.
  3. Заполните параметры политики:
    • Название — имя ресурса.
    • ResourceName — имя ресурса, которое связывает SriovNetworkNodePolicy с SriovNetwork.
    • Селектор узлов — лейблы узлов, на которые распространяется политика. Селектор лейблов работает по принципу объединения: у выбираемого объекта должны быть все указанные лейблы.
    • Приоритет — порядок применения политики, если для узла подходит несколько политик.
    • deviceTypes — тип драйвера для создаваемых VF: netdevice для драйвера в ядре Linux или vfio-pci для DPDK.
    • mtu — значение MTU для устройств.
    • nicSelector — фильтры для выбора NIC. Можно использовать подмножества на основе Vendor ID, Device ID, Root Device ID и имена PfNames.
    • numVfs — количество виртуальных функций, которое должно быть настроено на каждом NIC.
    • linkType — тип сетевого соединения: Eth для Ethernet или IB для InfiniBand.
    • eSwitchMode — режим работы виртуального коммутатора: legacy или switchdev.
    • isRdma — признак поддержки RDMA.
  4. При необходимости задайте лейблы и аннотации.
  5. Сохраните ресурс. Созданная политика появится в списке элементов.
Скриншот: SriovNetworkNodePolicy

SriovNetworkNodePolicy

Скриншот: nicSelector

Селектор NIC для SR-IOV

Создание SriovNetwork

Перед созданием SriovNetwork должен быть создан ресурс SriovNetworkNodePolicy.

  1. Откройте страницу SriovNetworks в разделе Сети.
  2. Нажмите + Добавить SriovNetwork.
  3. Заполните параметры сети:
    • Название — имя ресурса.
    • ResourceName — значение, которое соответствует ResourceName сетевой политики SriovNetworkNodePolicy.
    • Спецификация IPAM — параметры управления IP-адресами в формате JSON.
    • Спецификация capabilities — возможности SR-IOV в формате JSON.
    • vlan — опциональный идентификатор VLAN.
    • spoofChk — параметр для включения или отключения проверки поддельности.
    • Включить режим доверия VF — опциональный параметр, который указывает, должен ли VF доверять пакетам с потенциально вредоносным содержимым.
    • maxTxRate и minTxRate — максимальная и минимальная TX-скорость в мегабитах в секунду. Допускается ограничивать только одно из значений.
    • linkState — состояние связи VF: auto, enable или disable.
    • networkNamespace — неймспейс, в котором будет создана сеть.
    • vlanQoS — уровень обслуживания сетевого трафика внутри VLAN.
  4. При необходимости задайте лейблы.
  5. Сохраните ресурс. Созданная сеть появится в списке элементов.
Скриншот: SriovNetworks

SriovNetworks

Значения linkState:

  • auto — состояние связи определяется драйвером сетевого интерфейса. Это значение по умолчанию.
  • enable — VF всегда включён, даже если PF не подключён к сети. При этом доступен исходящий трафик, инициализированный с VF, но входящий трафик от PF недоступен.
  • disable — VF всегда выключен, независимо от состояния PF.

Значения vlanQoS:

  • 0best effort: сетевые пакеты обрабатываются на равных условиях без предпочтений или приоритетов.
  • 1-7 — CoS по стандарту 802.1p. Значения определяют приоритеты обработки пакетов в зависимости от значимости или типа трафика.
  • -1 — настройка по умолчанию или отсутствие явной настройки VLAN QoS для данного VF.

Пример IPAM для SriovNetwork

IPAM используется для управления и выделения IP-адресов. Тип whereabouts означает динамическое управление диапазонами IP-адресов и их назначение контейнерам. Тип static означает статическое управление адресами: адреса назначаются вручную, а механизмы автоматического назначения и управления адресами отключены.

{
  "spec": {
    "ipam": {
      "type": "static",
      "subnet": "10.56.217.0/24",
      "rangeStart": "10.56.217.171",
      "rangeEnd": "10.56.217.181",
      "routes": [{"dst": "0.0.0.0/0"}],
      "gateway": "10.56.217.1"
    }

Пример capabilities для SriovNetwork

В capabilities задаются возможности SR-IOV. В примере mac указывает, что SR-IOV-интерфейс может иметь собственный MAC-адрес, а ips — что SR-IOV-интерфейс может иметь собственный IP-адрес.

{
  "mac": true,
  "ips": true
}

Проверка ресурсов SR-IOV

После создания ресурсов проверьте, что они появились в кластере:

kubectl get sriovnetworknodepolicies -n kube-system
kubectl get sriovnetworks -n kube-system

NetworkAttachmentDefinitions

Ресурс NetworkAttachmentDefinition позволяет использовать пользовательские сети в дополнение к основному CNI Cilium при установленном модуле shturval-metacni.

NetworkAttachmentDefinition создаётся автоматически при создании SriovNetwork. Для созданного NetworkAttachmentDefinition можно изменять только лейблы и аннотации. Чтобы изменить саму спецификацию, измените сетевую политику SriovNetworkNodePolicy.

Создание NetworkAttachmentDefinition

  1. Откройте страницу NetworkAttachmentDefinitions в разделе Сети.
  2. Нажмите + Добавить NetworkAttachmentDefinition.
  3. Укажите название ресурса.
  4. Выберите неймспейс, в котором ресурс будет использован.
  5. При необходимости задайте лейблы и аннотации.
  6. В блоке Спецификация укажите конфигурацию пользовательского ресурса в формате JSON.
  7. Сохраните ресурс. Созданный NetworkAttachmentDefinition появится в списке элементов.
Скриншот: NetworkAttachmentDefinitions

NetworkAttachmentDefinitions

Пример спецификации NetworkAttachmentDefinition

config: '{
      "cniVersion": "0.3.1",
      "name": "my-multus-network",
      "type": "macvlan",
      "master": "eth0",
      "mode": "bridge",
      "ipam": {
        "type": "host-local",
        "subnet": "192.168.1.0/24",
        "rangeStart": "192.168.1.200",
        "rangeEnd": "192.168.1.216",
        "routes": [{ "dst": "0.0.0.0/0" }],
        "gateway": "192.168.1.1"
      }
    }'

Описание полей спецификации:

  • cniVersion — версия CNI.
  • name — имя сети.
  • type — тип сетевого интерфейса, например macvlan.
  • master — название основного сетевого интерфейса на узле Kubernetes.
  • mode — режим работы.
  • ipam — параметры управления IP-адресами:
    • type — тип IPAM.
    • subnet — сеть, в которой будут распределяться IP-адреса.
    • rangeStart и rangeEnd — диапазон, в который будут распределяться IP-адреса.
    • routes — маршруты для сети.
    • gateway — шлюз для сети.

Проверка NetworkAttachmentDefinition

После создания ресурса проверьте его наличие:

kubectl get network-attachment-definitions -A
kubectl get network-attachment-definitions <имя> -n <неймспейс> -o yaml