Untuk mengelola dan mengisolasi lalu lintas pengguna, mengonfigurasi kebijakan jaringan, serta mengelola alamat IP secara lebih rinci, Anda dapat mengaktifkan fitur Trunk elastic network interface (ENI) Terway pada klaster Container Service for Kubernetes (ACK). Fitur ini memungkinkan Anda menentukan alamat IP statis, vSwitch terpisah, dan grup keamanan terpisah untuk setiap pod.
Informasi latar belakang
Trunk elastic network interfaces (ENIs) adalah antarmuka jaringan virtual baru yang mendukung semua fitur ENI standar. Selain itu, ketika jumlah maksimum ENI yang dapat digunakan telah tercapai, Anda dapat mengaitkan ENI tambahan dengan Trunk ENI. Setiap ENI tersebut dapat dialokasikan secara terpisah ke sebuah pod.
Setelah mengaktifkan fitur Trunk ENI pada klaster, Anda dapat menyesuaikan konfigurasi pod tertentu untuk menggunakan ENI tambahan yang terkait dengan Trunk ENI dalam mode eksklusif, sementara pod lainnya tetap berbagi ENI asli. Konfigurasi pod kustom bersifat opsional. Secara default, semua pod menggunakan alamat IP yang dialokasikan dari ENI bersama. Untuk memungkinkan pod menggunakan konfigurasi kustom, Anda harus membuat klaim untuk mengaktifkan fitur konfigurasi pod kustom.
Setelah mengaktifkan konfigurasi pod kustom, komponen terway-controlplane diterapkan di klaster. Gambar berikut menunjukkan cara kerja komponen tersebut.
Batasan
Jika Anda menggunakan ACK dedicated cluster, buka Konsol Quota Center dan ajukan permohonan untuk
Container network supports Terway ENI Trunking mode.Jumlah pod yang dapat dibuat pada sebuah node terbatas. Untuk informasi lebih lanjut, lihat Bekerja dengan Terway.
Aturan grup keamanan pod tidak berlaku untuk lalu lintas antar pod pada node yang sama atau lalu lintas antara pod dan node tempat pod tersebut dibuat. Jika Anda ingin menerapkan aturan grup keamanan pod dalam skenario ini, Anda dapat mengonfigurasi kebijakan jaringan.
Ruang lingkup konfigurasi pod terpisah
Konfigurasi pod terpisah dilakukan dengan membuat ENI khusus untuk setiap pod serta mengonfigurasi vSwitch eksklusif dan grup keamanan untuk ENI tersebut.
Mode konfigurasi node berikut digunakan untuk konfigurasi pod terpisah:
Node yang mendukung Trunk ENIs | Node yang mendukung ENIs (Untuk informasi lebih lanjut, lihat Konfigurasikan mode ENI eksklusif untuk pool node) | |
Jenis klaster yang didukung | ACK managed clusters | ACK managed clusters dan ACK dedicated clusters |
Kepadatan penyebaran | Pod reguler menggunakan ENIs bersama. Pod yang ditentukan menggunakan ENIs eksklusif, yang menghasilkan kepadatan keseluruhan lebih tinggi. | Semua pod pada node hanya dapat menggunakan ENIs eksklusif, yang mengarah pada kepadatan lebih rendah. |
Jenis node yang didukung | Node ECS | Node ECS |
Tipe instance | Anda perlu memilih instance yang mendukung Trunk ENIs dan memiliki parameter respons | Instance yang mendukung ENIs. |
Langkah 1: Aktifkan fitur Terway Trunk ENI untuk sebuah klaster
Jika Anda menggunakan ACK dedicated cluster, Anda harus submit a ticket untuk mengajukan izin menggunakan instance ECS yang mendukung Trunk ENI. Untuk ACK managed cluster, Anda tidak perlu mengajukan izin untuk menggunakan instance ECS yang mendukung Trunk ENI.
Aktifkan fitur Terway Trunk ENI di klaster baru
Buat klaster ACK, atur Network Plug-in menjadi Terway, dan atur Terway Mode menjadi Support for ENI Trunking. Dalam mode ini, tipe plug-in jaringan adalah terway-eniip. Untuk informasi lebih lanjut, lihat Buat Klaster ACK Dedicated (tidak dilanjutkan) dan Buat Klaster ACK Managed.
Secara default, fitur Trunk ENI diaktifkan untuk ACK managed cluster yang menjalankan Kubernetes 1.31 atau versi lebih baru.
Fitur Trunk ENI tidak dapat dinonaktifkan setelah diaktifkan untuk klaster baru.
Aktifkan fitur Trunk ENI di klaster yang sudah ada
Prasyarat
Tipe plug-in jaringan yang digunakan oleh klaster adalah terway-eniip. Untuk informasi lebih lanjut tentang plug-in jaringan Terway, lihat Bekerja dengan Terway.
Anda dapat memeriksa plug-in jaringan yang telah diinstal di halaman Add-ons klaster.
Batasan
Fitur ini mungkin tidak didukung oleh ACK managed cluster yang dibuat sebelum Juni 2020. Lakukan Langkah 1 untuk memeriksa apakah klaster Anda mendukung fitur ini.
Alamat IP statis, vSwitch, dan grup keamanan tidak dapat dinonaktifkan setelah diaktifkan.
Langkah 1: Periksa apakah klaster mendukung fitur Terway Trunk ENI
Lewati langkah ini jika Anda menggunakan ACK dedicated cluster. Anda perlu mengajukan izin untuk menggunakan Trunk ENI. Anda dapat submit a ticket untuk mengajukan izin menggunakan instance ECS yang mendukung Trunk ENI.
Untuk ACK managed cluster yang sudah ada atau ACK managed cluster yang ditingkatkan dari ACK dedicated cluster, Anda perlu memeriksa apakah klaster mendukung fitur Terway Trunk ENI dan memodifikasi konfigurasi. Anda tidak perlu mengajukan izin untuk menggunakan instance ECS yang mendukung Trunk ENI.
Jalankan perintah berikut untuk memeriksa konfigurasi token:
kubectl get secret -nkube-system addon.network.tokenOutput yang Diharapkan:
NAME TYPE DATA AGE
addon.network.token Opaque 1 69mJika konfigurasi token ada, lanjutkan ke langkah berikutnya. Jika konfigurasi token tidak ada, fitur Terway Trunk ENI tidak didukung oleh klaster. Dalam hal ini, Anda dapat membuat klaster baru dengan fitur Terway Trunk ENI diaktifkan.
Langkah 2: Aktifkan terway-eniip dan aktifkan fitur Terway Trunk ENI untuk klaster
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan klaster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.
Di halaman Add-ons, klik tab Networking dan temukan komponen terway-eniip.
Di kartu terway-eniip, klik Upgrade untuk memperbarui terway-eniip ke versi terbaru.
Jika tombol Upgrade tidak ditampilkan, versi terbaru terway-eniip telah terinstal. Anda dapat melewati langkah ini.
Aktifkan terway-eniip.
Jalankan perintah berikut untuk memodifikasi ConfigMap eni-config:
kubectl edit cm -nkube-system eni-configModifikasi parameter dalam ConfigMap eni-config.
Parameter
Contoh
Deskripsi
enable_eni_trunking
true
Aktifkan fitur Trunk ENI. Fitur ini tidak dapat dinonaktifkan setelah diaktifkan.
credential_path
/var/addon/token-config
Jika Anda menggunakan ACK managed cluster, ConfigMap tidak berisi parameter ini. Anda perlu menambahkan parameter ini secara manual.
PentingJangan modifikasi parameter lainnya.
Isi dari ConfigMap eni-config harus dalam format JSON.
Contoh:
apiVersion: v1 data: eni_conf: | { "min_pool_size": 0, "enable_eni_trunking": true, "credential_path": "/var/addon/token-config", ... } kind: ConfigMapJalankan perintah berikut untuk memulai ulang pod Terway agar ConfigMap yang dimodifikasi berlaku:
kubectl delete pod -n kube-system -l app=terway-eniip
Instal terway-controlplane dari tab Networking halaman Add-ons setelah Anda mengaktifkan terway-eniip.
Setelah terway-controlplane diinstal, Installed akan ditampilkan di kartu terway-controlplane.
Langkah 2: Buat PodNetworking
Terway memungkinkan Anda menggunakan definisi sumber daya kustom (CRD) bernama PodNetworking untuk menggambarkan konfigurasi jaringan. Anda dapat membuat beberapa PodNetworking untuk merancang bidang jaringan yang berbeda.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan klaster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
Di halaman Custom Resources, klik tab CRDs, lalu klik Create from YAML.
Blok kode berikut menunjukkan contoh PodNetworking:
apiVersion: network.alibabacloud.com/v1beta1 kind: PodNetworking metadata: name: example spec: allocationType: type: Fixed # Kebijakan yang menggambarkan bagaimana alamat IP dialokasikan ke pod. Nilai valid: Elastic dan Fixed. releaseStrategy: TTL # Parameter ini berlaku hanya jika PodNetworking menggunakan kebijakan Fixed. Jika PodNetworking menggunakan kebijakan Elastic, Anda tidak perlu mengonfigurasi parameter releaseStrategy dan releaseAfter. releaseAfter: "1h" # Parameter ini berlaku hanya jika releaseStrategy diatur ke TTL. selector: podSelector: matchLabels: foo: bar namespaceSelector: matchLabels: foo: bar securityGroupIDs: - sg-bpxxxx vSwitchOptions: - vsw-bpxxxx status: status: ReadyTabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
allocationType
(Kebijakan yang menggambarkan bagaimana alamat IP dialokasikan ke pod)
type
Nilai valid:
Elastic: Alokasikan alamat IP elastis (EIPs) ke pod. Alamat IP dilepaskan setelah pod dihapus.
Fixed: Alokasikan alamat IP statis ke pod.
Setelah Anda mengaktifkan mode ini, PodNetworking hanya berlaku pada pod dengan nama tetap. Secara default, StatefulSets dan pod tanpa ownerReferences didukung. Jika Anda perlu mengonfigurasi beban kerja kustom, konfigurasikan terway-controlplane dalam manajemen komponen.
CatatanJika Anda menggunakan kebijakan Fixed, batasan ditambahkan untuk memastikan bahwa zona tempat pod diregenerasi sama dengan zona aslinya.
releaseStrategy
Kebijakan yang menggambarkan bagaimana alamat IP dilepaskan. Parameter ini berlaku hanya jika
typediatur keFixed. Nilai valid:TTL: Alamat IP dilepaskan dengan penundaan. Setelah pod dihapus, alamat IP pod tidak dilepaskan sampai periode waktu yang ditentukan berakhir. Nilai minimum adalah 5 menit.Never: Alamat IP tidak dilepaskan. Jika alamat IP tidak lagi digunakan, Anda harus menghapus PodENIs secara manual.
releaseAfter
Penundaan untuk melepaskan alamat IP pod. Parameter ini berlaku hanya jika
releaseStrategydiatur keTTL. Nilainya harus bertipe waktu Go. Unit: jam (h) dan menit (m). Contoh:2h45matau5m0s. Untuk informasi lebih lanjut, lihat Tipe waktu Go.selector
(Pemilih label yang digunakan untuk memilih pod untuk menggunakan PodNetworking saat ini)
podSelector
Pemilih yang digunakan untuk mencocokkan label pod. Pod yang cocok dengan pemilih ini menggunakan PodNetworking saat ini.
Jika baik
podSelectormaupunnamespaceSelectordikonfigurasi, hanya pod yang cocok dengan kedua pemilih yang menggunakan PodNetworking saat ini.Pastikan label pod sesuai dengan selectors hanya satu ConfigMap PodNetworking. Jika pod cocok dengan beberapa ConfigMap PodNetworking, pod akan menggunakan konfigurasi jaringan dari ConfigMap PodNetworking secara acak.
namespaceSelector
Pemilih yang digunakan untuk mencocokkan label namespace. Pod yang cocok dengan pemilih ini menggunakan PodNetworking saat ini.
Jika baik
podSelectormaupunnamespaceSelectordikonfigurasi, hanya pod yang cocok dengan kedua pemilih yang menggunakan PodNetworking saat ini.Pastikan label pod sesuai dengan selectors hanya satu ConfigMap PodNetworking. Jika pod cocok dengan beberapa ConfigMap PodNetworking, pod akan menggunakan konfigurasi jaringan dari ConfigMap PodNetworking secara acak.
vSwitchOptions
-
Menentukan vSwitches yang digunakan oleh pod. Hubungan logis di antara beberapa vSwitches adalah ATAU. Setiap pod hanya dapat menggunakan satu vSwitch. Terway secara otomatis memilih vSwitch yang tepat untuk setiap pod.
Batasan ditambahkan untuk memastikan zona tempat pod dapat dijadwalkan sama dengan zona vSwitches yang Anda tentukan dalam parameter vSwitchOptions.
Pastikan zona vSwitches di vSwitchOptions sama dengan zona node tempat pod dijadwalkan. Selain itu, pastikan vSwitches tersebut dapat menyediakan alamat IP idle yang cukup. Jika tidak, ACK gagal membuat pod.
CatatanJika Anda telah mengaktifkan penskalaan otomatis node, batasan zona ketersediaan yang ditambahkan menggunakan parameter vSwitchOptions dapat mencegah pool node melakukan penskalaan keluar. Untuk informasi lebih lanjut, lihat FAQ tentang penskalaan otomatis node.
vSwitchSelectOptions (Kebijakan yang menentukan vSwitch yang digunakan)
vSwitchSelectionPolicy
Nilai valid:
ordered: Ini adalah nilai default. vSwitches digunakan sesuai urutan pengisian.most: Memrioritaskan vSwitch dengan jumlah alamat IP tersedia terbanyak untuk digunakan.random: vSwitches dipilih secara acak.
CatatanDidukung di Terway v1.11.0 dan versi lebih baru.
securityGroupIDs
-
Menentukan ID grup keamanan. Beberapa grup keamanan berlaku secara bersamaan. Anda dapat menentukan maksimal lima grup keamanan.
eniOptions (Tipe ENI yang digunakan oleh pod)
eniType
Nilai valid:
Default: Ini adalah mode default. Di klaster yang berjalan dalam mode Terway shared ENI, mode Trunk ENI digunakan. Di klaster yang berjalan dalam mode Terway ENI eksklusif, mode ENI eksklusif digunakan.ENI: Gunakan mode ENI eksklusif.Trunk: Gunakan mode Trunk ENI.
CatatanDidukung di Terway v1.11.0 dan versi lebih baru.
Klik Create.
Setelah PodNetworking dibuat, Terway secara otomatis menyinkronkan konfigurasi jaringan. PodNetworking hanya berlaku pada pod setelah
statusPodNetworking berubah menjadiReady.Jalankan perintah berikut untuk memeriksa apakah status sumber daya adalah
ready:kubectl describe PodNetworking example # Ganti example dengan nama sumber daya kustom sebenarnya.
(Opsional) Langkah 3: Tambahkan label ke namespace
Setelah Anda menerapkan PodNetworking, Anda harus menambahkan label yang sama ke namespace tertentu untuk memastikan bahwa namespace sesuai dengan aturan PodNetworking dengan menambahkan label ke namespace.
Jalankan perintah berikut untuk membuat namespace uji bernama example:
kubectl create ns exampleJalankan perintah berikut untuk menambahkan label
foo=barke namespace:kubectl label namespaces example foo=bar # Ganti example dengan nama namespace sebenarnya.Jalankan perintah berikut untuk memeriksa label namespace:
kubectl get namespace example --show-labels # Ganti example dengan nama namespace sebenarnya.Output yang Diharapkan:
NAME STATUS AGE LABELS example Active 24s foo=bar,kubernetes.io/metadata.name=example
(Opsional) Langkah 4: Buat pod
Saat ACK membuat pod, label pod dicocokkan dengan PodNetworking. Jika pod tidak cocok dengan PodNetworking, pod secara default diberi alamat IP dari ENI bersama. Jika pod cocok dengan PodNetworking, alamat IP diberikan ke pod berdasarkan konfigurasi yang ditentukan dalam PodNetworking.
Terway secara otomatis membuat CRD bernama PodENI untuk pod yang cocok dengan PodNetworking. PodENI digunakan untuk melacak penggunaan sumber daya pod. PodENI dikelola oleh Terway. Untuk informasi lebih lanjut tentang label pod, lihat Labels and Selectors.
Buat file my-nginx.yaml dengan template YAML berikut:
apiVersion: apps/v1 kind: StatefulSet metadata: name: my-nginx # Nama aplikasi. namespace: example # Tentukan nama 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 menyetel parameter volumeClaimTemplates. # Contoh: # volumeClaimTemplates: # - metadata: # name: nginx-storage # spec: # accessModes: ["ReadWriteOnce"] # storageClassName: "my-storage-class" # resources: # requests: # storage: 1GiJalankan perintah berikut untuk menerapkan aplikasi contoh bernama my-nginx: Setelah pod diterapkan, verifikasi konfigurasinya. Untuk informasi lebih lanjut, lihat Bagaimana cara memeriksa apakah pod menggunakan konfigurasi jaringan yang ditentukan dalam ConfigMap PodNetworking?
kubectl apply -f my-nginx.yaml
Hentikan terway-controlplane sebelum migrasi klaster
Setelah mengaktifkan fitur konfigurasi pod kustom untuk ACK dedicated cluster, Anda tidak dapat langsung memigrasikan beban kerja dari ACK dedicated cluster ke ACK managed Pro cluster. Anda harus menghentikan terway-controlplane sebelum migrasi dimulai dan kemudian mengaktifkan terway-controlplane setelah migrasi selesai.
Lakukan langkah-langkah berikut sebelum memulai migrasi:
Jalankan perintah berikut untuk menghentikan terway-controlplane:
kubectl scale deploy -nkube-system terway-controlplane --replicas 0Jalankan perintah berikut untuk mengonfigurasi 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 # Hapus konfigurasi webhook. kubectl delete -f terway-controlplane.mutatingwebhookconfigurations.yaml kubectl delete -f terway-controlplane.validatingwebhookconfigurations.yaml
Verifikasi bahwa migrasi berhasil.
CatatanUntuk informasi lebih lanjut tentang migrasi klaster, lihat Migrasi Panas dari Klaster ACK Dedicated ke Klaster ACK Managed Pro.
Jika migrasi gagal, jalankan perintah berikut untuk memulihkan webhook dan terway-controlplane:
# 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, jalankan perintah berikut untuk menghapus sumber daya terkait:
kubectl delete deploy -nkube-system terway-controlplane
Instal komponen terway-controlplane dari halaman Add-ons. Untuk informasi lebih lanjut, lihat Kelola Komponen Sistem.
FAQ
Bagaimana cara memeriksa apakah pod menggunakan konfigurasi jaringan yang ditentukan dalam ConfigMap PodNetworking?
Jika pod menggunakan konfigurasi jaringan yang ditentukan dalam PodNetworking, sebuah
annotationdengan nilaik8s.aliyun.com/pod-networkingditambahkan ke pod setelah pod dibuat.apiVersion: v1 kind: Pod metadata: annotations: k8s.aliyun.com/pod-eni: "true" k8s.aliyun.com/pod-networking: podnetworking labels: app: example pod-ip: elasticTerway secara otomatis membuat PodENI dengan nama pod dan namespace yang sama untuk mencatat konfigurasi jaringan yang digunakan oleh pod.
kubectl get podenis.network.alibabacloud.com <my-nginx-0> -n <example> -o yaml # Ganti <my-nginx-0> dengan nama pod. Ganti <example> dengan namespace tempat pod berada.Output berikut menunjukkan bahwa pod menggunakan konfigurasi jaringan yang ditentukan dalam ConfigMap PodNetworking.
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
Mengapa pod tidak menggunakan konfigurasi jaringan yang ditentukan dalam ConfigMap PodNetworking yang diinginkan setelah pod dibuat?
Pastikan status PodNetworking adalah
Ready.Pastikan label pod hanya cocok dengan label dalam PodNetworking yang diinginkan.
Jika PodNetworking menggunakan kebijakan Fixed, pod yang tidak dibuat oleh StatefulSets tidak cocok dengan PodNetworking.
Referensi
Anda dapat mengonfigurasi beberapa grup keamanan untuk ENI untuk menerapkan kebijakan firewall jaringan pod secara lebih fleksibel. Untuk informasi lebih lanjut, lihat Konfigurasikan Beberapa Grup Keamanan untuk ENI.
Untuk informasi lebih lanjut tentang cara menyelesaikan masalah jaringan kontainer, lihat FAQ tentang Jaringan Kontainer.