Поделиться через


AKS Edge Essentials с несколькими конфигурациями сетевого адаптера

По умолчанию узел AKS Edge Essentials Linux имеет одну сетевую карту (сетевой адаптер). Однако узел Linux можно настроить с несколькими сетевыми интерфейсами во время развертывания узла. Эта функция может оказаться полезной в многочисленных сценариях, в которых может быть разделение сети или разделение между различными сетями или зонами. Чтобы подключить узел AKS Edge Essentials Linux к разным сетям, необходимо подключить разные сетевые карты к узлу Linux.

В этой статье описывается настройка узла AKS Edge Essentials Linux для поддержки нескольких сетевых адаптеров и подключения к нескольким сетям. Ниже приведены сведения об этом процессе.

  1. Создайте развертывание AKS Edge Essentials с помощью дополнительного сетевого адаптера.
  2. Проверьте несколько параметров конфигурации сети сетевого адаптера.
  3. Настройте подключаемый модуль Multus CNI.
  4. Настройте вторичную сеть Multus с примером pod.
  5. Проверьте подключенные сети pod.

Дополнительные сведения о сетевых концепциях и конфигурациях Multus см. в руководстве по сети AKS Edge Essentials и Multus . Краткое руководство.

Примечание.

Поддержка AKS Edge Essentials для нескольких сетевых адаптеров ограничена узлами Linux. Если вам нужна поддержка узлов Windows, вы можете отправить запрос на проблему или функцию в репозитории AKS Edge Essentials GitHub.

Создание развертывания AKS Edge Essentials с помощью дополнительного сетевого адаптера

Чтобы развернуть узел Linux с несколькими сетевыми адаптерами, необходимо добавить дополнительные карточки интерфейса в JSON-файл развертывания. Измените JSON-файл развертывания и в рамках LinuxNode.SecondaryNetworks раздела убедитесь, что вы указываете вторичную сеть, которую нужно добавить на узел Linux. Можно указать массив с необязательными статическими VMSwitchName IP-данными (Ip4AddressIp4GatewayAddressи Ip4PrefixLength):

  1. Выполните действия, описанные в разделе "Настройка компьютера".

  2. Создайте виртуальный коммутатор Hyper-V. Дополнительные сведения см. в статье "Создание и настройка виртуального коммутатора с помощью Hyper-V".

  3. Измените JSON-файл развертывания. Добавьте в раздел следующие параметры LinuxNode.SecondaryNetworks :

    Параметр Допустимые значения Комментарии
    VMSwitchName Имя виртуального коммутатора. Имя виртуального коммутатора, назначенного узлу Linux.
    Ip4Address IPv4-адрес в диапазоне области сервера DCHP. Статический IPv4-адрес узла Linux.
    Ip4GatewayAddress IPv4-адрес шлюза подсети. IPv4-адрес шлюза, допустимый только при указании статического IPv4-адреса.
    Ip4PrefixLength Длина префикса IPv4 подсети. Длина префикса IPv4-адресов для подсети, допустимая только при указании статического IPv4-адреса.
    {
    ...,
    "LinuxNode": {
        ...,
        "SecondaryNetworks": [
          {
            "VMSwitchName": <virtual-switch-name>,
            "Ip4Address": <linux-node-secondary-ip-address>,
            "Ip4GatewayAddress": <gateway-ip-address>,
            "Ip4PrefixLength": <ip-prefix-length>
          }
        ]
      }
    }
    
  4. Разверните узел AKS Edge Essentials, выполнив действия, описанные в статье "Создание одного развертывания компьютера" или "Создание полного развертывания".

Проверка нескольких параметров конфигурации сети сетевого адаптера

После успешной установки и развертывания узла AKS Edge Essentials выполните следующие действия, чтобы убедиться, что первичные и вторичные интерфейсы были созданы и добавлены на узел Linux:

  1. Проверьте основной интерфейс:

    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip addr eth0"
    
  2. Проверьте дополнительный сетевой интерфейс. Если вы добавили несколько дополнительных интерфейсов, он отображается как ethX с X числом дополнительных сетевых интерфейсов:

    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip addr eth1"
    

Настройка подключаемого модуля Multus CNI

После успешной установки и развертывания узла AKS Edge Essentials выполните следующие действия, чтобы включить Multus:

  1. Убедитесь, что сеть по умолчанию готова, перечислив узлы Kubernetes:

    kubectl get nodes
    
  2. Клонируйте репозиторий Multus Cni:

    git clone https://github.com/k8snetworkplumbingwg/multus-cni.git
    
  3. Перейдите в каталог проекта multus-cni .

  4. Перейдите в папку развертывания , чтобы просмотреть скрипты набора управляющей программы, используемые для настройки Multus.

  5. Если вы используете версию K3s , внесите следующие изменения в скрипт multus-daemonset.yml , чтобы сделать его совместимым с K3s:

    1. Получите хэш-маркер хранилища AKS Edge Essentials. Хэш можно найти, перейдя в папку /var/lib/rancher/k3s/data/.

      Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ls -AU /var/lib/rancher/k3s/data/ | head -1"
      
    2. Замените следующие строки конфигурации тома:

      volumes:
      - name: cni
          hostPath:
          path: /etc/cni/net.d
      - name: cnibin
          hostPath:
          path: /opt/cni/bin
      

      Используйте хэш-маркер хранилища на предыдущем шаге и замените конфигурацию следующими строками:

      volumes:
      - name: cni
          hostPath:
          path: /var/lib/rancher/k3s/agent/etc/cni/net.d
      - name: cnibin
          hostPath:
          path: /var/lib/rancher/k3s/data/<replace-with-your-hash>/bin
      
    3. Замените следующие строки конфигурации контейнера:

      containers:
      - name: kube-multus
          image: ghcr.io/k8snetworkplumbingwg/multus-cni:snapshot
          command: ["/thin_entrypoint"]
          args:
          - "--multus-conf-file=auto"
          - "--multus-autoconfig-dir=/host/etc/cni/net.d"
          - "--cni-conf-dir=/host/etc/cni/net.d"
      

      Замените их соответствующей конфигурацией контейнера K3s :

      containers:
      - name: kube-multus
          image: nfvpe/multus:v3.4.1
          command: ["/entrypoint.sh"]
          args:
          - "--multus-conf-file=auto"
          - "--cni-version=0.3.1"
          # Add the following arg
          - "--multus-kubeconfig-file-host=/var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d/multus.kubeconfig"
      
  6. Примените обновленный файл управляющей программы Multus, выполнив следующую команду:

    kubectl apply -f multus-daemonset.yml
    

Если все установлено правильно, Kubernetes запускает набор управляющей программы Multus, который запускает pod на каждом узле, и приводит к тому, что двоичный файл Multus помещается на каждый узел в /var/lib/rancher/k3s/data/[replace-with-your-hash]/bin.

Управляющая программа считывает первый алфавитный файл конфигурации в файле /var/lib/rancher/k3s/agent/etc/cni/net.d и создает новый файл конфигурации для Multus на каждом узле как /var/lib/rancher/k3s/agent/etc/cni/net.d/00-multus.conf. Этот файл создается автоматически и основан на конфигурации сети по умолчанию. Он также создает каталог /var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d на каждом узле с информацией о проверке подлинности для Multus для доступа к API Kubernetes.

Проверка установки Multus

Установка может проверить следующие сведения:

  1. Все файлы, перечисленные ранее, были созданы путем просмотра указанных путей к каталогу:

    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ls -l /var/lib/rancher/k3s/data/<replace-with-your-hash>/bin | grep multus"
    
  2. Убедитесь, что модули pod Multus выполнялись без ошибок, выполнив следующую команду:

    kubectl get pods --all-namespaces | Select-String 'Multus'
    
  3. Проверьте файл 00-multus.conf, чтобы убедиться, что указана правильная версия CNI. Обновите значение версии CNI до 0.3.1 , если это еще не значение по умолчанию:

    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo cat /var/lib/rancher/k3s/agent/etc/cni/net.d/00-multus.conf"
    

Настройка вторичной сети Multus с примером pod

После установки и запуска подключаемого модуля Multus создайте определение сетевого вложения Kubernetes.

  1. Создайте файл yaml-secondarynet-conf.yaml для вторичной сети. Часть установки краткого руководства Multus создает CRD (пользовательское определение ресурса), которое можно использовать для определения конфигурации для всех дополнительных интерфейсов. В следующем примере YAML-файла добавляется вторичная сеть:

    # This net-attach-def defines secondarynet-conf
    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: secondarynet-conf
    spec:
      config: '{
          "cniVersion": "0.3.1",
          "plugins": [
              {
              "type": "bridge",
              "bridge": "mynet1",
              "ipam": {
                "subnet": "10.0.0.0/24",
                "rangeStart": "10.0.0.60",
                "rangeEnd": "10.0.0.120"},
                "gateway": "10.0.0.1"
              }
          ]
          }'
    

    Примечание.

    Официальная документация по Multus указывает дополнительный macvlan интерфейс типа. Однако подключаемый macvlan модуль по умолчанию недоступен. Чтобы использовать этот подключаемый модуль, установите его перед указанием вторичной конфигурации сети. Дополнительные сведения о различных сетевых подключаемых модулях и их примерах конфигураций см. в разделе "Использование CNI Multus в OpenShift".

  2. Создайте дополнительный интерфейс с помощью secondarynet-conf.yaml , созданного на предыдущем шаге:

    kubectl apply -f secondarynet-conf.yaml
    
  3. Создайте файл samplepod.yaml для развертывания примера pod, который подключается к ранее созданному вторичному интерфейсу. Следующий код YAML является примером для создания нового модуля pod, использующего дополнительный интерфейс:

    apiVersion: v1
    kind: Pod
    metadata:
      name: samplepod
      annotations:
          k8s.v1.cni.cncf.io/networks: secondarynet-conf
    spec:
      containers:
      - name: samplepod
        command: ["/bin/ash", "-c", "trap : TERM INT; sleep infinity & wait"]
        image: alpine
    
  4. Создайте пример pod с помощью созданного samplepod.yaml на предыдущем шаге:

    kubectl apply -f samplepod.yaml
    

Проверка подключенных сетей pod

Последний шаг — убедиться, что модуль pod запущен и имеет правильные сетевые интерфейсы.

  1. Убедитесь, что модуль pod запущен:

    kubectl get pods
    
  2. Проверьте модуль pod и просмотрите, какие интерфейсы подключены:

    kubectl exec -it samplepod -- ip a
    

    Существует три интерфейса:

    • lo: интерфейс обратного цикла
    • eth0: сеть по умолчанию
    • net1: новый интерфейс, созданный с помощью secondarynet-conf

    Pod с несколькими подключенными сетевыми адаптерами.

Следующие шаги