Настройка сети Kube-OVN для поддержки нескольких сетевых интерфейсов Pod (Alpha)

Используя Multus CNI, вы можете добавить несколько сетевых интерфейсов с разными сетями к Pod. Используйте CRD Subnet и IP сети Kube-OVN для расширенного управления IP, реализуя управление подсетями, резервирование IP, случайное распределение, фиксированное распределение и другие функции.

Содержание

Установка Multus CNI

Развертывание плагина Multus CNI

  1. Перейдите в раздел Administrator.

  2. В левой навигационной панели нажмите Marketplace > Cluster Plugins.

  3. В строке поиска введите "multus", чтобы найти плагин Multus CNI.

  4. Найдите в списке плагин "Alauda Container Platform Networking for Multus".

  5. Нажмите на три точки (⋮) рядом с записью плагина и выберите Install.

  6. Плагин будет развернут в вашем кластере. Вы можете отслеживать статус установки в колонке State.

NOTE

Плагин Multus CNI служит промежуточным звеном между другими CNI плагинами и Kubernetes, позволяя Pod иметь несколько сетевых интерфейсов.

Создание подсетей

Создайте подсеть attachnet согласно следующему примеру: network-attachment-definition.yml.

NOTE

Формат провайдера в config — <NAME>.<NAMESPACE>.ovn, где <NAME> и <NAMESPACE> — имя и namespace данного CR NetworkAttachmentDefinition соответственно.

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: attachnet
  namespace: default
spec:
  config: '{
      "cniVersion": "0.3.0",
      "type": "kube-ovn",
      "server_socket": "/run/openvswitch/kube-ovn-daemon.sock",
      "provider": "attachnet.default.ovn"
    }'

После создания примените ресурс:

kubectl apply -f network-attachment-definition.yml

Используйте следующий пример для создания подсети Kube-OVN для второго сетевого интерфейса: subnet.yml.

NOTE
  • spec.provider должен совпадать с провайдером в NetworkAttachmentDefinition.
  • Если необходимо использовать Underlay подсеть, установите spec.vlan подсети в имя CR VLAN, который вы хотите использовать. Настройте остальные параметры подсети по необходимости.
apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
  name: subnet1
spec:
  cidrBlock: 172.170.0.0/16
  provider: attachnet.default.ovn

После создания примените ресурс:

kubectl apply -f subnet.yml

Создание Pod с несколькими сетевыми интерфейсами

Создайте Pod согласно следующему примеру.

NOTE
  • В metadata.annotations должен содержаться ключ-значение k8s.v1.cni.cncf.io/networks=default/attachnet, где формат значения — <NAMESPACE>/<NAME>, а <NAMESPACE> и <NAME> — namespace и имя CR NetworkAttachmentDefinition соответственно.
  • Если Pod требует три сетевых интерфейса, настройте значение k8s.v1.cni.cncf.io/networks как default/attachnet,default/attachnet2.
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  annotations:
    k8s.v1.cni.cncf.io/networks: default/attachnet
spec:
  containers:
  - name: web
    image: nginx:latest
    ports:
    - containerPort: 80

После успешного создания Pod используйте команду kubectl exec pod1 -- ip a, чтобы просмотреть IP-адреса Pod.

Проверка создания двух сетевых интерфейсов

Используйте следующую команду, чтобы проверить успешное создание двух сетевых интерфейсов:

kubectl exec pod1 -- ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
151: eth0@if152: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1400 qdisc noqueue state UP
    link/ether a6:3c:d8:ae:83:06 brd ff:ff:ff:ff:ff:ff
    inet 10.3.0.8/16 brd 10.3.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a43c:d8ff:feae:8306/64 scope link
       valid_lft forever preferred_lft forever
153: net1@if154: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1400 qdisc noqueue state UP
    link/ether 0a:36:08:01:dc:df brd ff:ff:ff:ff:ff:ff
    inet 172.170.0.3/16 brd 172.170.255.255 scope global net1
       valid_lft forever preferred_lft forever
    inet6 fe80::836:8ff:fe01:dcdf/64 scope link
       valid_lft forever preferred_lft forever

Дополнительные возможности

Фиксированный IP

  • Основной сетевой интерфейс (первый интерфейс): Если необходимо зафиксировать IP основного сетевого интерфейса, метод такой же, как и при использовании фиксированного IP с одним сетевым интерфейсом. Добавьте аннотацию ovn.kubernetes.io/ip_address=<IP> к Pod.

  • Вторичный сетевой интерфейс (второй или другие интерфейсы): Основной метод аналогичен основному сетевому интерфейсу, с тем отличием, что ovn в ключе аннотации заменяется на провайдера соответствующего NetworkAttachmentDefinition. Пример: attachnet.default.ovn.kubernetes.io/ip_address=172.170.0.101.

Дополнительные маршруты

Начиная с версии 1.8.0, Kube-OVN поддерживает настройку дополнительных маршрутов для вторичных сетевых интерфейсов. При использовании этой функции добавьте поле routes в config NetworkAttachmentDefinition и заполните маршруты, которые необходимо настроить. Пример:

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: attachnet
  namespace: default
spec:
  config: '{
      "cniVersion": "0.3.0",
      "type": "kube-ovn",
      "server_socket": "/run/openvswitch/kube-ovn-daemon.sock",
      "provider": "attachnet.default.ovn",
      "routes": [
        {
          "dst": "19.10.0.0/16"
        },
        {
          "dst": "19.20.0.0/16",
          "gw": "19.10.0.1"
        }
      ]
    }'