Перейти к содержанию

Принципы работы нескольких сетей

Принципы работы нескольких сетей

Платформа Боцман позволяет использовать аддон CNI Multus для объединения плагинов CNI в цепочки. Можно определить дополнительную сеть на основе доступных плагинов CNI и подключить к ней один или несколько подов. В зависимости от потребностей, можно определить несколько дополнительных сетей.

Управлять жизненным циклом дополнительной сети в можно с помощью CRD NetworkAttachmentDefinition, который поставляется с аддоном Multus.

Структура манифеста NetworkAttachmentDefinition представлена ниже:

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: <nad-name>
spec:
  # ниже в поле config указан json-конфиг CNI плагина
  config: |-
    {
      ...
    }

Использование в поде:

Использование в поде

apiVersion: v1
kind: Pod
metadata:
  name: app
  annotations:
    k8s.v1.cni.cncf.io/networks: <nad-name>
spec: <pod-spec>

Примеры конфигураций CNI плагинов

Поддерживаются следующие типы сетей:

  1. Bridge
  2. Host device
  3. VLAN
  4. IPVLAN
  5. MACVLAN

Bridge

{
  "cniVersion": "0.3.1",
  "name": "bridge-net",
  "type": "bridge",
  "isGateway": true,
  "vlan": 2,
  "ipam": {
    "type": "dhcp"
  }
}

Таблица параметров CNI Bridge

Поле Тип Описание
cniVersion string Версия спецификации CNI. Требуется значение 0.3.1.
name string Значение параметра name, которое вы указали ранее в конфигурации CNO.
type string Имя настраиваемого CNI-плагина: bridge.
ipam object Объект конфигурации для IPAM CNI-плагина. Плагин управляет назначением IP-адресов для определения подключения.
bridge string Необязательно: укажите имя виртуального моста. Если интерфейс моста не существует на хосте, он будет создан. Значение по умолчанию — cni0.
ipMasq boolean Необязательно: установите true, чтобы включить маскарадинг IP для трафика, покидающего виртуальную сеть. Исходный IP-адрес для всего трафика перезаписывается на IP-адрес моста. Если у моста нет IP-адреса, этот параметр не имеет эффекта. По умолчанию — false.
isGateway boolean Необязательно: установите true, чтобы назначить IP-адрес мосту. По умолчанию — false.
isDefaultGateway boolean Необязательно: установите true, чтобы настроить мост как шлюз по умолчанию для виртуальной сети. По умолчанию — false. Если установлено true, параметр isGateway также автоматически принимает значение true.
forceAddress boolean Необязательно: установите true, чтобы разрешить назначение ранее назначенного IP-адреса виртуальному мосту. Если установлено false, при попытке назначить адрес из перекрывающихся подсетей возникнет ошибка. По умолчанию — false.
hairpinMode boolean Необязательно: установите true, чтобы разрешить мосту отправлять Ethernet-фрейм обратно через тот же порт, через который он был получен (режим «reflective relay»). По умолчанию — false.
promiscMode boolean Необязательно: установите true, чтобы включить неразборчивый режим (promiscuous mode) на мосту. По умолчанию — false.
vlan string Необязательно: укажите тег виртуальной локальной сети (VLAN) в виде целого числа. По умолчанию тег VLAN не назначается.
preserveDefaultVlan string Необязательно: указывает, должен ли сохраняться VLAN по умолчанию на стороне veth, подключенной к мосту. По умолчанию — true.
mtu integer Необязательно: установите максимальную единицу передачи (MTU). По умолчанию значение устанавливается ядром автоматически.
enabledad boolean Необязательно: включает обнаружение дубликатов адресов (DAD) для veth на стороне контейнера. По умолчанию — false.
macspoofchk boolean Необязательно: включает проверку подмены MAC-адреса, ограничивая исходящий трафик из контейнера MAC-адресом интерфейса. По умолчанию — false.

Host Device

Заметка

Объявите сетевое устройство указав один и только один из следующих параметров: device, hwaddr, kernelpath,

pciBusID

{
  "cniVersion": "0.3.1",
  "name": "hostdev-net",
  "type": "host-device",
  "device": "bond0"
}

Таблица параметров CNI host-device

Поле Тип Описание
cniVersion string Версия спецификации CNI. Требуется значение 0.3.1.
name string Значение параметра name, которое вы указали ранее в конфигурации CNO.
type string Имя настраиваемого CNI-плагина: host-device.
device string Необязательно: имя устройства, например bond0.
hwaddr string Необязательно: аппаратный MAC-адрес устройства.
kernelpath string Необязательно: путь к устройству в ядре Linux, например /sys/devices/pci0000:00/0000:00:1f.6.
pciBusID string Необязательно: PCI-адрес сетевого устройства, например 0000:00:1f.6.

VLAN

{
  "name": "vlan-net",
  "cniVersion": "0.3.1",
  "type": "vlan",
  "master": "eth0",
  "mtu": 1500,
  "vlanId": 5,
  "linkInContainer": false,
  "ipam": {
    "type": "host-local",
    "subnet": "10.1.1.0/24"
  },
  "dns": {
    "nameservers": [
      "10.1.1.1",
      "8.8.8.8"
    ]
  }
}

Таблица параметров CNI VLAN

Поле Тип Описание
cniVersion string Версия спецификации CNI. Требуется значение 0.3.1.
name string Значение параметра name, которое вы указали ранее в конфигурации CNO.
type string Имя настраиваемого CNI-плагина: vlan.
master string Ethernet-интерфейс, который будет связан с сетевым подключением. Если не указан, используется интерфейс сетевого маршрута по умолчанию.
vlanId integer Идентификатор (ID) виртуальной локальной сети (VLAN).
ipam object Объект конфигурации для IPAM CNI-плагина. Плагин управляет назначением IP-адресов для определения подключения.
mtu integer Необязательно: установите максимальную единицу передачи (MTU). По умолчанию значение устанавливается ядром автоматически.
dns integer Необязательно: информация DNS, например, приоритетный список серверов имен DNS.
linkInContainer boolean Необязательно: указывает, находится ли основной интерфейс (master) в сетевом пространстве имен контейнера или в основном сетевом пространстве имен.

IPVLAN

Внимание

Один и тот же основной интерфейс нельзя одновременно настраивать для использования и macvlan, и ipvlan.

{
  "cniVersion": "0.3.1",
  "name": "ipvlan-net",
  "type": "ipvlan",
  "master": "eth1",
  "mode": "l3",
  "ipam": {
    "type": "static",
    "addresses": [
      {
        "address": "192.168.10.10/24"
      }
    ]
  }
}

Таблица параметров CNI ipvlan

Поле Тип Описание
cniVersion string Версия спецификации CNI. Требуется значение 0.3.1.
name string Значение параметра name, которое вы указали ранее в конфигурации CNO.
type string Имя настраиваемого CNI-плагина: ipvlan.
ipam object Объект конфигурации для IPAM CNI-плагина. Плагин управляет назначением IP-адресов. Обязательно, если плагин не используется в цепочке.
mode string Необязательно: режим работы виртуальной сети. Допустимые значения: l2, l3 или l3s. По умолчанию — l2.
master string Необязательно: Ethernet-интерфейс, связанный с сетевым подключением. Если не указан, используется интерфейс сетевого маршрута по умолчанию.
mtu integer Необязательно: установите максимальную единицу передачи (MTU). По умолчанию значение устанавливается ядром автоматически.

MACVLAN

{
  "cniVersion": "0.3.1",
  "name": "macvlan-net",
  "type": "macvlan",
  "master": "eth1",
  "mode": "bridge",
  "ipam": {
    "type": "dhcp"
  }
}

Таблица параметров CNI macvlan

Поле Тип Описание
cniVersion string Версия спецификации CNI. Требуется значение 0.3.1.
name string Значение параметра name, которое вы указали ранее в конфигурации CNO.
type string Имя настраиваемого CNI-плагина: macvlan.
ipam object Объект конфигурации для IPAM CNI-плагина. Плагин управляет назначением IP-адресов для определения подключения.
mode string Необязательно: настраивает видимость трафика в виртуальной сети. Должен быть bridge, passthru, private или vepa. Если значение не указано, по умолчанию используется bridge.
master string Необязательно: сетевой интерфейс хоста для связи с вновь созданным интерфейсом macvlan. Если значение не указано, используется интерфейс маршрута по умолчанию.
mtu integer Необязательно: максимальная единица передачи (MTU). По умолчанию значение устанавливается ядром автоматически.