Konfigurera Azure CNI som drivs av Cilium i Azure Kubernetes Service (AKS)
Azure CNI Powered by Cilium kombinerar det robusta kontrollplanet i Azure CNI med dataplanet i Cilium för att tillhandahålla högpresterande nätverk och säkerhet.
Genom att använda eBPF-program som läses in i Linux-kerneln och en effektivare API-objektstruktur ger Azure CNI Powered by Cilium följande fördelar:
Funktioner som motsvarar befintliga Plugin-program för Azure CNI och Azure CNI Overlay
Förbättrad tjänstroutning
Effektivare tillämpning av nätverksprinciper
Bättre observerbarhet för klustertrafik
Stöd för större kluster (fler noder, poddar och tjänster)
IP-adresshantering (IPAM) med Azure CNI som drivs av Cilium
Azure CNI Powered by Cilium kan distribueras med två olika metoder för att tilldela podd-IP-adresser:
Tilldela IP-adresser från ett överläggsnätverk (liknar Azure CNI Overlay-läge)
Tilldela IP-adresser från ett virtuellt nätverk (liknar befintligt Azure CNI med dynamisk podd-IP-tilldelning)
Om du inte är säker på vilket alternativ du ska välja läser du "Välja en nätverksmodell att använda".
Tvingande nätverksprincip
Cilium tillämpar nätverksprinciper för att tillåta eller neka trafik mellan poddar. Med Cilium behöver du inte installera en separat nätverksprincipmotor, till exempel Azure Network Policy Manager eller Calico.
Begränsningar
Azure CNI som drivs av Cilium har för närvarande följande begränsningar:
Endast tillgängligt för Linux och inte för Windows.
Cilium L7-principframtvingande är inaktiverat.
Nätverksprinciper kan inte användas
ipBlock
för att tillåta åtkomst till nod- eller podd-IP-adresser. Mer information och rekommenderad lösning finns i vanliga frågor och svar.Flera Kubernetes-tjänster kan inte använda samma värdport med olika protokoll (till exempel TCP eller UDP) (Cilium-problem #14287).
Nätverksprinciper kan tillämpas på svarspaket när en podd ansluter till sig själv via tjänstkluster-IP (Cilium-problem #19406).
Nätverksprinciper tillämpas inte på poddar som använder värdnätverk (
spec.hostNetwork: true
) eftersom dessa poddar använder värdidentiteten i stället för att ha enskilda identiteter.
Förutsättningar
Azure CLI version 2.48.1 eller senare. Kör
az --version
för att se den installerade versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.Om du använder ARM-mallar eller REST-API:et måste AKS API-versionen vara 2022-09-02-preview eller senare.
Kommentar
Tidigare AKS API-versioner (2022-09-02förhandsversion till 2023-01-02preview) använde fältet networkProfile.ebpfDataplane=cilium
. AKS API-versioner sedan 2023-02-02förhandsversionen använder fältet networkProfile.networkDataplane=cilium
för att aktivera Azure CNI Powered by Cilium.
Skapa ett nytt AKS-kluster med Azure CNI som drivs av Cilium
Alternativ 1: Tilldela IP-adresser från ett överläggsnätverk
Använd följande kommandon för att skapa ett kluster med ett överläggsnätverk och Cilium. Ersätt värdena för <clusterName>
, <resourceGroupName>
och <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
Kommentar
Flaggan --network-dataplane cilium
ersätter den inaktuella --enable-ebpf-dataplane
flaggan som användes i tidigare versioner av CLI-tillägget aks-preview.
Alternativ 2: Tilldela IP-adresser från ett virtuellt nätverk
Kör följande kommandon för att skapa en resursgrupp och ett virtuellt nätverk med ett undernät för noder och ett undernät för poddar.
# 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
Skapa klustret med :--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
Uppdatera ett befintligt kluster till Azure CNI som drivs av Cilium
Kommentar
Du kan uppdatera ett befintligt kluster till Azure CNI Powered by Cilium om klustret uppfyller följande kriterier:
- Klustret använder antingen Azure CNI Overlay eller Azure CNI med dynamisk IP-allokering. Detta inkluderar inte Azure CNI.
- Klustret har inga Windows-nodpooler.
Kommentar
När du aktiverar Cilium i ett kluster med en annan nätverksprincipmotor (Azure NPM eller Calico) avinstalleras och ersätts nätverksprincipmotorn med Cilium. Mer information finns i Avinstallera Azure Network Policy Manager eller Calico .
Varning
Uppgraderingsprocessen utlöser att varje nodpool avbildas på nytt samtidigt. Det går inte att uppgradera varje nodpool separat. Eventuella avbrott i klusternätverk liknar en uppgradering av nodavbildningen eller uppgradering av Kubernetes-versionen där varje nod i en nodpool avbildas på nytt. Cilium börjar tillämpa nätverksprinciper först när alla noder har avbildats på nytt.
För att utföra uppgraderingen behöver du Azure CLI version 2.52.0 eller senare. Kör az --version
för att se den installerade versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
Använd följande kommando för att uppgradera ett befintligt kluster till Azure CNI Som drivs av Cilium. Ersätt värdena för <clusterName>
och <resourceGroupName>
:
az aks update --name <clusterName> --resource-group <resourceGroupName> \
--network-dataplane cilium
Kommentar
När du har aktiverat Azure CNI Som drivs av Cilium i ett AKS-kluster kan du inte inaktivera det. Om du vill använda ett annat nätverksdataplan måste du skapa ett nytt AKS-kluster.
Vanliga frågor och svar
Kan jag anpassa Cilium-konfigurationen?
Nej, AKS hanterar Cilium-konfigurationen och kan inte ändras. Vi rekommenderar att kunder som behöver mer kontroll använder AKS BYO CNI och installerar Cilium manuellt.
Kan jag använda
CiliumNetworkPolicy
anpassade resurser i stället för Kubernetes-resurserNetworkPolicy
?CiliumNetworkPolicy
anpassade resurser stöds delvis. Kunder kan använda FQDN-filtrering som en del av funktionspaketet Advanced Container Networking Services .Det här
CiliumNetworkPolicy
exemplet visar ett exempelmatchningsmönster för tjänster som matchar den angivna etiketten.apiVersion: "cilium.io/v2" kind: CiliumNetworkPolicy metadata: name: "example-fqdn" spec: endpointSelector: matchLabels: foo: bar egress: - toFQDNs: - matchPattern: "*.example.com"
Varför blockeras trafik när
NetworkPolicy
har enipBlock
som tillåter IP-adressen?En begränsning för Azure CNI som drivs av Cilium är att en
NetworkPolicy
"sipBlock
inte kan välja podd- eller nod-IP-adresser.Detta har till exempel
NetworkPolicy
enipBlock
som tillåter alla utgående till0.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.
Men när detta
NetworkPolicy
tillämpas blockerar Cilium utgående till podd- och nod-IP-adresser trots att IP-adresserna finns inomipBlock
CIDR.Som en lösning kan du lägga till
namespaceSelector
ochpodSelector
välja poddar. I exemplet nedan markeras alla poddar i alla namnområden: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: {}
Kommentar
Det går för närvarande inte att ange en
NetworkPolicy
med enipBlock
för att tillåta trafik till nod-IP-adresser.Konfigurerar AKS PROCESSOR- eller minnesgränser för Cilium
daemonset
?Nej, AKS konfigurerar inte processor- eller minnesgränser för Cilium
daemonset
eftersom Cilium är en viktig systemkomponent för poddnätverk och nätverksprincipframtvingande.Använder Azure CNI som drivs av Cilium Kube-Proxy?
Nej, AKS-kluster som skapats med nätverksdataplan eftersom Cilium inte använder Kube-Proxy. Om AKS-klustren finns på Azure CNI Overlay eller Azure CNI med dynamisk IP-allokering och uppgraderas till AKS-kluster som kör Azure CNI som drivs av Cilium skapas nya nodarbetsbelastningar utan kube-proxy. Äldre arbetsbelastningar migreras också för att köras utan kube-proxy som en del av den här uppgraderingsprocessen.
Nästa steg
Läs mer om nätverk i AKS i följande artiklar:
Azure Kubernetes Service