All Products
Search
Document Center

Container Service for Kubernetes:Konfigurasikan alamat IP tetap, virtual switch independen, dan grup keamanan untuk sebuah pod

Last Updated:Mar 26, 2026

Secara default, semua pod pada sebuah node berbagi grup keamanan dan kolam alamat IP node tersebut. Hal ini menyebabkan isolasi jaringan detail halus tidak dapat diterapkan di tingkat pod—pod mana pun pada node tersebut dapat mengakses sumber daya yang sama. Fitur elastic network interface (ENI) Terway Trunk mengatasi masalah ini dengan memberikan setiap pod ENI khususnya sendiri, vSwitch, dan grup keamanan, tanpa mengurangi kerapatan penempatan pod lain pada node yang sama.

Langkah-langkah berikut menjelaskan cara mengaktifkan fitur Terway Trunk ENI dan mengonfigurasi isolasi jaringan per-pod menggunakan definisi sumber daya kustom (CRD) PodNetworking.

Cara kerja

Setelah Anda mengaktifkan fitur Trunk ENI, komponen terway-controlplane diterapkan di kluster. Saat sebuah pod dibuat, Terway mencocokkan label-nya dengan CRD PodNetworking. Jika ditemukan kecocokan, Terway mengalokasikan ENI khusus ke pod tersebut dari vSwitch dan grup keamanan yang ditentukan dalam PodNetworking yang cocok. Pod yang tidak memiliki PodNetworking yang cocok tetap menggunakan alamat IP dari ENI bersama.

image

Mode konfigurasi node

Dua mode node mendukung isolasi jaringan per-pod. Pilih berdasarkan tipe kluster dan kebutuhan kerapatan Anda.

Node yang mendukung Trunk ENINode yang mendukung ENI
Tipe kluster yang didukungKluster ACK yang dikelolaKluster ACK yang dikelola dan cluster khusus ACK
Kerapatan penerapanPod biasa menggunakan ENI bersama; pod tertentu menggunakan ENI eksklusif — kerapatan keseluruhan lebih tinggiSemua pod menggunakan ENI eksklusif — kerapatan lebih rendah
Tipe node yang didukungNode ECSNode ECS
Tipe instansInstans dengan EniTrunkSupported=true (lihat DescribeInstanceTypes)Instans yang mendukung ENI

Batasan

  • Cluster khusus ACK: Ajukan kuota Container network supports Terway ENI Trunking mode di Konsol Quota Center sebelum melanjutkan.

  • Jumlah pod per node: Jumlah pod per node terbatas. Untuk detailnya, lihat Bekerja dengan Terway.

  • Trafik antar-node yang sama: Aturan grup keamanan pod tidak berlaku untuk trafik antar-pod pada node yang sama atau antara pod dan node host-nya. Untuk menerapkan isolasi dalam skenario ini, konfigurasikan kebijakan jaringan.

  • Kluster ACK yang dikelola yang dibuat sebelum Juni 2020: Fitur ini mungkin tidak didukung. Ikuti Langkah 1: Periksa apakah kluster mendukung fitur Terway Trunk ENI untuk memverifikasi.

  • Tidak dapat dikembalikan: Alamat IP statis, vSwitch, dan grup keamanan tidak dapat dinonaktifkan setelah diaktifkan.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Memiliki kluster ACK yang dikelola atau cluster khusus ACK dengan plug-in jaringan terway-eniip yang telah diinstal

  • (Hanya untuk cluster khusus ACK) Mengajukan tiket untuk mengajukan izin instans ECS Trunk ENI

  • Memiliki node dengan tipe instans yang mendukung Trunk ENI (EniTrunkSupported=true), jika Anda berencana menggunakan mode node Trunk ENI

  • Memiliki cukup alamat IP yang tersedia di vSwitch yang akan Anda tetapkan ke pod

Langkah 1: Aktifkan fitur Terway Trunk ENI

Aktifkan Trunk ENI di kluster baru

Saat membuat kluster ACK, atur Network Plug-in ke Terway dan atur Terway Mode ke Support for ENI Trunking. Tipe plug-in jaringan dalam mode ini adalah terway-eniip. Untuk petunjuknya, lihat Buat cluster khusus ACK (tidak tersedia lagi) dan Buat kluster ACK yang dikelola.

Fitur Trunk ENI diaktifkan secara default untuk kluster ACK yang dikelola yang baru dibuat dan menjalankan Kubernetes 1.31 atau versi lebih baru.
Penting

Fitur Trunk ENI tidak dapat dinonaktifkan setelah diaktifkan.

Aktifkan Trunk ENI di kluster yang sudah ada

Langkah 1: Periksa apakah kluster mendukung fitur Terway Trunk ENI

Penting
  • Lewati langkah ini jika Anda menggunakan cluster khusus ACK. Sebagai gantinya, ajukan tiket untuk mengajukan izin instans ECS Trunk ENI dan lanjutkan ke Langkah 2.

  • Untuk kluster ACK yang dikelola yang sudah ada atau kluster ACK yang dikelola yang ditingkatkan dari cluster khusus ACK, Anda perlu memeriksa apakah kluster mendukung fitur Terway Trunk ENI dan mengubah konfigurasinya. Anda tidak perlu mengajukan izin untuk menggunakan instans ECS yang mendukung Trunk ENI.

Jalankan perintah berikut untuk memeriksa konfigurasi token:

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

Output yang diharapkan:

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

Jika token tersebut ada, lanjutkan ke Langkah 2. Jika tidak ada, kluster tersebut tidak mendukung fitur Trunk ENI. Buat kluster baru dengan Trunk ENI yang diaktifkan sebagai gantinya.

Langkah 2: Perbarui dan konfigurasikan terway-eniip

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

  2. Klik nama kluster. Di panel navigasi sebelah kiri, pilih Operations > Add-ons.

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

  4. Di kartu terway-eniip, klik Upgrade untuk memperbarui ke versi terbaru. Jika tombol Upgrade tidak ditampilkan, berarti versi terbaru sudah terinstal.

  5. Edit ConfigMap eni-config untuk mengaktifkan Trunk ENI:

    ParameterNilaiDeskripsi
    enable_eni_trunkingtrueMengaktifkan fitur Trunk ENI. Tidak dapat dinonaktifkan setelah diaktifkan.
    credential_path/var/addon/token-configHanya diperlukan untuk kluster ACK yang dikelola. Tambahkan parameter ini secara manual jika belum ada.
    kubectl edit cm -nkube-system eni-config

    Atur parameter berikut di ConfigMap. Jangan ubah parameter lainnya. Konten ConfigMap harus dalam format JSON. Contoh ConfigMap:

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

    kubectl delete pod -n kube-system -l app=terway-eniip
  7. Di halaman Add-ons, klik tab Networking dan instal terway-controlplane. Setelah instalasi, Installed ditampilkan di kartu terway-controlplane.

Langkah 2: Buat PodNetworking

PodNetworking adalah CRD Terway yang menentukan konfigurasi jaringan untuk sekumpulan pod. Buat satu PodNetworking untuk setiap bidang jaringan yang ingin Anda konfigurasi.

  1. Masuk ke Konsol ACK dan klik Clusters.

  2. Klik nama kluster. Di panel navigasi sebelah kiri, pilih Workloads > Custom Resources.

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

  4. Tempel templat berikut dan sesuaikan parameternya untuk lingkungan Anda:

    ParameterDeskripsi
    allocationType.typeElastic: IP dilepas saat pod dihapus. Fixed: pod mempertahankan alamat IP-nya meskipun direstart. Mode Fixed hanya berlaku untuk pod dengan nama tetap (StatefulSet dan pod tanpa ownerReferences secara default). Jika Anda perlu mengonfigurasi beban kerja kustom, konfigurasikan terway-controlplane di manajemen komponen. Saat menggunakan mode Fixed, pod selalu dibuat ulang di zona yang sama.
    releaseStrategyHanya berlaku ketika type adalah Fixed. TTL: lepaskan IP setelah penundaan yang ditentukan di releaseAfter (minimal 5 menit). Never: IP tidak pernah dilepaskan secara otomatis; hapus PodENI secara manual untuk membebaskan alamat tersebut.
    releaseAfterHanya berlaku ketika releaseStrategy adalah TTL. Menggunakan format durasi Go. Contoh: 2h45m, 5m0s.
    podSelectorMencocokkan label pod. Jika podSelector dan namespaceSelector keduanya diatur, pod harus cocok dengan keduanya untuk menggunakan PodNetworking ini. Setiap pod hanya boleh cocok dengan paling banyak satu PodNetworking—jika pod cocok dengan beberapa, konfigurasi jaringan yang digunakan tidak terdefinisi.
    namespaceSelectorMencocokkan label namespace. Aturan pencocokan sama seperti podSelector.
    vSwitchOptionsDaftar vSwitch. Terway memilih satu vSwitch per pod. Pod hanya dapat dijadwalkan ke node di zona yang sama dengan vSwitch yang tercantum. Pastikan vSwitch memiliki cukup alamat IP yang tersedia—pembuatan pod gagal jika tidak ada IP yang tersedia. Jika penskalaan otomatis node diaktifkan, batasan zona ini dapat mencegah kelompok node melakukan penskalaan keluar.
    vSwitchSelectOptions.vSwitchSelectionPolicyDidukung di Terway v1.11.0 dan versi lebih baru. ordered (default): gunakan vSwitch sesuai urutan daftar. most: gunakan vSwitch dengan IP tersedia paling banyak. random: pilih secara acak.
    securityGroupIDsSatu hingga lima ID grup keamanan. Semua grup keamanan yang ditentukan berlaku secara bersamaan.
    eniOptions.eniTypeDidukung di Terway v1.11.0 dan versi lebih baru. Default (default): mode Trunk ENI di kluster ENI bersama; mode ENI eksklusif di kluster ENI eksklusif. ENI: mode ENI eksklusif. Trunk: mode Trunk ENI.
    apiVersion: network.alibabacloud.com/v1beta1
    kind: PodNetworking
    metadata:
      name: example
    spec:
      allocationType:
        type: Fixed          # Kebijakan alokasi IP: Elastic atau Fixed
        releaseStrategy: TTL # Hanya untuk kebijakan Fixed: TTL atau Never
        releaseAfter: "1h"   # Hanya untuk strategi TTL: penundaan sebelum melepas IP
      selector:
        podSelector:
          matchLabels:
            foo: bar          # Pod dengan label ini menggunakan PodNetworking ini
        namespaceSelector:
          matchLabels:
            foo: bar          # Namespace juga harus cocok jika namespaceSelector diatur
      securityGroupIDs:
      - sg-bpxxxx             # Maksimal 5 ID grup keamanan; semuanya berlaku secara bersamaan
      vSwitchOptions:
      - vsw-bpxxxx            # Satu atau lebih vSwitch; Terway memilih satu per pod
    status:
      status: Ready

    Tabel berikut menjelaskan parameter-parameter tersebut.

  5. Klik Create.

Verifikasi bahwa PodNetworking siap digunakan:

kubectl describe PodNetworking example  # Ganti example dengan nama PodNetworking Anda

Tunggu hingga bidang status menampilkan Ready. PodNetworking tidak berlaku untuk pod sampai mencapai status Ready.

(Opsional) Langkah 3: Tambahkan label ke namespace

Jika PodNetworking Anda menggunakan namespaceSelector, tambahkan label yang sesuai ke namespace target.

  1. Buat namespace uji coba:

    kubectl create ns example
  2. Tambahkan label yang sesuai dengan namespaceSelector Anda:

    kubectl label namespaces example foo=bar  # Ganti example dengan nama namespace Anda
  3. Verifikasi bahwa label telah diterapkan:

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

    Output yang diharapkan:

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

(Opsional) Langkah 4: Terapkan pod dan verifikasi konfigurasi jaringan

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

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: my-nginx        # Nama aplikasi
      namespace: example    # Namespace target
      labels:
        app: nginx
    spec:
      serviceName: "nginx-service"
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
            foo: bar        # Harus sesuai dengan podSelector di PodNetworking Anda
        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, tambahkan volumeClaimTemplates:
    # volumeClaimTemplates:
    # - metadata:
    #     name: nginx-storage
    #   spec:
    #     accessModes: ["ReadWriteOnce"]
    #     storageClassName: "my-storage-class"
    #     resources:
    #       requests:
    #         storage: 1Gi
  2. Terapkan aplikasi:

    kubectl apply -f my-nginx.yaml
  3. Verifikasi bahwa pod menggunakan konfigurasi PodNetworking. Jika pod cocok dengan PodNetworking, anotasi k8s.aliyun.com/pod-networking ditambahkan ke pod:

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.aliyun.com/pod-eni: "true"
        k8s.aliyun.com/pod-networking: podnetworking
      labels:
        app: example
        pod-ip: elastic
  4. Periksa PodENI yang secara otomatis dibuat oleh Terway untuk pod tersebut:

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

    Output tersebut mengonfirmasi ENI, vSwitch, grup keamanan, dan alamat IP yang dialokasikan ke pod:

    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

Hentikan terway-controlplane sebelum migrasi kluster

Jika Anda telah mengaktifkan konfigurasi kustom pod pada cluster khusus ACK, Anda tidak dapat langsung memigrasikan beban kerja ke kluster ACK managed Pro. Hentikan terway-controlplane sebelum migrasi dan aktifkan kembali setelahnya.

Sebelum migrasi:

  1. Hentikan terway-controlplane:

    kubectl scale deploy -nkube-system terway-controlplane --replicas 0
  2. Cadangkan konfigurasi webhook, lalu hapus:

    # Cadangkan
    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
    # Hapus
    kubectl delete -f terway-controlplane.mutatingwebhookconfigurations.yaml
    kubectl delete -f terway-controlplane.validatingwebhookconfigurations.yaml

Setelah migrasi:

Untuk petunjuk migrasi, lihat Migrasi panas dari cluster khusus ACK ke kluster ACK managed Pro.
  • Jika migrasi gagal: Pulihkan webhook dan terway-controlplane:

    kubectl apply -f terway-controlplane.mutatingwebhookconfigurations.yaml
    kubectl apply -f terway-controlplane.validatingwebhookconfigurations.yaml
    kubectl scale deploy -nkube-system terway-controlplane --replicas 1
  • Jika migrasi berhasil: Hapus terway-controlplane dan instal ulang dari halaman Add-ons:

    kubectl delete deploy -nkube-system terway-controlplane

    Untuk petunjuk instalasi ulang, lihat Kelola komponen sistem.

FAQ

Mengapa pod tidak menggunakan PodNetworking yang diharapkan?

Periksa hal berikut secara berurutan:

  1. status PodNetworking harus Ready. Jalankan kubectl describe PodNetworking <name> untuk memeriksa.

  2. Label pod harus cocok dengan tepat satu PodNetworking. Jika cocok dengan beberapa PodNetworking, konfigurasi jaringan yang digunakan tidak terdefinisi.

  3. Jika PodNetworking menggunakan kebijakan alokasi Fixed, kebijakan ini hanya berlaku untuk StatefulSet dan pod tanpa ownerReferences. Pod yang dikelola oleh Deployment atau pengontrol lain tidak dicocokkan.

Langkah selanjutnya