Настройка сети 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.
Необходимые компоненты
Ознакомьтесь с предварительными условиями для настройки базовой сети 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 остается без изменений.
Чтобы просмотреть и проверить ресурсы NodeNetworkConfiguration (NNC), ответственные за эти выделения IP-адресов, можно выполнить следующую команду:
kubectl get nodenetworkconfigs -n kube-system -o wide
Максимальное число модулей 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 \
--generate-ssh-keys
Добавление пула узлов
При добавлении пула узлов укажите подсеть узла с помощью --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-файла
Скачайте или скачайте файл с именем container-azm-ms-agentconfig.yaml из GitHub.
Найти
azure_subnet_ip_usage
в интеграции. Задайте для параметраenabled
значениеtrue
.Сохраните файл.
Получение учетных данных AKS
Задайте переменные для подписки, группы ресурсов и кластера. Рассмотрим следующие примеры:
az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
Применение конфигурации
- Откройте терминал в папке, в которой сохранен скачанный файл container-azm-ms-agentconfig.yaml .
- Примените конфигурацию
kubectl apply -f container-azm-ms-agentconfig.yaml
с помощью команды. Это приведет к перезапуску модуля pod и через 5–10 минут метрики будут видны. - Просмотрите метрики в кластере, перейдя к книгам на странице кластера в портал Azure, и найдите книгу с именем "Использование IP-адресов подсети".
Вопросы и ответы о динамическом выделении IP-адресов и расширенной поддержке подсетей (предварительная версия)
Можно ли назначить несколько подсетей pod для кластера или пула узлов?
Для кластера или пула узлов можно назначить только одну подсеть. Однако несколько кластеров или пулов узлов могут совместно использовать одну подсеть.
Можно ли назначить подсети pod из другой виртуальной сети?
Нет, подсеть pod должна относиться к той же виртуальной сети, что и кластер.
Могут ли некоторые пулы узлов в кластере использовать традиционное решение CNI, тогда как другие используют новое решение CNI?
Весь кластер должен использовать только один тип CNI.
Следующие шаги
Узнайте больше о сетевом взаимодействии в AKS из следующих статей:
Azure Kubernetes Service