Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure CNI Powered by Cilium объединяет надежную плоскость управления Azure сетевого интерфейса контейнеров (CNI) с уровнем данных Cilium для обеспечения высокопроизводительной сети и безопасности.
Azure CNI Powered by Cilium предоставляет следующие преимущества, используя программы eBPF, загруженные в ядро Linux и более эффективную структуру объектов API:
- Функциональные возможности, эквивалентные существующим плагинам Azure CNI и Azure CNI Overlay.
- Улучшенная маршрутизация служб
- Более эффективное применение политики сети
- Улучшенная наблюдаемость трафика кластера
- Поддержка больших кластеров (больше узлов, модулей pod и служб)
Управление IP-адресами (IPAM) с Azure CNI с помощью Cilium
Вы можете развернуть Azure CNI Powered by Cilium с двумя разными способами назначения IP-адресов pod:
- Назначение IP-адресов из оверлейной сети (аналогично оверлейному режиму Azure CNI)
- Назначение IP-адресов из виртуальной сети (аналогично существующему Azure CNI с динамическим назначением IP-адресов pod)
Если вы не уверены, какой параметр нужно выбрать, прочитайте статью "Выбор сетевой модели"
Versions
| Версия Kubernetes | Минимальная версия Cilium |
|---|---|
| 1.29 (LTS) | 1.14.20 |
| 1.30 (LTS) | 1.14.20 |
| 1.31 (LTS) | 1.16.16 |
| 1.32 | 1.17.9 |
| 1.33 | 1.17.9 |
| 1.34 | 1.18.6 |
| 1,35 | 1.18.6 |
Дополнительные сведения об использовании версий AKS и временных шкалах выпуска см. в статье "Поддерживаемые версии Kubernetes".
Применение политики сети
Cilium применяет сетевые политики для разрешения или запрета трафика между pod. При использовании Cilium не требуется устанавливать отдельный обработчик политики сети, например диспетчер сетевых политик Azure или Calico.
Политика локального перенаправления (LRP)
LRP поддерживается, начиная с Kubernetes версии 1.29 и выше, и Cilium версии 1.14 и выше. Чтобы LRP работал с расширенными сетевыми службами контейнеров (ACNS) — фильтрацией FQDN, метки сетевой политики Cilium должны совпадать с метками pod для локального кэша DNS на узле.
Limitations
В настоящее время Azure CNI, работающий с Cilium, имеет следующие ограничения:
- Доступно только для Linux, а не для Windows.
- Политики сети не могут использовать
ipBlockдля разрешения доступа к IP-адресам узлов или подов. Дополнительные сведения и рекомендуемые обходные пути см. в часто задаваемых вопросах. - Для Cilium версии 1.16 или более ранней версии несколько служб Kubernetes не могут использовать один и тот же порт узла с различными протоколами (например, TCP или UDP) (проблема Cilium #14287).
- Политики сети не применяются к подам, использующим сетевые функции хоста (
spec.hostNetwork: true), так как эти поды используют идентификацию узла вместо отдельных идентификаций. - Срезы конечных точек Cilium поддерживаются в Kubernetes версии 1.32 и выше. Срезы конечных точек Cilium не поддерживают конфигурацию группировки конечных точек Cilium. Пространство имен приоритета через
cilium.io/ces-namespaceне поддерживается. - Политика L7 не поддерживается
CiliumClusterwideNetworkPolicy(CCNP). - Cilium использует идентификаторы Cilium в качестве уникальных для подготовки конечных точек, поэтому часто изменяющиеся рабочие нагрузки, такие как задания Spark, создают большое количество идентификаторов Cilium. Чтобы избежать достижения предела удостоверений Cilium (65535), можно значительно сократить создание удостоверений Cilium, исключив из конфигурации Cilium метки задания Spark, такие как
!spark-app-nameи!spark-app-selector. Дополнительные сведения о правилах исключения идентификаторов Cilium см. в официальной документации по меткам Cilium. - Локальный DNS AKS несовместим с Advanced Container Networking Services (ACNS) — фильтрацией по Полным Доменным Именам (FQDN).
Considerations
Чтобы получить такие возможности, как наблюдаемость сетевого трафика и функции безопасности, такие как фильтрация на основе полностью квалифицированных доменных имен (FQDN) и сетевые политики на уровне 7 в вашем кластере, рассмотрите возможность включения Расширенных сетевых служб контейнеров в ваших кластерах.
Prerequisites
- Azure CLI версии 2.48.1 или более поздней. Запустите
az --version, чтобы просмотреть текущую установленную версию. Если необходимо установить или обновить, см. раздел Install Azure CLI. - Если вы используете шаблоны 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 by Cilium.
Создание нового кластера AKS с Azure CNI на платформе Cilium
В следующих разделах используется az aks create команда для создания кластера и назначения IP-адресов.
Вариант 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-адресов из виртуальной сети
Выполните следующие команды, чтобы создать группу ресурсов и виртуальную сеть с подсетью для узлов и подсетью для подов.
# 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
Вариант 3. Назначение IP-адресов из подсети узла
требуется Azure CLI версии 2.69.0 или более поздней. Запустите az --version , чтобы просмотреть текущую установленную версию. Если необходимо установить или обновить, см. раздел Install Azure CLI.
Создайте кластер с помощью подсети узла с плоскостью данных Cilium:
az aks create \
--name <clusterName> \
--resource-group <resourceGroupName> \
--location <location> \
--network-plugin azure \
--network-dataplane cilium \
--generate-ssh-keys
Часто задаваемые вопросы
Можно ли настроить конфигурацию Cilium?
Нет, AKS управляет конфигурацией Cilium и ее нельзя изменить. Мы рекомендуем клиентам, которым требуется больше элементов управления, использовать AKS BYO CNI и устанавливать Cilium вручную.
Можно ли использовать
CiliumNetworkPolicyпользовательские ресурсы вместо ресурсов KubernetesNetworkPolicy?Поддерживаются L3 и L4
CiliumNetworkPolicyи могут использоваться вместе с ресурсами KubernetesNetworkPolicy.Клиенты могут использовать фильтрацию по полному доменному имени и политики уровня 7 в рамках пакета функций расширенных сетевых служб контейнеров.
Можно ли использовать
CiliumClusterwideNetworkPolicy?Да,
CiliumClusterwideNetworkPolicyподдерживается. В следующем примере политики YAML показана настройка правила L4:apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "l4-rule-ingress-backend-frontend" spec: endpointSelector: matchLabels: role: backend ingress: - fromEndpoints: - matchLabels: role: frontend toPorts: - ports: - port: "80" protocol: TCPКакие функции Cilium поддерживаются в управляемом Azure CNI? Какие из них требуют услуг расширенного сетевого взаимодействия контейнеров?
Поддерживаемые функции без ACNS с ACNS Срезы конечных узлов Cilium ✔️ ✔️ Политики сети K8s ✔️ ✔️ Политики сети Cilium L3/L4 ✔️ ✔️ Политика сети Cilium Clusterwide ✔️ ✔️ Фильтрация полного доменного имени ❌ ✔️ Политики сети L7 (HTTP/gRPC/Kafka) ❌ ✔️ Наблюдение за сетью контейнеров (метрики и журналы потоков) ❌ ✔️ Маршрутизация узла eBPF ❌ ✔️ Можно ли изменить Cilium ConfigMap?
Поддерживается только исключение метки label для Azure CNI с использованием Cilium. Этот ConfigMap существует в
kube-systemпространстве имен какcilium-config. Добавление меток сохраняется при перезапусках, обновлениях кластера и их согласовании. Изменения других значений в ConfigMap не поддерживаются.Почему трафик блокируется, если
NetworkPolicyимеетipBlock, разрешающий IP-адрес?Ограничение Azure CNI Powered by Cilium заключается в том, что
NetworkPolicyipBlockне удается выбрать 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.Однако при применении
NetworkPolicyCilium блокирует исходящий трафик к IP-адресам подов и узлов сети, даже если IP-адреса находятся вipBlockCIDR.В качестве обходного решения можно добавить
namespaceSelectorиpodSelectorдля выбора Pods. В этом примере выбираются все 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, работающих Azure CNI на базе Cilium, новые рабочие нагрузки узлов создаются безkube-proxy. Старые рабочие нагрузки также перемещаются для работы безkube-proxyв рамках этого процесса обновления.
Сеть с двумя стеками с Azure CNI с помощью Cilium
Вы можете развернуть двухстековые кластеры AKS с Azure CNI, управляемой с помощью Cilium. Эта функция также позволяет управлять трафиком IPv6 с помощью подсистемы сетевой политики Cilium.
У вас должна быть версия Kubernetes версии 1.29 или более поздней.
Настройка кластеров наложения с помощью Azure CNI на базе Cilium
Создайте кластер с наложением CNI Azure, используя команду az aks create. Обязательно используйте аргумент --network-dataplane cilium для указания плоскости данных Cilium.
clusterName="myOverlayCluster"
resourceGroup="myResourceGroup"
location="westcentralus"
az aks create \
--name $clusterName \
--resource-group $resourceGroup \
--location $location \
--network-plugin azure \
--network-plugin-mode overlay \
--network-dataplane cilium \
--ip-families ipv4,ipv6 \
--generate-ssh-keys
Дальнейшие шаги
Узнайте больше о сетевом взаимодействии в AKS из следующих статей:
- Обновление режимов IPAM CNI для Azure и технологии дата-плоскости.
- Использовать статический IP-адрес с подсистемой балансировки нагрузки Azure Kubernetes Service (AKS)
- Использовать внутренний балансировщик нагрузки с использованием службы контейнеров Azure (AKS)
- Создать базовый контроллер входящего трафика с внешним сетевым подключением.