Экспериментальная версия. Функциональность может сильно измениться. Совместимость с будущими версиями не гарантируется.

Введение

Данное руководство порядок создания и изменения ресурсов для управления программно определяемой сетью.

Подготовка кластера к использованию модуля

Предварительная подготовка инфраструктуры:

  • Для создания дополнительных сетей на основе тегированных VLAN:
    • Выделить диапазоны VLAN ID на коммутаторах в ЦОД и настроить их на соответствующих сетевых интерфейсах коммутаторов.
    • Выделить физические интерфейсы на узлах для последующей настройки тегированных VLAN-интерфейсов. Допускается использование интерфейсов, уже задействованных под служебную локальную межузловую сеть DKP.
  • Для создания дополнительных сетей на основе прямого, нетегированного доступа в сетевой интерфейс:
    • Выделить отдельные физические интерфейсы на узлах и скоммутировать их в единую локальную сеть на уровне ЦОД.

Далее, после включения модуля, в кластере автоматически появятся ресурсы NodeNetworkInterface, которые отражают текущее состояние на узлах:

$ kubectl get nodenetworkinterface
NAME                            MANAGEDBY   NODE           TYPE     IFNAME           IFINDEX   STATE      AGE
virtlab-ap-0-nic-1c61b4a68c2a   Deckhouse   virtlab-ap-0   NIC      eth1             3         Up         35d
virtlab-ap-0-nic-fc34970f5d1f   Deckhouse   virtlab-ap-0   NIC      eth0             2         Up         35d
virtlab-ap-1-nic-1c61b4a6a0e7   Deckhouse   virtlab-ap-1   NIC      eth1             3         Up         35d
virtlab-ap-1-nic-fc34970f5c8e   Deckhouse   virtlab-ap-1   NIC      eth0             2         Up         35d
virtlab-ap-2-nic-1c61b4a6800c   Deckhouse   virtlab-ap-2   NIC      eth1             3         Up         35d
virtlab-ap-2-nic-fc34970e7ddb   Deckhouse   virtlab-ap-2   NIC      eth0             2         Up         35d

В данном примере, у каждого узла в кластере есть по два сетевых интерфейса — eth0 (DKP LAN) и eth1 (выделенный интерфейс для организации дополнительных сетей).

Для дальнейшей работы пометим выделенные интерфейсы под организацию дополнительных сетей подходящим лейблом:

$ kubectl label nodenetworkinterface virtlab-ap-0-nic-1c61b4a68c2a nic-group=extra
$ kubectl label nodenetworkinterface virtlab-ap-1-nic-1c61b4a6a0e7 nic-group=extra
$ kubectl label nodenetworkinterface virtlab-ap-2-nic-1c61b4a6800c nic-group=extra

Настройка и подключение дополнительных сетей для рабочих нагрузок

Административные ресурсы

ClusterNetwork

Для создания общей сети, доступной к использованию в каждом проекте, используется интерфейс ClusterNetwork.

Пример для сети, основанной на тегированном трафике:

apiVersion: network.deckhouse.io/v1alpha1
kind: ClusterNetwork
metadata:
  name: my-cluster-network
spec:
  type: Vlan
  vlan:
    id: 900
  parentNodeNetworkInterfaces:
    labelSelector:
      matchLabels:
        nic-group: extra # лейбл, вручную установленный на ресурсы NodeNetworkInterface

Пример для сети, основанной на прямом доступе в интерфейс:

apiVersion: network.deckhouse.io/v1alpha1
kind: ClusterNetwork
metadata:
  name: my-cluster-network
spec:
  type: Access
  parentNodeNetworkInterfaces:
    labelSelector:
      matchLabels:
        nic-group: extra # лейбл, вручную установленный на ресурсы NodeNetworkInterface
NetworkClass

Для того, чтобы пользователи имели возможность создавать собственные выделенные сети, основанные на тегированном трафике, и не могли навредить инфраструктуре, используется интерфейс NetworkClass. Он позволяет:

  • Ограничить набор физических сетевых устройств на узлах.
  • Ограничить доступные пользователям диапазоны VLAN ID.

Пример:

apiVersion: network.deckhouse.io/v1alpha1
kind: NetworkClass
metadata:
  name: my-network-class
spec:
  vlan:
    idPool:
    - 600-800
    - 1200
    parentNodeNetworkInterfaces:
      labelSelector:
        matchLabels:
          nic-group: extra

Пользовательские ресурсы

Network

Для создания индивидуальной сети для проекта, используется ресурс Network.

apiVersion: network.deckhouse.io/v1alpha1
kind: Network
metadata:
  name: my-network
  namespace: my-namespace
spec:
  networkClass: my-network-class #mandatory
  type: Vlan
  vlan:
    id: 601 # опционально, но строго из пула

При создании дополнительных сетей с помощью ресурса Network, невозможно создать сеть с типом Access.

Если не указывать spec.vlan.id, он будет выделен из пула автоматически и закреплён за этой сетью.

Подключение дополнительных сетей к подам

Настройка дополнительных сетей осуществляется с помощью аннотации пода:

network.deckhouse.io/networks-spec: |
  [
    {
      "type": "Network",
      "name": "my-network",
      "ifName": "veth_mynet",    # имя tap-интерфейса внутри пода (опционально)
      "mac": "aa:bb:cc:dd:ee:ff" # mac-адрес, который следует назначить tap-интерфейсу (опционально)
    },
    {
      "type": "ClusterNetwork",
      "name": "my-cluster-network",
      "ifName": "veth_public",
    }
  ]