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


Использование собственного подключаемого модуля CNI для службы Azure Kubernetes (AKS)

Kubernetes по умолчанию не предоставляет систему сетевого интерфейса. Вместо этого сетевые плагины предоставляют эту функцию. Служба Azure Kubernetes (AKS) предоставляет несколько поддерживаемых плагинов сетевого интерфейса контейнеров (CNI). Для получения информации о поддерживаемых плагинах см. раздел Концепции сетевого взаимодействия для приложений в службе Azure Kubernetes.

Поддерживаемые подключаемые модули удовлетворяют большинству сетевых требований в среде Kubernetes. Однако опытные пользователи AKS могут хотеть использовать тот же подключаемый модуль CNI, который они использовали в Kubernetes-средах на локальных серверах. Или эти пользователи могут использовать расширенные функции, доступные в других подключаемых модулях CNI.

В этой статье показано, как развернуть кластер AKS без предварительно установленного подключаемого модуля CNI. После этого можно установить любой CNI плагин, совместимый с Azure.

Поддержка

Служба поддержки Microsoft не может помочь с проблемами, связанными с CNI, в кластерах, развернутых с использованием собственного подключаемого модуля CNI. Например, проблемы, связанные с CNI, охватывают большую часть трафика "восток-запад" (модуль-модуль), а также команды вида kubectl proxy и подобные. Если требуется поддержка CNI, используйте поддерживаемый сетевой подключаемый модуль AKS или обратитесь за поддержкой поставщика подключаемого модуля CNI.

Корпорация Майкрософт по-прежнему предоставляет поддержку проблем, которые не связаны с CNI.

Рекомендации по планированию IP-адресов

При использовании плагина собственного CNI (BYO CNI) с AKS обязанности по планированию IP-адресов разделяются между AKS и CNI, управляемым клиентом. В отличие от подключаемых модулей CNI под управлением AKS, AKS не выделяет IP-адреса pod или управляет ими при использовании CNI BYO.

Замечание

В статье о планировании IP-адресов для кластеров Службы Azure Kubernetes (AKS) основное внимание уделяется подключаемым модулям сети, управляемым AKS. В сценариях CNI BYO применяется только руководство, связанное с изменением размера подсети узла, обновлением и масштабированием, а также диапазонами адресов службы Kubernetes. Распределение IP-адресов pod, маршрутизация и масштабирование определяются выбранным подключаемым модулем CNI.

Размер виртуальной сети и подсети

AKS по-прежнему требует виртуальной сети и подсети для узлов кластера. Учет размера подсети должен включать следующие факторы:

  • Максимальное количество узлов в пуле узлов
  • Дополнительные узлы, необходимые для операций обновления и масштабирования, таких как обновления с расширением ресурсов.
  • Ресурсы Azure, которые выделяют IP-адреса из подсетей в виртуальной сети, например внутренние подсистемы балансировки нагрузки

Обновления AKS и операции масштабирования осуществляются на уровне узлов. Во время этих операций AKS может временно подготовить дополнительные узлы, поэтому подсеть должна быть достаточно большой, чтобы обеспечить максимальное количество узлов.

IP-адреса pod не выделяются из подсети AKS при использовании BYO CNI, если только они явно не реализованы подключаемым модулем CNI.

Диапазон адресов службы Kubernetes

Для всех кластеров AKS, включая использование BYO CNI, требуется диапазон адресов службы Kubernetes (serviceCIDR) и IP-адрес службы DNS (dnsServiceIP). Применяются следующие ограничения:

  • Диапазон адресов службы не должен перекрываться с виртуальной сетью или любой подключенной сетью.
  • CIDR службы должен иметь значение меньше /12.
  • IP-адрес службы DNS должен находиться в диапазоне CIDR службы и не должен быть первым IP-адресом в диапазоне.

Эти требования не зависят от подключаемого модуля CNI.

Управление сетями Pod и IP-адресами

При использовании BYO CNI управление IP-адресами pod (IPAM), маршрутизация и масштабирование определяются подключаемым модулем CNI.

AKS не поддерживает:

  • Выделение IP-адресов pod
  • Предназначение диапазонов CIDR pod для каждого узла
  • Принудительное повторное использование IP-адреса pod или его освобождение

Руководство, связанное с наложенными или плоскими сетевыми моделями, размерами CIDR pod на узел или подсетевыми формулами, включающими количество модулей pod, не применяется к случаям BYO CNI.

Максимальное число подов на узле

AKS применяет настраиваемое максимальное количество подов на узел (maxPods) на уровне kubelet. При использовании BYO CNI этот параметр ограничивает плотность размещения pod, но не определяет емкость IP. Вы несете ответственность за то, чтобы выбранный плагин CNI мог поддерживать настроенную плотность подов и масштаб кластера.

Предварительные условия

  • Для Azure Resource Manager или Bicep используйте по крайней мере шаблон версии 2022-01-02-preview или 2022-06-01.
  • Для Azure CLI используйте по крайней мере версию 2.39.0.
  • Виртуальная сеть для кластера AKS должна разрешать исходящее подключение к Интернету.
  • Кластеры AKS не могут использовать 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16 или 192.0.2.0/24 в качестве диапазона адресов для службы Kubernetes, pods или виртуальной сети кластера.
  • Идентификатор кластера, который использует кластер AKS, должен иметь как минимум разрешения участника сети в подсети в вашей виртуальной сети. Если вы хотите определить пользовательскую роль вместо использования встроенной роли участника сети, необходимы следующие разрешения:
    • Microsoft.Network/virtualNetworks/subnets/join/action
    • Microsoft.Network/virtualNetworks/subnets/read
  • Подсеть, назначенная пулу узлов AKS, не может быть делегированной подсетью.
  • AKS не применяет группы безопасности сети (NSG) к своей подсети или не изменяет группы безопасности сети, связанные с этой подсетью. Если вы предоставляете собственную подсеть и добавляете группы безопасности (NSG), связанные с ней, необходимо убедиться, что правила безопасности в NSG позволяют трафику в диапазоне маршрутизации без классов (CIDR) узла. Дополнительные сведения см. в разделе Группы безопасности сети.
  • AKS не создает таблицу маршрутов в управляемой виртуальной сети.
  • Необходимо указать Pod CIDR (диапазон IP-адресов для подов). Плоскость управления AKS использует этот диапазон для маршрутизации внутреннего трафика к подам, даже если назначение IP-адресов будет управляться вашим пользовательским CNI. Если CIDR для pod не предоставлен, может возникнуть сбой или неправильная маршрутизация вобщении между управляющей плоскостью и pod. Необходимо выбрать CIDR pod, который не конфликтует с какой-либо другой сетью в вашей среде и избегает зарезервированных диапазонов Azure, таких как, 169.254.0.0/16, 172.30.0.0/16172.31.0.0/16или192.0.2.0/24. Например, можно использовать диапазон, например 10.XX.0.0/16 уникальный для кластера. Это гарантирует, что плоскость управления может направляться непосредственно в IP-адреса pod на узлах, и при интеграции с другими сетями или кластерами ip-адреса не пересекаются.

Создание кластера AKS без предварительно установленного подключаемого модуля CNI

  1. Создайте группу ресурсов Azure для кластера AKS с помощью az group create команды.

    az group create --location eastus --name myResourceGroup
    
  2. Создайте кластер AKS с помощью az aks create команды. Передайте параметр --network-plugin со значением параметра none.

    az aks create \
        --location eastus \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --network-plugin none \
        --pod-cidr "10.10.0.0/16" \
        --generate-ssh-keys
    

Развертывание подключаемого модуля CNI

После завершения подготовки AKS кластер находится в сети. Но все узлы находятся в NotReady состоянии, как показано в следующем примере:

  $ kubectl get nodes
  NAME                                STATUS     ROLES   AGE    VERSION
  aks-nodepool1-23902496-vmss000000   NotReady   agent   6m9s   v1.21.9

  $ kubectl get node -o custom-columns='NAME:.metadata.name,STATUS:.status.conditions[?(@.type=="Ready")].message'
  NAME                                STATUS
  aks-nodepool1-23902496-vmss000000   container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized

На этом этапе кластер готов к установке плагина CNI.