全部产品
Search
文档中心

Container Service for Kubernetes:Menggunakan plugin CNI kustom di kluster ACK

更新时间:Nov 11, 2025

Plugin Container Network Interface (CNI) Terway dan Flannel yang disediakan oleh ACK secara default memenuhi sebagian besar kebutuhan jaringan kontainer. Namun, untuk skenario yang memerlukan fitur tertentu dari plugin CNI lainnya, ACK memungkinkan Anda menginstal plugin CNI kustom di dalam kluster menggunakan mode Bring Your Own Container Network Interface (BYOCNI). Topik ini menjelaskan cara membuat ACK managed cluster Pro tanpa plugin CNI dan cara menginstal plugin CNI kustom secara manual.

Pernyataan Penyangkalan

Container Network Interface (CNI) tidak hanya memengaruhi lalu lintas timur-barat dan utara-selatan di dalam kluster, tetapi juga kemampuan beberapa komponen inti. Misalnya, webhook bergantung pada API Server untuk mengakses Pod secara langsung.

Alibaba Cloud tidak menyediakan Service-Level Agreement (SLA) untuk kegagalan yang disebabkan oleh plugin CNI kustom di ACK managed cluster Pro. Anda bertanggung jawab atas pengelolaan kemampuan jaringan, pemecahan masalah, serta penyelesaian kegagalan terkait plugin CNI kustom tersebut. ACK tidak memberikan dukungan teknis untuk plugin CNI kustom.

Jika Anda memerlukan dukungan terkait CNI, gunakan plugin CNI yang disediakan oleh ACK atau gunakan plugin CNI komersial untuk mendapatkan dukungan teknis profesional dari pihak ketiga.

Perhatian

Jika plugin CNI kustom Anda menggunakan jaringan Overlay, API Server dari ACK managed cluster Pro tidak dapat mengakses webhook apa pun. Hal ini memengaruhi semua komponen yang menggunakan webhook, seperti metrics-server.

Langkah 1: Membuat kluster BYOCNI

  1. Anda hanya dapat membuat ACK managed cluster Pro tanpa plugin CNI (kluster BYOCNI) dengan memanggil operasi API CreateCluster atau dengan menggunakan Terraform untuk membuat ACK managed cluster. Anda harus menonaktifkan komponen kube-flannel-ds saat membuat kluster.

    Gunakan OpenAPI

    Gunakan Terraform

    "addons": [
        {
            "name": "kube-flannel-ds",
            "disabled": true
        }
    ]
    addons {
      name     = "kube-flannel-ds"
      disabled = true
    }
  2. (Opsional) Jika Anda menggunakan mode rute VPC, Anda harus mengonfigurasi komponen cloud-controller-manager. Untuk informasi selengkapnya, lihat konfigurasi cloud-controller-manager.

    Gunakan OpenAPI

    Gunakan Terraform

    "addons": [
        {
            "name": "cloud-controller-manager",
            "config": "{\"EnableCloudRoutes\":\"true\",\"BackendType\":\"NodePort\"}"
        }
    ]
    addons {
      name = "cloud-controller-manager"
      config = jsonencode({
        EnableCloudRoutes = "true"
        BackendType       = "NodePort"
      })
    }
  3. Setelah kluster dibuat, semua node memiliki status NotReady karena belum ada plugin CNI yang diinstal. Ini merupakan perilaku yang diharapkan. Status node akan berubah secara otomatis menjadi Ready setelah Anda menginstal plugin CNI.

    image

Langkah 2: Menginstal plugin CNI kustom

Penting

Langkah-langkah berikut menjelaskan cara menginstal Cilium dalam mode rute VPC dan hanya sebagai referensi. Operasi dapat berbeda tergantung pada plugin CNI yang Anda gunakan.

Sebelum melakukan operasi dalam contoh ini, pastikan Anda telah terhubung ke kluster menggunakan kubectl dan telah menginstal Antarmuka Baris Perintah (CLI) Helm. Untuk informasi selengkapnya, lihat Mendapatkan file kubeconfig kluster dan menggunakan kubectl untuk terhubung ke kluster dan Menginstal Helm.

Citra Cilium dalam contoh ini disimpan di repositori di luar Tiongkok. Pengambilan citra mungkin gagal. Anda dapat menggunakan salah satu solusi berikut:
Solusi 1: Berlangganan citra dari repositori di luar Tiongkok menggunakan Container Registry (ACR). Untuk informasi selengkapnya, lihat Berlangganan citra dari repositori di luar Tiongkok.
Solusi 2: Buat instans Global Accelerator (GA) dan gunakan layanan akselerasi jaringan global GA untuk langsung menarik gambar kontainer dari repositori di luar Tiongkok. Untuk informasi selengkapnya, lihat Menggunakan GA untuk mempercepat penarikan gambar kontainer lintas wilayah di kluster ACK.
  1. Jalankan perintah berikut untuk menambahkan repositori Helm Cilium.

    helm repo add cilium https://helm.cilium.io/
  2. Jalankan perintah berikut untuk menginstal Cilium. Sesuaikan parameter dalam perintah berdasarkan perencanaan jaringan kluster Anda.

    helm install --set securityContext.privileged=true \
        --set routingMode=native \
        --set ipam.mode=kubernetes \
        --set ipMasqAgent.enable=true \
        --set ipMasqAgent.config.nonMasqueradeCIDRs='{172.16.0.0/12,10.0.0.0/8 }' \
        --set ipv4NativeRoutingCIDR=172.16.0.0/12 \
        cilium cilium/cilium --version 1.17.4 \
      --namespace kube-system

    Penjelasan parameter:

    • ipv4NativeRoutingCIDR: 172.16.0.0/12 adalah blok CIDR Pod yang digunakan oleh kluster.

    • ipMasqAgent.config.nonMasqueradeCIDRs: 172.16.0.0/12 adalah blok CIDR Pod yang digunakan oleh kluster, dan 10.0.0.0/8 adalah blok CIDR VPC yang digunakan oleh kluster.

    Keluaran yang diharapkan:

    NAME: cilium
    LAST DEPLOYED: Fri Jul 18 16:34:50 2025
    NAMESPACE: kube-system
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    You have successfully installed Cilium with Hubble.
    
    Your release version is 1.17.4.
    
    For any further help, visit https://docs.cilium.io/en/v1.17/gettinghelp
  3. Setelah plugin CNI Cilium diinstal, status node berubah menjadi Ready.

    image

Konfigurasi tambahan

Saat membuat kluster BYOCNI, Anda dapat menentukan parameter tambahan untuk menyesuaikan perilaku kluster dan lebih memenuhi kebutuhan plugin CNI Anda.

Menetapkan blok PodCIDR ke sebuah node

Beberapa plugin CNI bergantung pada properti PodCIDR sebuah node untuk mengalokasikan alamat IP ke Pod. Anda dapat menentukan container_cidr dan node_cidr_mask saat membuat kluster untuk mengatur blok CIDR Pod kluster dan masker subnet untuk setiap node.

Jika Anda mengonfigurasi container_cidr dan node_cidr_mask, blok PodCIDR akan ditetapkan ke setiap node di kluster. Jika tidak, tidak ada blok PodCIDR yang ditetapkan ke node. Untuk informasi selengkapnya tentang cara mengonfigurasi parameter ini, lihat CreateCluster.

Konfigurasi cloud-controller-manager

cloud-controller-manager ACK menyediakan fitur opsional untuk kluster BYOCNI. Anda dapat mengaktifkan atau menonaktifkan fitur-fitur ini dengan mengonfigurasi parameter add-on cloud-controller-manager saat membuat kluster.

Parameter

Nilai default

Wajib

Deskripsi

EnableCloudRoutes

false

Tidak

Setelah Anda mengaktifkan PodCIDR pada node, jika Anda menggunakan tabel rute VPC untuk mengaktifkan komunikasi antar Pod, Anda dapat mengaktifkan fitur enableCloudRoutes pada cloud-controller-manager. cloud-controller-manager secara otomatis menambahkan tabel rute untuk blok PodCIDR pada setiap node. Alamat IP yang dialokasikan dari blok PodCIDR dapat diakses secara langsung di dalam VPC.

BackendType

NodePort

Tidak

cloud-controller-manager bertanggung jawab untuk memproses Layanan tipe LoadBalancer, termasuk membuat instans CLB/NLB dan menambahkan Pod ke grup server backend instans CLB/NLB. Secara default, cloud-controller-manager menambahkan alamat IP node di kluster ke grup server backend layanan load balancing. Layanan load balancing meneruskan trafik ke node, lalu trafik diteruskan ke Pod berdasarkan konfigurasi penerusan Layanan pada node. Jika plugin BYOCNI Anda mengalokasikan alamat IP VPC ke Pod, Anda dapat langsung menambahkan alamat IP Pod ke grup server backend layanan load balancing tanpa perlu penerusan melalui node.

Nilai yang valid:

  • NodePort: Alamat IP node ditambahkan ke grup server backend layanan load balancing. Trafik diteruskan ke Pod melalui node.

  • Pod: Alamat IP Pod langsung ditambahkan ke grup server backend layanan load balancing. Alamat IP Pod harus berupa alamat IP VPC.

Contoh konfigurasi:

Gunakan OpenAPI

Gunakan Terraform

"addons": [
    {
        "name": "cloud-controller-manager",
        "config": "{\"EnableCloudRoutes\":\"true\",\"BackendType\":\"NodePort\"}"
    }
]
addons {
  name = "cloud-controller-manager"
  config = jsonencode({
    EnableCloudRoutes = "true"
    BackendType       = "NodePort"
  })
}