A Cilium által működtetett Azure CNI konfigurálása az Azure Kubernetes Service-ben (AKS)

Az Azure CNI Powered by Cilium egyesíti az Azure CNI robusztus vezérlősíkját a Cilium adatsíkjával, hogy nagy teljesítményű hálózatkezelést és biztonságot nyújtson.

A Linux kernelbe betöltött eBPF-programok és egy hatékonyabb API-objektumstruktúra használatával az Azure CNI Powered by Cilium a következő előnyöket biztosítja:

  • A meglévő Azure CNI- és Azure CNI Overlay beépülő modulokkal egyenértékű funkciók

  • Továbbfejlesztett szolgáltatás-útválasztás

  • Hatékonyabb hálózati házirend-kényszerítés

  • A fürtforgalom jobb megfigyelhetősége

  • Nagyobb fürtök (több csomópont, pod és szolgáltatás) támogatása

IP-címkezelés (IPAM) a Cilium által működtetett Azure CNI-vel

A Cilium által üzemeltetett Azure CNI két különböző módszerrel telepíthető a pod IP-címeinek hozzárendeléséhez:

  • IP-címek hozzárendelése átfedési hálózatról (hasonló az Azure CNI átfedési módjához)

  • IP-címek hozzárendelése virtuális hálózatról (hasonlóan a meglévő Azure CNI-hez dinamikus pod IP-hozzárendeléssel)

Ha nem biztos abban, hogy melyik lehetőséget válassza, olvassa el a "Használandó hálózati modell kiválasztása" című cikket.

Hálózati házirend kényszerítése

A Cilium hálózati házirendeket kényszerít ki a podok közötti forgalom engedélyezésére vagy letiltására. A Cilium használatával nem kell külön hálózati házirendmotort telepítenie, például az Azure Network Policy Managert vagy a Calico-t.

Korlátozások

A Cilium által üzemeltetett Azure CNI jelenleg a következő korlátozásokkal rendelkezik:

  • Csak Linux rendszeren érhető el, Windowshoz nem.

  • A Cilium L7 szabályzatkényszerítése le van tiltva.

  • A Hubble le van tiltva.

  • A hálózati házirendek nem tudják ipBlock engedélyezni a csomópontokhoz vagy pod IP-címekhez való hozzáférést. A részletekkel és az ajánlott kerülő megoldásokkal kapcsolatban gyakran ismételt kérdéseket talál.

  • A Kubernetes-szolgáltatások internalTrafficPolicy=Local nem támogatottak (Cilium-probléma #17796).

  • Több Kubernetes-szolgáltatás nem használhatja ugyanazt a gazdagépportot különböző protokollokkal (például TCP vagy UDP) (Cilium-probléma #14287).

  • A hálózati szabályzatok akkor kényszeríthetők a válaszcsomagokra, ha egy pod a szolgáltatásfürt IP-címén keresztül csatlakozik magához (Cilium-probléma #19406).

Előfeltételek

  • Az Azure CLI 2.48.1-es vagy újabb verziója. Futtassa az --version a jelenleg telepített verziót. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.

  • Arm-sablonok vagy REST API használata esetén az AKS API-verziónak 2022-09-02-es vagy újabb verziójúnak kell lennie.

Feljegyzés

A korábbi AKS API-verziók (2022-09-02preview to 2023-01-02preview) a mezőt networkProfile.ebpfDataplane=ciliumhasználták. Az AKS API 2023-02-02preview óta futó verziói a mező networkProfile.networkDataplane=cilium használatával engedélyezik a Cilium által működtetett Azure CNI-t.

Új AKS-fürt létrehozása a Cilium által működtetett Azure CNI-vel

1. lehetőség: IP-címek hozzárendelése átfedési hálózatról

Az alábbi parancsokkal hozzon létre egy átfedési hálózatot és a Ciliumot tartalmazó fürtöt. Cserélje le a , <resourceGroupName>és <location>a : értékeket<clusterName>.

az aks create -n <clusterName> -g <resourceGroupName> -l <location> \
  --network-plugin azure \
  --network-plugin-mode overlay \
  --pod-cidr 192.168.0.0/16 \
  --network-dataplane cilium

Feljegyzés

A --network-dataplane cilium jelölő az aks-preview CLI-bővítmény korábbi verzióiban használt elavult --enable-ebpf-dataplane jelzőt váltja fel.

2. lehetőség: IP-címek hozzárendelése virtuális hálózatról

Futtassa az alábbi parancsokat egy erőforráscsoport és virtuális hálózat létrehozásához a csomópontok alhálózatával és a podok alhálózatával.

# 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 -g <resourceGroupName> --location <location> --name <vnetName> --address-prefixes <address prefix, example: 10.0.0.0/8> -o none 
az network vnet subnet create -g <resourceGroupName> --vnet-name <vnetName> --name nodesubnet --address-prefixes <address prefix, example: 10.240.0.0/16> -o none 
az network vnet subnet create -g <resourceGroupName> --vnet-name <vnetName> --name podsubnet --address-prefixes <address prefix, example: 10.241.0.0/16> -o none 

Hozza létre a fürtöt a következővel --network-dataplane cilium:

az aks create -n <clusterName> -g <resourceGroupName> -l <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

Meglévő fürt frissítése a Cilium által működtetett Azure CNI-re

Feljegyzés

Ha a fürt megfelel a következő feltételeknek, frissíthet egy meglévő fürtöt a Cilium által működtetett Azure CNI-ra:

  • A fürt az Azure CNI Overlayt vagy az Azure CNI-t használja dinamikus IP-kiosztással. Ez nem tartalmazza az Azure CNI-t.
  • A fürt nem rendelkezik Windows-csomópontkészletekkel.

Feljegyzés

Ha egy másik hálózati házirendmotorral (Azure NPM vagy Calico) rendelkező fürtön engedélyezi a Ciliumot, a rendszer eltávolítja és lecseréli a Ciliumra. További részletekért lásd: Az Azure Network Policy Manager vagy a Calico eltávolítása.

Figyelmeztetés

A frissítési folyamat aktiválja az egyes csomópontkészleteket, hogy egyidejűleg újraképeződjenek. Az egyes csomópontkészletek külön frissítése nem támogatott. A fürt hálózatának megszakadása hasonló a csomópontok lemezképének frissítéséhez vagy a Kubernetes verziófrissítéséhez , ahol a csomópontkészlet minden csomópontja újra van rendszerképben.

A Cilium csak az összes csomópont újraképezése után kezdi meg a hálózati szabályzatok kikényszerítését.

A frissítés végrehajtásához az Azure CLI 2.52.0-s vagy újabb verziójára lesz szüksége. Futtassa az --version a jelenleg telepített verziót. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.

A következő paranccsal frissíthet egy meglévő fürtöt az Azure CNI Powered by Ciliumra. Cserélje le a következő értékeket <clusterName><resourceGroupName>:

az aks update -n <clusterName> -g <resourceGroupName> \
  --network-dataplane cilium

Gyakori kérdések

  • Testre szabhatom a Cilium konfigurációját?

    Nem, az AKS kezeli a Cilium-konfigurációt, és nem módosítható. Javasoljuk, hogy a nagyobb ellenőrzést igénylő ügyfelek használják az AKS BYO CNI-t , és telepítse manuálisan a Ciliumot.

  • Használhatok CiliumNetworkPolicy egyéni erőforrásokat Kubernetes-erőforrások NetworkPolicy helyett?

    CiliumNetworkPolicy az egyéni erőforrások hivatalosan nem támogatottak. Azt javasoljuk, hogy az ügyfelek Kubernetes-erőforrásokat NetworkPolicy használva konfigurálják a hálózati szabályzatokat.

  • Miért blokkolódik a forgalom, ha az NetworkPolicy IP-címet engedélyező ipBlock ip-címmel rendelkezik?

    A Cilium által üzemeltetett Azure CNI korlátozása, hogy egy NetworkPolicy's ipBlock nem tudja kiválasztani a pod- vagy csomópont IP-címeket.

    Ennek például van egy ipBlock olyan eleme, NetworkPolicy amely lehetővé teszi az összes kimenő forgalom számára: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.
    

    Ha azonban ezt NetworkPolicy alkalmazza, a Cilium blokkolni fogja a pod- és csomópont IP-címekre való kimenő forgalmat annak ellenére, hogy az IP-címek a ipBlock CIDR-ben találhatók.

    Áthidaló megoldásként hozzáadhat namespaceSelector és podSelector kiválaszthat podokat. Az alábbi példa kijelöli az összes podot az összes névtérben:

    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: {}
    

    Feljegyzés

    Jelenleg nem adható meg olyan NetworkPolicy , amely ipBlock engedélyezi a csomópont IP-címek felé történő forgalmat.

  • Az AKS konfigurálja a Cilium daemonsetprocesszor- vagy memóriakorlátjait?

    Nem, az AKS nem konfigurál cpu- vagy memóriakorlátokat a Ciliumon daemonset , mert a Cilium kritikus rendszerösszetevő a podok hálózatkezeléséhez és a hálózati házirendek érvényesítéséhez.

  • A Cilium által üzemeltetett Azure CNI Kube-Proxyt használ?

    Nem, a hálózati adatsíkkal létrehozott AKS-fürtök, mivel a Cilium nem használja a Kube-Proxyt. Ha az AKS-fürtök az Azure CNI Overlay vagy az Azure CNI dinamikus IP-kiosztással vannak elosztva, és a Cilium által üzemeltetett Azure CNI-t futtató AKS-fürtökre vannak frissítve, az új csomópontok számítási feladatai kube-proxy nélkül jönnek létre. A régebbi számítási feladatok is migrálva lesznek, hogy kube-proxy nélkül fussanak a frissítési folyamat részeként.

Következő lépések

További információ az AKS hálózatkezeléséről az alábbi cikkekben: