Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Important
Начиная с 30 сентября 2026 г. служба Azure Kubernetes (AKS) больше не поддерживает диспетчер сетевых политик Azure (NPM) на узлах Windows . Это изменение применяется только к клиентам, уже подключенным к NPM. Подписки, которые не зарегистрированы в этой функции, больше не смогут подключиться. Существующие подключенные клиенты могут продолжать использовать NPM до даты окончания поддержки. Чтобы убедиться, что программа установки продолжает получать поддержку, обновления безопасности и совместимость развертывания, изучите альтернативные варианты, такие как группы безопасности сети (NSG) на уровне узла или средства с открытым исходным кодом, такие как Project Calico. Для получения дополнительной информации об этом выводе из эксплуатации смотрите объявление о выводе обновлений Azure из эксплуатации. Чтобы быть в курсе объявлений и обновлений, ознакомьтесь с заметками о выпуске AKS.
Important
Начиная с 30 сентября 2028 г. служба Azure Kubernetes (AKS) больше не поддерживает диспетчер сетевых политик Azure (NPM) на узлах Linux . Чтобы избежать сбоев в работе служб, необходимо перенести кластеры AKS под управлением узлов Linux из NPM в политику сети Cilium по дате окончания поддержки. Для получения дополнительной информации об этом выводе из эксплуатации смотрите объявление о выводе обновлений Azure из эксплуатации. Чтобы быть в курсе объявлений и обновлений, ознакомьтесь с заметками о выпуске AKS.
Important
Начиная с 31 марта 2028 г. служба Azure Kubernetes (AKS) больше не поддерживает сети kubenet. Чтобы избежать сбоев в работе служб, обновите сеть Azure Container Networking Interface (CNI) Overlay до даты окончания поддержки. Дополнительные сведения об этом устаревании см. в вопросе устаревания на GitHub и объявлении об устаревании обновлений Azure. Чтобы быть в курсе объявлений и обновлений, ознакомьтесь с заметками о выпуске AKS.
Установите движок политики сети и создайте политики сети Kubernetes для управления потоком трафика между pod в кластерах AKS.
Общие сведения о политике сети
По умолчанию все контейнеры pod в кластере AKS могут отправлять и получать трафик без ограничений. Для повышения безопасности вы можете определить правила, управляющие потоком трафика.
Сетевая политика — это спецификация Kubernetes, которая определяет политики доступа для обмена данными между модулями pod. При использовании политик сети вы определяете упорядоченный набор правил для отправки и получения трафика. Вы применяете правила к коллекции модулей, которые соответствуют одному или нескольким селекторам меток.
Правила сетевой политики определяются как манифесты YAML, и их можно включить в более широкие манифесты, которые также создают развертывание или сервис.
Параметры политики сети в AKS
Azure предоставляет три подсистемы сетевой политики для применения политик сети:
- Cilium (для кластеров AKS с помощью Azure CNI Powered by Cilium)
- Диспетчер сетевых политик Azure (NPM)
- Calico (решение с открытым исходным кодом для сетей и сетевой безопасности, разработанное Tigera)
Рекомендуется использовать Cilium. Cilium применяет политику сети к трафику с помощью фильтра пакетов Linux Berkeley (BPF), что более эффективно, чем IPTables.
Чтобы применять указанные политики, Azure NPM использует IPTables для Linux и ACL-политики службы Host Network Service (HNS) для Windows. Политики преобразовываются в наборы разрешенных и запрещенных пар IP-адресов. Затем эти пары запрограммированы как IPTable или HNS ACLPolicy правила фильтров.
Различия между подсистемами политики сети: Cilium, Azure NPM и Calico
| Подсистема политики сети | Поддерживаемые платформы | Поддерживаемые сетевые подключения | Соответствие спецификации Kubernetes | Другие функции | Support |
|---|---|---|---|---|---|
| Cilium | Линукс | Azure CNI | Поддерживает все типы политик | Полное доменное имя, L3/4, L7 | Группа поддержки и инженерии Azure |
| Azure NPM | Linux, Windows Server 2022 | Azure CNI | Поддерживает все типы политик | N/A | Группа поддержки и инженерии Azure |
| Calico | Linux, Windows Server 2019, Windows Server 2022 | Azure CNI (Linux, Windows Server 2019, Windows Server 2022) и kubenet (Linux) | Поддерживает все типы политик | Хотя в Calico есть множество функций, которые AKS не блокирует, AKS не тестирует или не поддерживает их. Дополнительные сведения см. в статье о проблеме с политикой сети Calico. | Группа поддержки и инженерии Azure |
Ограничения Диспетчера сетевых политик Azure (Linux)
Azure NPM для Linux имеет следующие ограничения:
- Масштабирование за пределы 250 узлов и 20 000 подов не поддерживается. Если вы пытаетесь увеличить масштаб за пределами этих ограничений, может возникнуть ошибка "Вне памяти" (OOM). Для повышения масштабируемости и поддержки IPv6 рекомендуется использовать или обновить azure CNI с помощью Cilium для подсистемы политики сети.
- IPv6 не поддерживается. В противном случае она полностью поддерживает спецификации политики сети в Linux.
Ограничения диспетчера сетевых политик Azure (Windows)
Azure NPM для Windows не поддерживает следующие функции спецификаций политики сети:
- Именованные порты.
- Протокол управления передачей потоков (SCTP).
- Исключающие метки или селекторы пространства имен. Например, все метки, кроме
debug=true. -
exceptБлоки бесклассовой междоменной маршрутизации (CIDR) с исключениями.
Известные проблемы с диспетчером сетевых политик Azure
При редактировании или удалении "достаточно большой" сетевой политики могут возникать временные проблемы с подключением новых подключений к модулям pod или из модулей pod на затронутых узлах. Попадание в это состояние гонки никогда не влияет на активные соединения.
Если это условие гонки возникает для узла, pod Azure NPM на этом узле переходит в состояние, в котором он не может обновлять правила безопасности, что может привести к неожиданным подключениям для новых соединений к pod или из pod на затронутом узле. Чтобы устранить проблему, модуль pod Azure NPM автоматически перезапускается примерно через 15 секунд после ввода этого состояния. Хотя NPM Azure перезагружается на затронутом узле, он удаляет все правила безопасности, а затем повторно применяет правила безопасности для всех политик сети. Хотя все правила безопасности применяются повторно, существует вероятность временного, неожиданного подключения для новых подключений к модулям или от них на затронутом узле.
Чтобы ограничить вероятность попадания в это состояние гонки, можно уменьшить размер политики сети. Эта проблема, скорее всего, произойдет для политики сети с несколькими ipBlock разделами. Сетевая политика с четырьмя или менееipBlock разделами менее вероятно столкнется с этой проблемой.
Службы подсистемы балансировки нагрузки и политики сети
Маршрутизация служб Kubernetes для входящих и исходящих служб часто включает перезапись исходных и целевых IP-адресов на обрабатываемом трафике, включая трафик, поступающий в кластер из LoadBalancer службы. Это поведение перезаписи означает, что политики сети могут неправильно обрабатывать трафик, полученный от внешней службы или отправляемого в нее. Дополнительные сведения см. в документации по политикам сети Kubernetes.
Чтобы ограничить количество источников, которые могут отправлять трафик в службу подсистемы балансировки нагрузки, используйте spec.loadBalancerSourceRanges для настройки блокировки трафика, которая применяется перед перезаписями. Дополнительные сведения см. в документации по подсистеме балансировки нагрузки AKS Standard.
Прежде чем начать
Необходимо установить и настроить Azure CLI версии 2.0.61 или более поздней. Найдите версию с помощью az --version команды. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Вместо удостоверения, назначаемого системой, можно также использовать удостоверение, назначаемое пользователем. Дополнительные сведения см. в статье о том, как использовать управляемые удостоверения.
Создание кластера AKS с помощью Диспетчера сетевых политик Azure (Linux)
Задайте переменные среды для имени группы ресурсов, имени кластера и расположения. Замените значения по мере необходимости.
export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastusСоздайте кластер AKS с помощью
az aks createи укажитеazureдляnetwork-pluginиnetwork-policy.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 1 \ --network-plugin azure \ --network-policy azure \ --generate-ssh-keys
Создание кластера AKS с помощью Диспетчера сетевых политик Azure (Windows Server 2022 (предварительная версия))
Important
Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.
Установка расширения Azure CLI aks-preview
aks-previewУстановите расширение с помощьюaz extension addкоманды.az extension add --name aks-previewОбновите до последней версии расширения с помощью
az extension updateкоманды.az extension update --name aks-preview
Регистрация флага компонента WindowsNetworkPolicyPreview
Зарегистрируйте флаг функции
WindowsNetworkPolicyPreviewс помощью командыaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "WindowsNetworkPolicyPreview"Через несколько минут отобразится состояние Registered (Зарегистрировано).
Проверьте состояние регистрации с помощью
az feature showкоманды.az feature show --namespace "Microsoft.ContainerService" --name "WindowsNetworkPolicyPreview"Когда состояние показывает зарегистрировано, обновите регистрацию
Microsoft.ContainerServiceпоставщика ресурса с помощью командыaz provider register.az provider register --namespace Microsoft.ContainerService
Создание учетных данных администратора для контейнеров Windows Server
Создайте имя пользователя для использования в качестве учетных данных администратора для контейнеров Windows Server в кластере. Следующая команда запрашивает имя пользователя. Присвойте ему значение
WINDOWS_USERNAME.echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME
Создание кластера AKS
Задайте переменные среды для имени группы ресурсов, имени кластера и расположения. Замените значения по мере необходимости.
export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastusСоздайте кластер AKS с помощью
az aks createи укажитеazureдляnetwork-pluginиnetwork-policy.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 1 \ --windows-admin-username $WINDOWS_USERNAME \ --network-plugin azure \ --network-policy azure \ --generate-ssh-keys
Создание кластера AKS с помощью Calico
Создайте кластер AKS с помощью az aks create команды и укажите --network-plugin azure и --network-policy calico. Указание --network-policy calico включает Calico как в пулах узлов Linux, так и в пулах узлов Windows.
Если вы планируете добавить в кластер пулы узлов Windows, включите параметры windows-admin-username и windows-admin-password, которые соответствуют требованиям к паролям Windows Server. Сведения о создании учетных данных администратора для контейнеров Windows Server в кластере см. в статье "Создание учетных данных администратора для контейнеров Windows Server".
Important
В настоящее время использование политик сети Calico с узлами Windows доступно в новых кластерах с помощью Kubernetes версии 1.20 или более поздней версии с Calico 3.17.2 и требует использования сети Azure CNI. Узлы Windows в кластерах AKS с поддержкой Calico также имеют ip-адрес с плавающей запятой по умолчанию.
Для кластеров с пулами узлов Linux под управлением Kubernetes 1.20 с более ранними версиями Calico версия Calico автоматически обновляется до версии 3.17.2.
Установка диспетчера политик сети Azure или Calico в существующем кластере
Warning
При установке Azure NPM или Calico в существующем кластере следует учитывать следующие сведения:
- Процесс обновления одновременно инициирует переустановку образа системы на каждом пуле узлов. Обновление каждого пула узлов отдельно не поддерживается.
- В каждом пуле узлов узлы следуют одному и тому же процессу повторного создания образа, что и стандартные операции обновления версий Kubernetes. Это означает, что буферные узлы временно добавляются, чтобы свести к минимуму прерывание работы приложений во время повторного создания узла. Любые нарушения, которые могут возникнуть, похожи на то, что может возникнуть при обновлении образа узла или обновлении версии Kubernetes.
Следующие сведения относятся к обновлению kubenet с Calico до Azure CNI Overlay с Calico.
- В кластерах kubenet с поддержкой Calico в качестве обработчика политики сети и CNI используется Calico.
- В кластерах Azure CNI Calico используется только для применения сетевых политик, а не как CNI. Это может привести к короткой задержке между запуском модуля и разрешением Calico на исходящий трафик из модуля.
Обновите существующий кластер с помощью команды
az aks update, чтобы установить Azure NPM или Calico, указавazureилиcalicoдля параметра--network-policy. В следующем примере показано, как установить Azure NPM:az aks update --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --network-policy azure
Обновление существующего кластера с помощью Azure NPM или Calico до Cilium
Чтобы обновить существующий кластер до Azure CNI Powered by Cilium, см. статью Об обновлении существующего кластера до Azure CNI Powered by Cilium
Подключение к кластеру AKS
Настройте
kubectl, чтобы подключиться к вашему кластеру с помощью командыaz aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Проверка настройки политики сети
Чтобы начать проверку сетевой политики, создайте пример приложения и задайте правила трафика.
Создайте пространство имен
demo, чтобы запустить поды-образцы с помощью командыkubectl create namespace.kubectl create namespace demoСоздайте pod с именем
serverдля запуска сервера на TCP-порту 80 с помощью командыkubectl run.kubectl run server -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --labels="app=server" --port=80 --command -- /agnhost serve-hostname --tcp --http=false --port "80"Создайте модуль pod с именем
clientдля запуска Bash с помощьюkubectl runкоманды.kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --command -- bashNote
Если вы хотите запланировать клиент или сервер на определенном узле, добавьте следующий бит перед
--commandаргументом в команде созданияkubectl runpod:--overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux|windows"}}}'В отдельном окне получите IP-адрес pod
serverс помощью командыkubectl get pod.kubectl get pod --output=wide -n demoВыходные данные должны выглядеть примерно так:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES server 1/1 Running 0 30s 10.224.0.72 akswin22000001 <none> <none>
Проверка подключения с помощью политик сети
Подсказка
Чтобы проверить подключение без политик сети, выполните следующую команду в клиентской оболочке: /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp Замените <server-ip> IP-адресом модуля pod сервера. Если подключение выполнено успешно, выходные данные отсутствуют.
Создайте файл
demo-policy.yamlи вставьте в него следующий манифест YAML:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: demo-policy namespace: demo spec: podSelector: matchLabels: app: server ingress: - from: - podSelector: matchLabels: app: client ports: - port: 80 protocol: TCPПримените манифест политики сети с помощью
kubectl applyкоманды.kubectl apply –f demo-policy.yamlВ клиентской оболочке проверьте подключение к серверу с помощью следующей
/agnhostкоманды:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpПодключение по трафику блокируется, так как сервер помечен меткой
app=server, но клиент не помечен. Выходные данные должны выглядеть примерно так:TIMEOUTПромаркируйте
clientи проверьте соединение с сервером, используя командуkubectl label.kubectl label pod client -n demo app=clientЕсли подключение выполнено успешно, выходные данные отсутствуют.
Переход на самостоятельное управление Calico
AKS поддерживает только Calico для стандартных политик сети Kubernetes и не проверяет другие функции. Если вы хотите перейти на самостоятельно управляемый Calico, следуйте инструкциям Tigera, приведенным в статье "Миграция с управляемого Azure Calico на самостоятельно управляемый Calico". В документации Tigera упоминается, что для самостоятельно управляемого Calico вы настраиваете --network-policy none, как в разделе удаления.
Удаление диспетчера сетевых политик Azure или Calico
Note
При удалении Azure NPM или Calico из кластера следует учитывать следующие сведения:
- Процесс удаления не удаляет пользовательские определения ресурсов (CRD) и пользовательские ресурсы (CR), используемые Calico. Эти CRD и CR имеют имена, заканчивающиеся на projectcalico.org или tigera.io. Вы можете вручную удалить эти CRD и связанные CR после успешного удаления Calico.
- Обновление не удаляет ресурсы политики сети в кластере, но политики больше не применяются после процесса удаления.
Удалите диспетчер политик сети Azure или Calico из существующего кластера с помощью
az aks updateкоманды и укажитеnoneдля--network-policyпараметра.az aks update --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --network-policy none
Очистка ресурсов
В этой статье вы создали пространство имен и два модуля pod и применили политику сети. Если эти ресурсы больше не нужны, их можно удалить.
Удалите ресурсы с помощью
kubectl deleteкоманды.kubectl delete namespace demo