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


Настройка 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, если кластер соответствует следующим критериям:

Примечание.

При включении 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 пользовательские ресурсы вместо ресурсов Kubernetes NetworkPolicy ?

    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 из следующих статей: