Настройка сети Azure CNI для динамического выделения IP-адресов и расширенной поддержки подсетей в Служба Azure Kubernetes (AKS)

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

Так вы получите следующие преимущества:

  • Улучшенное использование IP-адресов. IP-адреса выделяются динамически для модулей pod кластера из подсети pod. Это обеспечивает более эффективное использование IP-адресов в кластере по сравнению с традиционным решением CNI, которое выполняет статическое выделение IP-адресов для каждого узла.
  • Масштабируемость и гибкость. Подсети узлов и модулей pod можно масштабировать независимо друг от друга. Одну и ту же подсеть pod можно совместно использовать в нескольких пулах узлов кластера или в нескольких кластерах AKS, развернутых в одной виртуальной сети. Можно также настроить отдельную подсеть pod для пула узлов.
  • Высокая производительность. Так как модули pod назначены IP-адреса виртуальной сети, они имеют прямое подключение к другим модулям pod кластера и ресурсам в виртуальной сети. Такое решение обеспечивает поддержку очень больших кластеров без снижения производительности.
  • Отдельные политики виртуальной сети для модулей pod. Так как модули pod размещаются в отдельной подсети, для них можно настроить отдельные политики виртуальной сети, отличные от политик узлов. Это позволяет использовать множество полезных сценариев, таких как разрешение подключения к Интернету только для модулей pod, а не для узлов, исправление исходного IP-адреса для pod в пуле узлов с помощью шлюза NAT Azure и использование групп безопасности сети для фильтрации трафика между пулами узлов.
  • Политики сети Kubernetes. Политики сети Azure и Calico вполне совместимы с этим новым решением.

В этой статье показано, как использовать сеть Azure CNI для динамического распределения IP-адресов и расширенной поддержки подсети в AKS.

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

Примечание.

При использовании динамического выделения IP-адресов не поддерживается предоставление приложения в качестве службы Приватный канал с помощью службы Load Balancer Kubernetes.

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

  • Просмотрите параметры развертывания для настройки базовой сети Azure CNI в AKS, так как применяются те же параметры.

  • Подсистема AKS и кластеры DIY не поддерживаются.

  • Azure CLI версии 2.37.0 или более поздней.

  • Если у вас есть существующий кластер, необходимо включить Аналитика контейнера для мониторинга использования подсети IP-адресов. Вы можете включить контейнер Аналитика с помощью az aks enable-addons команды, как показано в следующем примере:

    az aks enable-addons --addons monitoring --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
    

Планирование IP-адресации

Планирование IP-адресов гораздо проще с помощью этой функции. Так как узлы и модули pod масштабируются независимо, их диапазоны адресов также можно планировать отдельно. Так как подсети pod можно настроить на степень детализации пула узлов, при добавлении пула узлов всегда можно добавить новую подсеть. Системные модули pod в кластере или пуле узлов также получают IP-адреса из подсети pod, поэтому это поведение также необходимо учитывать.

IP-адреса выделяются узлам пакетами по 16 адресов. Для подсети pod следует планировать выделение не менее 16-ти IP-адресов на каждый узел в кластере. Узлы будут запрашивать по 16 IP-адресов при запуске и еще по 16 каждый раз, когда в выделенном блоке останется менее 8-ми нераспределенных IP-адресов.

Планирование IP-адресов для служб Kubernetes и моста Docker остается без изменений.

Максимальное число модулей pod на узел в кластере с динамическим выделением IP-адресов и расширенной поддержкой подсетей

Значения pod для каждого узла при использовании Azure CNI с динамическим выделением IP-адресов немного отличаются от традиционного поведения CNI:

CNI По умолчанию. Настройка при развертывании
Традиционное решение Azure CNI 30 Да (до 250)
Azure CNI с динамическим выделением IP-адресов 250 Да (до 250)

Все остальные рекомендации, связанные с настройкой максимальных модулей pod на узел, остаются неизменными.

Параметры развертывания

Параметры развертывания для настройки базовых сетей Azure CNI в AKS являются допустимыми с двумя исключениями:

  • параметр subnet теперь указывает на подсеть, связанную с узлами кластера.
  • Дополнительный параметр pod subnet позволяет указать подсеть, IP-адреса которой будут динамически выделяться для модулей pod.

Настройка сети с динамическим выделением IP-адресов и расширенной поддержкой подсети — Azure CLI

Использование динамического выделения IP-адресов и расширенной поддержки подсетей в кластере аналогично методу по умолчанию, применяемому для настройки кластера Azure CNI. В следующем примере показано, как создать виртуальную сеть с подсетью для узлов и подсетью для модулей pod, а также создать кластер, использующий Azure CNI с динамическим выделением IP-адресов и расширенной поддержкой подсетей. Обязательно замените переменные, такие как $subscription собственные значения.

Создайте виртуальную сеть с двумя подсетями.

RESOURCE_GROUP_NAME="myResourceGroup"
VNET_NAME="myVirtualNetwork"
LOCATION="westcentralus"
SUBNET_NAME_1="nodesubnet"
SUBNET_NAME_2="podsubnet"

# Create the resource group
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

# Create our two subnet network 
az network vnet create --resource-group $RESOURCE_GROUP_NAME --location $LOCATION --name $VNET_NAME --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_1 --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_2 --address-prefixes 10.241.0.0/16 -o none 

Создайте кластер, ссылаясь на подсеть узла, используя --vnet-subnet-id и подсеть pod, используя --pod-subnet-id и включив надстройку мониторинга.

CLUSTER_NAME="myAKSCluster"
SUBSCRIPTION="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --location $LOCATION \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_1 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_2 \
    --enable-addons monitoring

Добавление пула узлов

При добавлении пула узлов укажите подсеть узла с помощью --vnet-subnet-id и подсеть pod с помощью --pod-subnet-id. В следующем примере создаются две подсети, которые можно будет указать при создании нового пула узлов.

SUBNET_NAME_3="node2subnet"
SUBNET_NAME_4="pod2subnet"
NODE_POOL_NAME="mynodepool"

az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_3 --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_4 --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --name $NODE_POOL_NAME \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_3 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_4 \
    --no-wait

Мониторинг использования IP-подсети

Azure CNI предоставляет возможность отслеживать использование IP-подсети. Чтобы включить мониторинг использования IP-подсети, выполните следующие действия.

Получение YAML-файла

  1. Скачайте или скачайте файл с именем container-azm-ms-agentconfig.yaml из GitHub.

  2. Найти azure_subnet_ip_usage в интеграции. Задайте для параметра enabled значение true.

  3. Сохраните файл.

Получение учетных данных AKS

Задайте переменные для подписки, группы ресурсов и кластера. Рассмотрим следующие примеры:

az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME

Применение конфигурации

  1. Откройте терминал в папке скачанный файл container-azm-ms-agentconfig.yaml .

  2. Сначала примените конфигурацию с помощью команды: kubectl apply -f container-azm-ms-agentconfig.yaml

  3. Это приведет к перезапуску модуля pod и через 5–10 минут метрики будут видны.

  4. Чтобы просмотреть метрики в кластере, перейдите к книгам на странице кластера в портал Azure и найдите книгу с именем "Использование IP-адресов подсети". Представление будет выглядеть примерно так:

    A diagram of the Azure portal's workbook blade is shown, and metrics for an AKS cluster's subnet IP usage are displayed.

Вопросы и ответы о динамическом выделении IP-адресов и расширенной поддержке подсетей (предварительная версия)

  • Можно ли назначить несколько подсетей pod для кластера или пула узлов?

    Для кластера или пула узлов можно назначить только одну подсеть. Однако несколько кластеров или пулов узлов могут совместно использовать одну подсеть.

  • Можно ли назначить подсети pod из другой виртуальной сети?

    Нет, подсеть pod должна относиться к той же виртуальной сети, что и кластер.

  • Могут ли некоторые пулы узлов в кластере использовать традиционное решение CNI, тогда как другие используют новое решение CNI?

    Весь кластер должен использовать только один тип CNI.

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

Узнайте больше о сетевом взаимодействии в AKS из следующих статей: