Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure CNI Powered by Cilium 将 Azure CNI 的可靠控制平面与 Cilium 的数据平面相结合,以提供高性能网络和安全性。
Azure CNI Powered by Cilium 利用加载到 Linux 内核中的 eBPF 程序和更高效的 API 对象结构来提供以下优势:
与现有 Azure CNI 和 Azure CNI 覆盖插件等效的功能
改进了服务路由
更有效的网络策略实施
更好地观察群集流量
支持更大的群集(更多节点、pod 和服务)
Azure CNI Powered by Cilium 的 IP 地址管理 (IPAM)
可以使用两种不同的 pod IP 分配方法部署 Azure CNI Powered by Cilium:
- 从覆盖网络分配 IP 地址(类似于 Azure CNI 覆盖模式)
网络策略实施
Cilium 实施网络策略来允许或拒绝 pod 之间的流量。 在 Cilium 中,无需安装单独的网络策略引擎,例如 Azure 网络策略管理器或 Calico。
限制
Azure CNI Powered by Cilium 目前存在以下限制:
仅适用于 Linux,不适用于 Windows。
网络策略不能使用
ipBlock
来允许访问节点或 Pod IP。 有关详细信息和建议的解决方法,请参阅常见问题解答。对于 Cilium 版本 1.16 或更早版本,多个 Kubernetes 服务不能将同一主机端口与不同的协议(例如 TCP 或 UDP)(Cilium 问题 #14287) 配合使用。
网络策略不会应用于使用主机网络(
spec.hostNetwork: true
)的 Pod,因为这些 Pod 使用主机标识而不是具有单个标识。Kubernetes 版本 1.32 及更高版本中支持 Cilium 终结点切片。 Cilium 终结点切片不支持对 Cilium 终结点的分组方式进行配置。 不支持通过
cilium.io/ces-namespace
实现优先级命名空间。
先决条件
Azure CLI 2.48.1 或更高版本。 运行
az --version
查看当前安装的版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。如果使用 ARM 模板或 REST API,则 AKS API 版本必须为 2022-09-02-preview 或更高。
注意
以前的 AKS API 版本(2022-09-02preview 至 2023-01-02preview)使用字段 networkProfile.ebpfDataplane=cilium
。 自 2023-02-02preview 起的 AKS API 版本使用字段 networkProfile.networkDataplane=cilium
来启用由 Cilium 提供支持的 Azure CNI。
使用 Azure CNI Powered by Cilium 创建新的 AKS 群集
选项 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
标志替换了早期版本的 aks-preview CLI 扩展中使用的已弃用 --enable-ebpf-dataplane
标志。
选项 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
常见问题解答
是否可以自定义 Cilium 配置?
否,AKS 将管理 Cilium 配置,且无法修改配置。 我们建议需要更高控制度的客户使用 AKS BYO CNI 并手动安装 Cilium。
是否可以使用
ClusterwideCiliumNetworkPolicy
?不支持
ClusterwideCiliumNetworkPolicy
。Azure 托管 CNI 支持哪些 Cilium 功能? 其中哪项需要高级容器网络服务?
支持的功能 无 ACNS w/ ACNS Cilium 终结点切片 ✔️ ✔️ K8s 网络策略 ✔️ ✔️ Cilium L3/L4 网络策略 ✔️ ✔️ FQDN 域名过滤 ❌ ✔️ L7 网络策略 (HTTP/gRPC/Kafka) ❌ ✔️ 容器网络可观测性(指标和流日志) ❌ ✔️ NetworkPolicy
具有允许 IP 地址的ipBlock
,为什么流量会被阻止?Azure CNI Powered by Cilium 的限制是
NetworkPolicy
的ipBlock
无法选择 Pod 或节点 IP。例如,此
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 阻止 Pod 和节点 IP 的流出量,即使 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
中配置 CPU 或内存限制?否,AKS 不会在 Cilium
daemonset
中配置 CPU 或内存限制,因为 Cilium 是 Pod 网络和网络策略强制实施的关键系统组件。
后续步骤
通过以下文章详细了解 AKS 中的网络: