Mengonfigurasi Azure CNI Powered by Cilium di Azure Kubernetes Service (AKS)

Azure CNI Powered by Cilium menggabungkan sarana kontrol Azure CNI yang kuat dengan bidang data Cilium untuk menyediakan jaringan dan keamanan berkinerja tinggi.

Dengan memanfaatkan program eBPF yang dimuat ke kernel Linux dan struktur objek API yang lebih efisien, Azure CNI Powered by Cilium memberikan manfaat berikut:

  • Fungsionalitas yang setara dengan plugin Azure CNI dan Azure CNI Overlay yang ada

  • Perutean Layanan yang Ditingkatkan

  • Penegakan kebijakan jaringan yang lebih efisien

  • Pengamatan lalu lintas kluster yang lebih baik

  • Dukungan untuk kluster yang lebih besar (lebih banyak simpul, pod, dan layanan)

Ip Address Management (IPAM) dengan Azure CNI Powered by Cilium

Azure CNI Powered by Cilium dapat disebarkan menggunakan dua metode berbeda untuk menetapkan IP pod:

  • Menetapkan alamat IP dari jaringan overlay (mirip dengan mode Overlay Azure CNI)

  • Menetapkan alamat IP dari jaringan virtual (mirip dengan Azure CNI yang ada dengan Penetapan IP Pod Dinamis)

Jika Anda tidak yakin opsi mana yang akan dipilih, baca "Memilih model jaringan yang akan digunakan".

Penegakan Kebijakan Jaringan

Cilium memberlakukan kebijakan jaringan untuk mengizinkan atau menolak lalu lintas antar pod. Dengan Cilium, Anda tidak perlu menginstal mesin kebijakan jaringan terpisah seperti Azure Network Policy Manager atau Calico.

Batasan

Azure CNI yang didukung oleh Cilium saat ini memiliki batasan berikut:

  • Hanya tersedia untuk Linux dan bukan untuk Windows.

  • Penegakan kebijakan Cilium L7 dinonaktifkan.

  • Hubble dinonaktifkan.

  • Kebijakan jaringan tidak dapat digunakan ipBlock untuk mengizinkan akses ke IP simpul atau pod. Lihat tanya jawab umum untuk detail dan solusi yang direkomendasikan.

  • Layanan Kubernetes dengan internalTrafficPolicy=Local tidak didukung (masalah Cilium #17796).

  • Beberapa layanan Kubernetes tidak dapat menggunakan port host yang sama dengan protokol yang berbeda (misalnya, TCP atau UDP) (masalah Cilium #14287).

  • Kebijakan jaringan dapat diberlakukan pada paket balasan ketika pod terhubung ke dirinya sendiri melalui IP kluster layanan (masalah Cilium #19406).

Prasyarat

  • Azure CLI versi 2.48.1 atau yang lebih baru. Jalankan az --version untuk melihat versi yang saat ini diinstal. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

  • Jika menggunakan templat ARM atau REST API, versi API AKS harus 2022-09-02-preview atau yang lebih baru.

Catatan

Versi API AKS sebelumnya (2022-09-02preview ke 2023-01-02preview) menggunakan bidang networkProfile.ebpfDataplane=cilium. Versi AKS API sejak 2023-02-02preview menggunakan bidang networkProfile.networkDataplane=cilium untuk mengaktifkan Azure CNI Powered by Cilium.

Membuat Kluster AKS baru dengan Azure CNI Powered by Cilium

Opsi 1: Menetapkan alamat IP dari jaringan overlay

Gunakan perintah berikut untuk membuat kluster dengan jaringan overlay dan Cilium. Ganti nilai untuk <clusterName>, <resourceGroupName>, dan <location>:

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

Catatan

Bendera --network-dataplane cilium menggantikan bendera yang tidak --enable-ebpf-dataplane digunakan lagi dalam versi ekstensi CLI aks-preview sebelumnya.

Opsi 2: Menetapkan alamat IP dari jaringan virtual

Jalankan perintah berikut untuk membuat grup sumber daya dan jaringan virtual dengan subnet untuk simpul dan subnet untuk 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 -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 

Buat kluster menggunakan --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

Meningkatkan kluster yang ada ke Azure CNI Powered by Cilium

Catatan

Anda dapat memperbarui kluster yang ada ke Azure CNI Powered by Cilium jika kluster memenuhi kriteria berikut:

Catatan

Saat mengaktifkan Cilium dalam kluster dengan mesin kebijakan jaringan yang berbeda (Azure NPM atau Calico), mesin kebijakan jaringan akan dihapus instalasinya dan diganti dengan Cilium. Lihat Menghapus instalan Azure Network Policy Manager atau Calico untuk detail selengkapnya.

Peringatan

Proses peningkatan memicu setiap kumpulan simpul untuk di-image ulang secara bersamaan. Meningkatkan setiap kumpulan simpul secara terpisah tidak didukung. Gangguan apa pun pada jaringan kluster mirip dengan peningkatan gambar simpul atau peningkatan versi Kubernetes di mana setiap simpul dalam kumpulan simpul di-image ulang.

Cilium akan mulai memberlakukan kebijakan jaringan hanya setelah semua simpul disortir ulang.

Untuk melakukan peningkatan, Anda memerlukan Azure CLI versi 2.52.0 atau yang lebih baru. Jalankan az --version untuk melihat versi yang saat ini diinstal. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Gunakan perintah berikut untuk meningkatkan kluster yang ada ke Azure CNI Powered by Cilium. Ganti nilai untuk <clusterName> dan <resourceGroupName>:

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

Tanya jawab umum

  • Dapatkah saya menyesuaikan konfigurasi Cilium?

    Tidak, AKS mengelola konfigurasi Cilium dan tidak dapat dimodifikasi. Kami menyarankan agar pelanggan yang memerlukan kontrol lebih besar menggunakan AKS BYO CNI dan menginstal Cilium secara manual.

  • Dapatkah saya menggunakan CiliumNetworkPolicy sumber daya kustom alih-alih sumber daya Kubernetes NetworkPolicy ?

    CiliumNetworkPolicy sumber daya kustom tidak didukung secara resmi. Sebaiknya pelanggan menggunakan sumber daya Kubernetes NetworkPolicy untuk mengonfigurasi kebijakan jaringan.

  • Mengapa lalu lintas diblokir ketika NetworkPolicy memiliki yang ipBlock memungkinkan alamat IP?

    Batasan Azure CNI Powered by Cilium adalah bahwa NetworkPolicy's ipBlock tidak dapat memilih IP pod atau node.

    Misalnya, ini NetworkPolicy memiliki ipBlock yang memungkinkan semua egress untuk 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.
    

    Namun, ketika ini NetworkPolicy diterapkan, Cilium akan memblokir egress ke IP pod dan node meskipun IP berada dalam ipBlock CIDR.

    Sebagai solusinya, Anda dapat menambahkan namespaceSelector dan podSelector memilih pod. Contoh di bawah ini memilih semua pod di semua namespace:

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

    Catatan

    Saat ini tidak dimungkinkan untuk menentukan NetworkPolicy dengan ipBlock untuk mengizinkan lalu lintas ke IP node.

  • Apakah AKS mengonfigurasi batas CPU atau memori pada Cilium daemonset?

    Tidak, AKS tidak mengonfigurasi batas CPU atau memori pada Cilium daemonset karena Cilium adalah komponen sistem penting untuk jaringan pod dan penegakan kebijakan jaringan.

  • Apakah Azure CNI didukung oleh Cilium menggunakan Kube-Proxy?

    Tidak, kluster AKS yang dibuat dengan dataplane jaringan karena Cilium tidak menggunakan Kube-Proxy. Jika kluster AKS berada di Azure CNI Overlay atau Azure CNI dengan alokasi IP dinamis dan ditingkatkan ke kluster AKS yang menjalankan Azure CNI yang didukung oleh Cilium, beban kerja simpul baru dibuat tanpa kube-proxy. Beban kerja yang lebih lama juga dimigrasikan untuk berjalan tanpa kube-proxy sebagai bagian dari proses peningkatan ini.

Langkah berikutnya

Pelajari selengkapnya tentang jaringan di AKS di artikel berikut ini: