Экспериментальная версия. Функциональность может сильно измениться. Совместимость с будущими версиями не гарантируется.
Введение
Данное руководство порядок создания и изменения ресурсов для управления программно определяемой сетью.
Подготовка кластера к использованию модуля
Предварительная подготовка инфраструктуры:
- Для создания дополнительных сетей на основе тегированных 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",
}
]