AKS Edge Essentials с несколькими конфигурациями сетевого адаптера
По умолчанию узел AKS Edge Essentials Linux имеет одну сетевую карту (сетевой адаптер). Однако узел Linux можно настроить с несколькими сетевыми интерфейсами во время развертывания узла. Эта функция может оказаться полезной в многочисленных сценариях, в которых может быть разделение сети или разделение между различными сетями или зонами. Чтобы подключить узел AKS Edge Essentials Linux к разным сетям, необходимо подключить разные сетевые карты к узлу Linux.
В этой статье описывается настройка узла AKS Edge Essentials Linux для поддержки нескольких сетевых адаптеров и подключения к нескольким сетям. Ниже приведены сведения об этом процессе.
- Создайте развертывание AKS Edge Essentials с помощью дополнительного сетевого адаптера.
- Проверьте несколько параметров конфигурации сети сетевого адаптера.
- Настройте подключаемый модуль Multus CNI.
- Настройте вторичную сеть Multus с примером pod.
- Проверьте подключенные сети 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-данными (Ip4Address
Ip4GatewayAddress
и Ip4PrefixLength
):
Выполните действия, описанные в разделе "Настройка компьютера".
Создайте виртуальный коммутатор Hyper-V. Дополнительные сведения см. в статье "Создание и настройка виртуального коммутатора с помощью Hyper-V".
Измените 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> } ] } }
Разверните узел AKS Edge Essentials, выполнив действия, описанные в статье "Создание одного развертывания компьютера" или "Создание полного развертывания".
Проверка нескольких параметров конфигурации сети сетевого адаптера
После успешной установки и развертывания узла AKS Edge Essentials выполните следующие действия, чтобы убедиться, что первичные и вторичные интерфейсы были созданы и добавлены на узел Linux:
Проверьте основной интерфейс:
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip addr eth0"
Проверьте дополнительный сетевой интерфейс. Если вы добавили несколько дополнительных интерфейсов, он отображается как ethX с X числом дополнительных сетевых интерфейсов:
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip addr eth1"
Настройка подключаемого модуля Multus CNI
После успешной установки и развертывания узла AKS Edge Essentials выполните следующие действия, чтобы включить Multus:
Убедитесь, что сеть по умолчанию готова, перечислив узлы Kubernetes:
kubectl get nodes
Клонируйте репозиторий Multus Cni:
git clone https://github.com/k8snetworkplumbingwg/multus-cni.git
Перейдите в каталог проекта multus-cni .
Перейдите в папку развертывания , чтобы просмотреть скрипты набора управляющей программы, используемые для настройки Multus.
Если вы используете версию K3s , внесите следующие изменения в скрипт multus-daemonset.yml , чтобы сделать его совместимым с K3s:
Получите хэш-маркер хранилища AKS Edge Essentials. Хэш можно найти, перейдя в папку /var/lib/rancher/k3s/data/.
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ls -AU /var/lib/rancher/k3s/data/ | head -1"
Замените следующие строки конфигурации тома:
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
Замените следующие строки конфигурации контейнера:
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"
Примените обновленный файл управляющей программы 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
Установка может проверить следующие сведения:
Все файлы, перечисленные ранее, были созданы путем просмотра указанных путей к каталогу:
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ls -l /var/lib/rancher/k3s/data/<replace-with-your-hash>/bin | grep multus"
Убедитесь, что модули pod Multus выполнялись без ошибок, выполнив следующую команду:
kubectl get pods --all-namespaces | Select-String 'Multus'
Проверьте файл 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.
Создайте файл 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".Создайте дополнительный интерфейс с помощью secondarynet-conf.yaml , созданного на предыдущем шаге:
kubectl apply -f secondarynet-conf.yaml
Создайте файл 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
Создайте пример pod с помощью созданного
samplepod.yaml
на предыдущем шаге:kubectl apply -f samplepod.yaml
Проверка подключенных сетей pod
Последний шаг — убедиться, что модуль pod запущен и имеет правильные сетевые интерфейсы.
Убедитесь, что модуль pod запущен:
kubectl get pods
Проверьте модуль pod и просмотрите, какие интерфейсы подключены:
kubectl exec -it samplepod -- ip a
Существует три интерфейса:
- lo: интерфейс обратного цикла
- eth0: сеть по умолчанию
- net1: новый интерфейс, созданный с помощью secondarynet-conf