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 |
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 |
|
|
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.
Mulai Kubernetes 1.31, Trunk ENI diaktifkan secara default untuk ACK managed cluster baru.
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.
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
-
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
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Components and Add-ons.
-
Di halaman Add-ons, klik tab Network dan temukan komponen terway-eniip.
-
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.
-
Aktifkan terway-eniip.
-
Edit ConfigMap eni-config:
kubectl edit cm -nkube-system eni-config -
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 -
-
Mulai ulang pod Terway agar konfigurasi diterapkan:
kubectl delete pod -n kube-system -l app=terway-eniip
-
-
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.
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster Anda, lalu pilih di panel navigasi kiri.
-
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: DefaultDeskripsi 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
typeadalahFixed, 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.CatatanDengan kebijakan IP statis, pod yang dibuat ulang dibatasi pada zona yang sama dengan aslinya.
releaseStrategy
Hanya berlaku ketika
typeadalahFixed. 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
releaseStrategyadalahTTL. Menggunakan format Go time type dengan satuanhdanm, seperti2h45matau5m0s.selector
(Pemilih label. Pod yang sesuai menggunakan konfigurasi jaringan ini.)
podSelector
-
Mencocokkan label pod. Pod yang sesuai menggunakan konfigurasi jaringan ini.
-
Jika
podSelectordannamespaceSelectorkeduanya 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
podSelectordannamespaceSelectorkeduanya 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.
CatatanDengan 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.
CatatanDidukung di Terway v1.11.0 dan lebih baru.
securityGroupIDs
-
Mendukung beberapa ID security group (semua berlaku). Maksimum: 10.
CatatanTerway 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.
CatatanDidukung di Terway v1.11.0 dan lebih baru.
-
-
Klik Create.
PodNetworking hanya berlaku setelah
status-nya menjadiReady.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.
-
Buat namespace uji bernama example:
kubectl create ns example -
Tambahkan label
foo=barke namespace:kubectl label namespaces example foo=bar # Ganti example dengan nama namespace target Anda. -
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.
-
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 -
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.
-
Persiapkan migrasi.
-
Hentikan terway-controlplane:
kubectl scale deploy -nkube-system terway-controlplane --replicas 0 -
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 -
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
-
-
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
-
-
Instal terway-controlplane dari halaman Add-ons. Lihat Manage add-ons.
FAQ
Verifikasi Penggunaan PodNetworking
-
Setelah dibuat,
annotationspod mencakupk8s.aliyun.com/pod-networkinguntuk 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 -
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
-
Verifikasi status PodNetworking adalah
Ready. -
Verifikasi label pod secara unik cocok dengan pemilih PodNetworking.
-
Kebijakan IP statis hanya berlaku untuk pod yang dikelola oleh StatefulSet.
Dokumen Terkait
-
Untuk kebijakan firewall Pod yang lebih fleksibel, konfigurasikan beberapa grup keamanan untuk ENI.
-
Untuk masalah jaringan kontainer, lihat Container network FAQ.