Dela via


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:

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-resurser NetworkPolicy ?

    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 en ipBlock som tillåter IP-adressen?

    En begränsning för Azure CNI som drivs av Cilium är att en NetworkPolicy"s ipBlock inte kan välja podd- eller nod-IP-adresser.

    Detta har till exempel NetworkPolicy en ipBlock som tillåter alla utgående till 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.
    

    Men när detta NetworkPolicy tillämpas blockerar Cilium utgående till podd- och nod-IP-adresser trots att IP-adresserna finns inom ipBlock CIDR.

    Som en lösning kan du lägga till namespaceSelector och podSelector 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 en ipBlock 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: