All Products
Search
Document Center

Container Service for Kubernetes:Konfigurasikan IP statis, vSwitch khusus, dan security group untuk sebuah pod

Last Updated:Jun 16, 2026

Gunakan Terway Trunk ENI untuk menetapkan IP statis per-pod, vSwitch khusus, atau security group guna isolasi jaringan.

Latar Belakang

ACK menyediakan solusi berbasis ENI untuk konfigurasi jaringan per-pod. Tersedia dua mode ENI:

  • Mode ENI eksklusif: Setiap pod di-bind ke ENI eksklusif dengan sumber daya jaringan khusus, memberikan isolasi kuat tetapi mengonsumsi lebih banyak kuota ENI. Mode ini cocok untuk aplikasi berkinerja tinggi yang sensitif terhadap isolasi.

    Untuk menggunakan mode ini, konfigurasikan Exclusive ENI network mode saat membuat kelompok node.

  • Mode Trunk ENI: Trunk ENI pada sebuah node secara dinamis menyediakan ENI tambahan untuk beberapa pod, meningkatkan kerapatan pod per-node dan cocok untuk konfigurasi jaringan kustom berskala besar.

    Aktifkan fitur Trunk ENI di kluster Anda terlebih dahulu. Komponen terway-controlplane kemudian akan diterapkan secara otomatis untuk mengelola siklus hidup konfigurasi jaringan kustom dan pengiriman kebijakan. Arsitektur:

    Mode Trunk ENI juga mendukung konfigurasi jaringan kustom, memungkinkan penugasan vSwitch khusus, security group, dan IP statis ke pod kritis sesuai permintaan, sementara pod lain menggunakan konfigurasi bersama bawaan.

Batasan

  • Jika Anda menggunakan ACK dedicated cluster, buka Quota Center untuk mengajukan kuota bernama Container network supports Terway ENI Trunking mode.

  • Setiap node memiliki batas jumlah pod yang dapat di-host. Lihat Use the Terway network plugin.

  • Aturan security group tidak berlaku untuk lalu lintas antar-pod dalam satu node atau lalu lintas pod-ke-host. Gunakan NetworkPolicy untuk skenario tersebut.

  • Persyaratan versi Terway:

    Untuk upgrade Terway, lihat Add-ons.
    • Mode Trunk ENI: Terway v1.3.0 atau lebih baru

    • Mode ENI eksklusif: Terway v1.11.0 atau lebih baru

  • Fitur ini hanya mendukung instance ECS.

Jalur Data

Diagram berikut menunjukkan perbedaan jalur data antara mode Trunk ENI dan mode ENI eksklusif.

Ruang Lingkup Konfigurasi Pod Khusus

Dengan konfigurasi pod khusus, setiap pod mendapatkan ENI eksklusif dengan vSwitch dan security group sendiri.

Dua mode konfigurasi node mendukung konfigurasi pod khusus:

Node yang mendukung Trunk ENI

Node yang mendukung elastic network interfaces (Lihat Configure exclusive ENI network mode for a node pool)

Jenis kluster yang didukung

ACK managed cluster

ACK managed cluster, ACK dedicated cluster

Kerapatan penerapan

Pod biasa berbagi satu ENI; pod tertentu menggunakan ENI eksklusif. Kerapatan keseluruhan tinggi.

Semua pod menggunakan ENI eksklusif. Kerapatan rendah.

Jenis node yang didukung

Node ECS

Node ECS

Tipe instans

Pilih tipe instans yang mendukung Trunk ENI dan mengembalikan EniTrunkSupported=true. Lihat DescribeInstanceTypes untuk tipe yang didukung.

Tipe instans yang mendukung ENI.

Kasus penggunaan

Layanan yang sensitif terhadap biaya dan konkurensi rendah.

Layanan berkinerja tinggi, latensi rendah, dan konkurensi tinggi.

Batasan resource Kubernetes

  • Pod di namespace kube-system tidak didukung.

  • Pod yang menggunakan HostNetwork tidak didukung.

  • Pod dengan label k8s.aliyun.com/ignore-by-terway=true tidak didukung.

Langkah 1: Aktifkan fitur Trunk ENI untuk kluster

Kluster Baru

Saat membuat kluster ACK, atur Network Plug-in ke Terway dan pilih Support for ENI Trunking di bagian Terway Mode (jenis plugin jaringan: terway-eniip). Lihat Create an ACK dedicated cluster (discontinued) dan Create an ACK managed cluster.

Catatan

Mulai Kubernetes 1.31, Trunk ENI diaktifkan secara default untuk ACK managed cluster baru.

Penting

Setelah diaktifkan, Trunk ENI tidak dapat dinonaktifkan.

Kluster yang Sudah Ada

Prasyarat

Kluster yang sudah ada harus menggunakan plugin jaringan terway-eniip. Lihat Use the Terway network plugin.

Catatan

Periksa plugin jaringan Anda di halaman Add-ons kluster.

Batasan

  • ACK managed cluster yang dibuat sebelum Juni 2020 mungkin tidak mendukung fitur ini. Ikuti Langkah 1 untuk memeriksa kompatibilitas.

  • Setelah diaktifkan, fitur IP statis, vSwitch khusus, dan security group tidak dapat dinonaktifkan.

Langkah 1: Periksa dukungan Trunk ENI

Penting
  • Untuk ACK dedicated cluster, Anda harus mengajukan izin untuk menggunakan instance ECS yang mendukung Trunk ENI. Untuk mengajukan, submit a ticket.

  • Untuk ACK managed cluster yang sudah ada atau ACK managed cluster yang dimigrasikan dari ACK dedicated cluster, periksa dukungan Trunk ENI dan modifikasi konfigurasi. Tidak diperlukan izin instance ECS.

Periksa konfigurasi token:

kubectl get secret -nkube-system addon.network.token

Output yang diharapkan jika konfigurasi ada:

NAME                  TYPE     DATA   AGE
addon.network.token   Opaque   1      69m

Jika konfigurasi token ada, lanjutkan ke langkah berikutnya. Jika tidak, buat kluster baru dengan dukungan Trunk ENI.

Langkah 2: Aktifkan terway-eniip dan Trunk ENI

  1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Components and Add-ons.

  3. Di halaman Add-ons, klik tab Network dan temukan komponen terway-eniip.

  4. Di kartu terway-eniip, klik Upgrade untuk memperbarui komponen terway-eniip ke versi terbaru.

    Jika tombol Upgrade tidak muncul, berarti komponen sudah mutakhir. Lewati langkah ini.

  5. Aktifkan terway-eniip.

    1. Edit ConfigMap eni-config:

      kubectl edit cm -nkube-system eni-config
    2. Edit parameter eni-config dalam file YAML:

      Parameter

      Nilai

      Deskripsi

      enable_eni_trunking

      true

      Mengaktifkan Trunk ENI. Tidak dapat dinonaktifkan setelah diaktifkan.

      credential_path

      /var/addon/token-config

      Untuk ACK managed cluster, tambahkan parameter ini jika belum ada.

      Penting
      • Jangan mengubah parameter lain.

      • Konten ConfigMap eni-config harus berupa JSON yang valid.

      Contoh konfigurasi:

      apiVersion: v1
      data:
        eni_conf: |
          {
            "min_pool_size": 0,
            "enable_eni_trunking": true,
            "credential_path": "/var/addon/token-config",
            ...
          }
      kind: ConfigMap
    3. Mulai ulang pod Terway agar konfigurasi diterapkan:

      kubectl delete pod -n kube-system -l app=terway-eniip
  6. Setelah mengonfigurasi parameter terway-eniip, buka tab Network di halaman Add-ons dan instal komponen terway-controlplane.

    Setelah instalasi, kartu terway-controlplane menampilkan status Installed.

Langkah 2: Buat resource kustom PodNetworking

Terway menggunakan resource kustom (CR) PodNetworking untuk mendeskripsikan konfigurasi jaringan. Buat beberapa objek PodNetworking untuk menentukan bidang jaringan yang berbeda.

  1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda, lalu pilih Workloads > Custom Resources di panel navigasi kiri.

  3. Di halaman Custom Resources, klik tab CRDs, lalu klik Create from YAML.

    Contoh YAML PodNetworking:

    apiVersion: network.alibabacloud.com/v1beta1
    kind: PodNetworking
    metadata:
      name: example
    spec:
      allocationType:
        type: Fixed # Kebijakan alokasi alamat IP pod. Nilai yang valid: Elastic dan Fixed.
        releaseStrategy: TTL # Parameter ini hanya berlaku ketika type diatur ke Fixed. Jika type diatur ke Elastic, Anda tidak perlu mengonfigurasi releaseStrategy dan releaseAfter.
        releaseAfter: "1h" # Parameter ini hanya berlaku ketika releaseStrategy diatur ke TTL.
      selector:
        podSelector:
          matchLabels:
            foo: bar
        namespaceSelector:
          matchLabels:
            foo: bar
      securityGroupIDs:
      - sg-bpxxxx
      vSwitchOptions:
      - vsw-bpxxxx
      eniOptions:
        eniType: Default

    Deskripsi parameter:

    Parameter

    Deskripsi

    allocationType

    (Kebijakan alokasi alamat IP pod)

    type

    Nilai yang valid:

    • Elastic: Sumber daya IP dilepas setelah pod dihapus.

    • Fixed: Kebijakan IP statis.

      Ketika type adalah Fixed, ini berlaku untuk pod dengan nama tetap (StatefulSets dan pod tanpa ownerReferences secara default). Untuk beban kerja kustom, konfigurasikan terway-controlplane di halaman Add-ons.

      Catatan

      Dengan kebijakan IP statis, pod yang dibuat ulang dibatasi pada zona yang sama dengan aslinya.

    releaseStrategy

    Hanya berlaku ketika type adalah Fixed. Nilai yang valid:

    • TTL: Pelepasan tertunda. IP dilepas setelah waktu tertentu pasca-penghapusan pod. Minimum: 5 menit.

    • Never: IP tidak pernah dilepas. Hapus resource PodENI secara manual jika tidak lagi diperlukan.

    releaseAfter

    Waktu pelepasan tertunda. Hanya berlaku ketika releaseStrategy adalah TTL. Menggunakan format Go time type dengan satuan h dan m, seperti 2h45m atau 5m0s.

    selector

    (Pemilih label. Pod yang sesuai menggunakan konfigurasi jaringan ini.)

    podSelector

    • Mencocokkan label pod. Pod yang sesuai menggunakan konfigurasi jaringan ini.

    • Jika podSelector dan namespaceSelector keduanya dikonfigurasi, pod yang memenuhi semua aturan menggunakan konfigurasi ini.

    • Pastikan pencocokan unik. Jika sebuah pod cocok dengan beberapa konfigurasi PodNetworking, sistem akan menerapkan salah satunya secara arbitrer.

    namespaceSelector

    • Label untuk mencocokkan Namespace. Pod di Namespace yang sesuai menggunakan konfigurasi ini.

    • Jika podSelector dan namespaceSelector keduanya dikonfigurasi, pod yang memenuhi semua aturan menggunakan konfigurasi ini.

    • Pastikan pencocokan unik. Pencocokan ganda menghasilkan pemilihan arbitrer.

    vSwitchOptions

    -

    • vSwitch untuk pod. Jika beberapa ID disediakan, Terway memilih salah satu yang memenuhi kondisi.

    • Pod dibatasi pada zona yang sama dengan vSwitch yang ditentukan.

    • Zona vSwitch harus sesuai dengan zona node target, dan alamat IP yang tersedia harus mencukupi. Jika tidak, pembuatan pod gagal.

    Catatan

    Dengan penskalaan otomatis diaktifkan, batasan zona vSwitchOptions dapat mencegah skala keluar kelompok node. Lihat Auto scaling FAQ.

    vSwitchSelectOptions

    (Mengonfigurasi kebijakan pemilihan vSwitch)

    vSwitchSelectionPolicy

    Nilai yang valid:

    • ordered (default): Memilih sesuai urutan yang dimasukkan.

    • most: Mengutamakan vSwitch dengan IP tersedia terbanyak.

    • random: Memilih vSwitch secara acak.

    Catatan

    Didukung di Terway v1.11.0 dan lebih baru.

    securityGroupIDs

    -

    Mendukung beberapa ID security group (semua berlaku). Maksimum: 10.

    Catatan

    Terway v1.13.6 dan lebih baru mendukung hingga 10 security group.

    eniOptions

    (Mengonfigurasi jenis ENI yang digunakan oleh pod)

    eniType

    Nilai yang valid:

    • Default: Trunk ENI untuk kluster shared-ENI, ENI eksklusif untuk kluster exclusive-ENI.

    • ENI: Menggunakan ENI eksklusif.

    • Trunk: Menggunakan Trunk ENI.

    Catatan

    Didukung di Terway v1.11.0 dan lebih baru.

  4. Klik Create.

    PodNetworking hanya berlaku setelah status-nya menjadi Ready.

    Periksa apakah status resource ready:

    kubectl describe PodNetworking example # Ganti example dengan nama resource kustom Anda.

(Opsional) Langkah 3: Tambahkan label yang sesuai ke namespace

Untuk menerapkan aturan PodNetworking melalui pencocokan label, tambahkan label yang sesuai ke namespace target.

  1. Buat namespace uji bernama example:

    kubectl create ns example
  2. Tambahkan label foo=bar ke namespace:

    kubectl label namespaces example foo=bar  # Ganti example dengan nama namespace target Anda.
  3. Lihat label namespace:

    kubectl get namespace example --show-labels  # Ganti example dengan nama namespace target Anda.

    Output yang diharapkan:

     NAME      STATUS   AGE   LABELS
    example   Active   24s   foo=bar,kubernetes.io/metadata.name=example

(Opsional) Langkah 4: Buat pod aplikasi

Saat pod dibuat, sistem mencocokkan label-nya dengan resource PodNetworking. Pod yang cocok menerima ENI sesuai konfigurasi yang sesuai; pod yang tidak cocok menggunakan ENI default.

Terway membuat resource kustom PodENI untuk melacak sumber daya jaringan setiap pod yang cocok. Lihat Labels and Selectors.

  1. Buat file bernama my-nginx.yaml dengan konten YAML berikut:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: my-nginx    # Nama aplikasi contoh.
      namespace: example   # Tentukan namespace sebagai example.
      labels:
        app: nginx
    spec:
      serviceName: "nginx-service"  
      replicas: 1    
      selector:
        matchLabels:
          app: nginx 
      template:
        metadata:
          labels:
            app: nginx
            foo: bar  # Tambahkan label foo:bar ke pod.
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80  
    
    #  Jika StatefulSet memerlukan penyimpanan persisten, Anda harus mendefinisikan volumeClaimTemplates.
    #  Contoh:
    #  volumeClaimTemplates:
    #  - metadata:
    #      name: nginx-storage
    #    spec:
    #      accessModes: ["ReadWriteOnce"]
    #      storageClassName: "my-storage-class"
    #      resources:
    #        requests:
    #          storage: 1Gi
  2. Terapkan aplikasi contoh my-nginx. Setelah penerapan, lihat Verify PodNetworking usage untuk memverifikasi konfigurasi jaringan.

    kubectl apply -f my-nginx.yaml

Hentikan terway-controlplane untuk migrasi

ACK dedicated cluster dengan konfigurasi pod kustom tidak dapat langsung dimigrasikan ke ACK managed Pro cluster. Hentikan terway-controlplane sebelum migrasi dan aktifkan kembali setelahnya.

  1. Persiapkan migrasi.

    1. Hentikan terway-controlplane:

      kubectl scale deploy -nkube-system terway-controlplane --replicas 0
    2. Konfigurasikan webhook:

      # Cadangkan konfigurasi webhook.
      kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.mutatingwebhookconfigurations.yaml
      kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.validatingwebhookconfigurations.yaml
      # Bersihkan konfigurasi webhook.
      kubectl delete -f terway-controlplane.mutatingwebhookconfigurations.yaml
      kubectl delete -f terway-controlplane.validatingwebhookconfigurations.yaml
    3. Konfigurasikan layanan:

      # Cadangkan konfigurasi layanan asli.
      kubectl get service -nkube-system terway-controlplane -oyaml > terway-controlplane.service.yaml
      # Bersihkan konfigurasi layanan asli.
      kubectl delete -f terway-controlplane.service.yaml
  2. Setelah migrasi, periksa hasilnya.

    • Jika migrasi gagal, pulihkan webhook dan terway-controlplane:

      # Pulihkan konfigurasi layanan.
      kubectl apply -f terway-controlplane.service.yaml
      # Pulihkan konfigurasi webhook.
      kubectl apply -f terway-controlplane.mutatingwebhookconfigurations.yaml
      kubectl apply -f terway-controlplane.validatingwebhookconfigurations.yaml
      # Pulihkan terway-controlplane.
      kubectl scale deploy -nkube-system terway-controlplane --replicas 1
    • Jika migrasi berhasil, bersihkan resource:

      kubectl delete deploy -nkube-system terway-controlplane
  3. Instal terway-controlplane dari halaman Add-ons. Lihat Manage add-ons.

FAQ

Verifikasi Penggunaan PodNetworking

  1. Setelah dibuat, annotations pod mencakup k8s.aliyun.com/pod-networking untuk menunjukkan penggunaan PodNetworking.

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.aliyun.com/pod-eni: "true"
        k8s.aliyun.com/pod-networking: podnetworking
      labels:
        app: example
        pod-ip: elastic
  2. Terway membuat resource PodENI (nama dan namespace sama dengan pod) untuk mencatat konfigurasi jaringannya.

    kubectl get podenis.network.alibabacloud.com <my-nginx-0> -n <example> -o yaml # Ganti <my-nginx-0> dengan nama pod dan <example> dengan namespace pod.

    Output yang diharapkan menunjukkan PodNetworking sedang digunakan:

    apiVersion: network.alibabacloud.com/v1beta1
    kind: PodENI
    metadata:
      finalizers:
      - pod-eni
      generation: 1
      name: <my-nginx-0>
      namespace: default
    spec:
      allocations:
      - allocationType:
          type: Elastic
        eni:
          id: eni-bp1xxxx
          mac: 00:16:xx:xx:xx:xx
          securityGroupIDs:
          - sg-bp1xxxx
          vSwitchID: vsw-bp1xxxx
          zone: cn-hangzhou-h
        ipv4: 192.168.x.x
        ipv4CIDR: 192.168.x.x/19
        ipv6: 2408:x:x:x:x:x:x:x
        ipv6CIDR: 2408:x:x:x::/64
      zone: cn-hangzhou-h
    status:
      eniInfos:
        eni-bp1xxxx:
          id: eni-bp1xxxx
          status: Bind
          vid: 1001
      instanceID: i-bp1xxxx
      phase: Bind
      podLastSeen: "2021-xx-xxT00:00:00Z"
      trunkENIID: eni-bp1xxxx

Pod tidak menggunakan konfigurasi PodNetworking

  1. Verifikasi status PodNetworking adalah Ready.

  2. Verifikasi label pod secara unik cocok dengan pemilih PodNetworking.

  3. Kebijakan IP statis hanya berlaku untuk pod yang dikelola oleh StatefulSet.

Dokumen Terkait