Gunakan Terway Trunk ENI untuk menetapkan IP statis per-pod, vSwitch khusus, atau security group guna manajemen traffic detail halus, isolasi traffic, konfigurasi kebijakan jaringan, dan manajemen IP.
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. 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 skala besar.
Aktifkan fitur Trunk ENI di kluster Anda terlebih dahulu. Add-on 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, menetapkan 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 hosting pod. Lihat Use the Terway network plugin.
Aturan security group tidak berlaku untuk traffic antar-pod dalam satu node atau traffic pod-ke-host. Gunakan NetworkPolicy untuk skenario tersebut.
Persyaratan versi Terway:
Untuk melakukan 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.
Kluster ACS hanya mendukung kemampuan penugasan vSwitch dan security group dari PodNetworking. Kemampuan lain seperti IP statis dan pemilihan elastic network interface (ENI) tidak didukung pada kluster ACS. Kemampuan ini disediakan oleh acs-virtual-node dan independen dari Terway. Jika definisi PodNetworking CRD tidak ada di kluster Anda, unduh dan instal di kluster tersebut.
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-nya 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, sehingga tidak diperlukan konfigurasi tambahan.
Setelah diaktifkan, Trunk ENI tidak dapat diubah.
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.tokenOutput yang diharapkan jika konfigurasi ada:
NAME TYPE DATA AGE
addon.network.token Opaque 1 69mJika 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 add-on terway-eniip.
Pada kartu terway-eniip, klik Upgrade untuk memperbarui add-on terway-eniip ke versi terbaru.
Jika tombol Upgrade tidak muncul, add-on sudah mutakhir. Lewati langkah ini.
Aktifkan terway-eniip.
Edit ConfigMap eni-config:
kubectl edit cm -nkube-system eni-configEdit 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.
PentingJangan ubah 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: ConfigMapMulai 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 add-on terway-controlplane.
Setelah instalasi, kartu terway-controlplane menampilkan status Installed.
Langkah 2: Buat resource kustom PodNetworking
Terway menggunakan resource kustom (CR) PodNetworking untuk menjelaskan konfigurasi jaringan. Buat beberapa objek PodNetworking untuk menentukan bidang jaringan 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 alamat 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 saat tidak lagi diperlukan.
releaseAfter
Waktu pelepasan tertunda. Hanya berlaku ketika
releaseStrategyadalahTTL. Menggunakan format Go time type dengan satuanhdanm, seperti2h45matau5m0s.selector
(Selektor 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 pod cocok dengan beberapa konfigurasi PodNetworking, sistem akan menerapkan salah satunya secara arbitrer.
namespaceSelector
Label untuk mencocokkan Namespace. Pod di Namespace yang cocok 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. ID vSwitch yang ditentukan memiliki hubungan OR; setiap pod hanya menggunakan satu vSwitch, dan 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 autoscaling diaktifkan, batasan zona vSwitchOptions dapat mencegah scale-out 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.
Setelah membuat resource PodNetworking, Terway menyinkronkan konfigurasi jaringan. PodNetworking hanya berlaku setelah statusnya menjadi Ready.
statusmenjadiReady.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 exampleTambahkan 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: 1GiTerapkan 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 0Konfigurasikan 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.yamlKonfigurasikan 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 1Jika 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: elasticTerway 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 sesuai dengan selektor PodNetworking.
Kebijakan IP statis hanya berlaku untuk pod yang dikelola oleh StatefulSet.
Dokumen terkait
Untuk kebijakan firewall pod fleksibel, konfigurasikan beberapa security group untuk ENI.
Untuk masalah jaringan kontainer, lihat Container network FAQ.