Настройка Azure CNI с помощью Cilium в Служба Azure Kubernetes (AKS)
Azure CNI Powered by Cilium объединяет надежный уровень управления Azure CNI с плоскости данных Cilium для обеспечения высокопроизводительной сети и безопасности.
Используя программы eBPF, загруженные в ядро Linux и более эффективную структуру объектов API, Azure CNI Powered cilium обеспечивает следующие преимущества:
Функциональные возможности, эквивалентные существующим подключаемым модулям Azure CNI и Azure CNI Overlay
Улучшенная маршрутизация служб
Более эффективное применение политики сети
Улучшенная наблюдаемость трафика кластера
Поддержка больших кластеров (больше узлов, модулей pod и служб)
управление IP-адресами (IPAM) с Azure CNI powered by Cilium
Azure CNI Powered by Cilium можно развернуть с помощью двух различных методов назначения IP-адресов pod:
Назначение IP-адресов из сети наложения (аналогично режиму наложения Azure CNI)
Назначение IP-адресов из виртуальной сети (аналогично существующему Azure CNI с динамическим назначением IP-адресов pod)
Если вы не уверены, какой параметр выбрать, прочитайте статью "Выбор сетевой модели для использования".
Применение политики сети
Cilium применяет политики сети для разрешения или запрета трафика между модулями pod. С помощью Cilium вам не нужно устанавливать отдельный подсистему сетевой политики, например Диспетчер сетевых политик Azure или Calico.
Ограничения
Azure CNI, на базе Cilium в настоящее время имеет следующие ограничения:
Доступно только для Linux, а не для Windows.
Принудительное применение политики Cilium L7 отключено.
Политики сети не могут использовать
ipBlock
для разрешения доступа к ip-адресам узла или pod. Ознакомьтесь с часто задаваемыми вопросами о подробных сведениях и рекомендуемых обходных решениях.Несколько служб Kubernetes не могут использовать один и тот же порт узла с различными протоколами (например, TCP или UDP) (проблема Cilium #14287).
Политики сети могут применяться в пакетах ответа при подключении pod к себе через IP-адрес кластера служб (проблема Cilium #19406).
Политики сети не применяются к модулям pod с использованием сети узлов (
spec.hostNetwork: true
), так как эти модули pod используют удостоверение узла вместо наличия отдельных удостоверений.
Необходимые компоненты
Azure CLI версии 2.48.1 или более поздней версии. Запустите
az --version
, чтобы просмотреть текущую установленную версию. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.При использовании шаблонов ARM или REST API версия API AKS должна быть 2022-09-02-preview или более поздней.
Примечание.
Предыдущие версии API AKS (2022-09-02preview до 2023-01-02preview) использовали поле networkProfile.ebpfDataplane=cilium
. Версии API AKS с 2023-02-02preview используют поле networkProfile.networkDataplane=cilium
для включения Azure CNI Powered cilium.
Создание кластера AKS с помощью Azure CNI Powered by Cilium
Вариант 1. Назначение IP-адресов из сети наложения
Используйте следующие команды, чтобы создать кластер с наложенной сетью и Cilium. Замените значения для <clusterName>
, <resourceGroupName>
и <location>
:
az aks create \
--name <clusterName> \
--resource-group <resourceGroupName> \
--location <location> \
--network-plugin azure \
--network-plugin-mode overlay \
--pod-cidr 192.168.0.0/16 \
--network-dataplane cilium \
--generate-ssh-keys
Примечание.
Флаг --network-dataplane cilium
заменяет устаревший --enable-ebpf-dataplane
флаг, используемый в более ранних версиях расширения CLI aks-preview.
Вариант 2. Назначение IP-адресов из виртуальной сети
Выполните следующие команды, чтобы создать группу ресурсов и виртуальную сеть с подсетью для узлов и подсети для модулей pod.
# Create the resource group
az group create --name <resourceGroupName> --location <location>
# Create a virtual network with a subnet for nodes and a subnet for pods
az network vnet create --resource-group <resourceGroupName> --location <location> --name <vnetName> --address-prefixes <address prefix, example: 10.0.0.0/8> -o none
az network vnet subnet create --resource-group <resourceGroupName> --vnet-name <vnetName> --name nodesubnet --address-prefixes <address prefix, example: 10.240.0.0/16> -o none
az network vnet subnet create --resource-group <resourceGroupName> --vnet-name <vnetName> --name podsubnet --address-prefixes <address prefix, example: 10.241.0.0/16> -o none
Создание кластера с помощью --network-dataplane cilium
:
az aks create \
--name <clusterName> \
--resource-group <resourceGroupName> \
--location <location> \
--max-pods 250 \
--network-plugin azure \
--vnet-subnet-id /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/nodesubnet \
--pod-subnet-id /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/podsubnet \
--network-dataplane cilium \
--generate-ssh-keys
Обновление существующего кластера в Azure CNI с помощью Cilium
Примечание.
Вы можете обновить существующий кластер до Azure CNI Powered by Cilium, если кластер соответствует следующим критериям:
- В кластере используется наложение Azure CNI или Azure CNI с динамическим выделением IP-адресов. Это не включает Azure CNI.
- В кластере нет пулов узлов Windows.
Примечание.
При включении Cilium в кластере с другим подсистемой сетевой политики (Azure NPM или Calico) подсистема сетевой политики будет удалена и заменена на Cilium. Дополнительные сведения см. в разделе "Удаление диспетчера сетевых политик Azure" или "Калифорния ".
Предупреждение
Процесс обновления активирует повторное изображение каждого пула узлов одновременно. Обновление каждого пула узлов отдельно не поддерживается. Любые нарушения сети кластера аналогичны обновлению образа узла или обновлению версии Kubernetes, где каждый узел в пуле узлов повторно создается. Cilium начнет применять политики сети только после повторного образа всех узлов.
Для обновления потребуется Azure CLI версии 2.52.0 или более поздней. Запустите az --version
, чтобы просмотреть текущую установленную версию. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Используйте следующую команду, чтобы обновить существующий кластер до Azure CNI с помощью Cilium. Замените значения для <clusterName>
и <resourceGroupName>
:
az aks update --name <clusterName> --resource-group <resourceGroupName> \
--network-dataplane cilium
Примечание.
После включения Azure CNI Powered by Cilium в кластере AKS его нельзя отключить. Если вы хотите использовать другую сетевую плоскость данных, необходимо создать новый кластер AKS.
Часто задаваемые вопросы
Можно ли настроить конфигурацию Cilium?
Нет, AKS управляет конфигурацией Cilium и ее нельзя изменить. Мы рекомендуем клиентам, которым требуется больше элементов управления, использовать AKS BYO CNI и устанавливать Cilium вручную.
Можно ли использовать
CiliumNetworkPolicy
пользовательские ресурсы вместо ресурсов KubernetesNetworkPolicy
?CiliumNetworkPolicy
пользовательские ресурсы частично поддерживаются. Клиенты могут использовать полное доменное имя в составе пакета функций расширенных сетевых служб контейнеров.В этом
CiliumNetworkPolicy
примере показан пример шаблона сопоставления для служб, соответствующих указанной метке.apiVersion: "cilium.io/v2" kind: CiliumNetworkPolicy metadata: name: "example-fqdn" spec: endpointSelector: matchLabels: foo: bar egress: - toFQDNs: - matchPattern: "*.example.com"
Почему трафик блокируется, если
NetworkPolicy
у него естьipBlock
IP-адрес?Ограничение Azure CNI Powered cilium заключается в том, что
NetworkPolicy
неipBlock
удается выбрать IP-адреса pod или узла.Например, у этого
NetworkPolicy
есть возможностьipBlock
для всех исходящих0.0.0.0/0
данных:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: example-ipblock spec: podSelector: {} policyTypes: - Egress egress: - to: - ipBlock: cidr: 0.0.0.0/0 # This will still block pod and node IPs.
Однако при
NetworkPolicy
применении Cilium блокирует исходящий трафик к ip-адресам pod и узлам, даже если IP-адреса находятся вipBlock
CIDR.В качестве обходного решения можно добавить
namespaceSelector
иpodSelector
выбрать модули pod. В приведенном ниже примере выбираются все модули pod во всех пространствах имен:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: example-ipblock spec: podSelector: {} policyTypes: - Egress egress: - to: - ipBlock: cidr: 0.0.0.0/0 - namespaceSelector: {} - podSelector: {}
Примечание.
В настоящее время невозможно указать
NetworkPolicy
объект сipBlock
разрешением трафика на IP-адреса узлов.Настраивает ли AKS ограничения ЦП или памяти на Cilium
daemonset
?Нет, AKS не настраивает ограничения ЦП или памяти на Cilium
daemonset
, так как Cilium является критически важным системным компонентом для сетевых сетей pod и применения политик сети сети.Использует ли Azure CNI на базе Cilium Kube-Proxy?
Нет, кластеры AKS, созданные с помощью сетевого плана данных, так как Cilium не используют Kube-Proxy. Если кластеры AKS находятся в Azure CNI Overlay или Azure CNI с динамическим выделением IP-адресов и обновляются до кластеров AKS, работающих под управлением CNI Azure cilium, новые рабочие нагрузки узлов создаются без kube-proxy. Старые рабочие нагрузки также переносятся для запуска без kube-proxy в рамках этого процесса обновления.
Следующие шаги
Узнайте больше о сетевом взаимодействии в AKS из следующих статей:
Azure Kubernetes Service