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.
Mode konfigurasi node
Dua mode node mendukung isolasi jaringan per-pod. Pilih berdasarkan tipe kluster dan kebutuhan kerapatan Anda.
| Node yang mendukung Trunk ENI | Node yang mendukung ENI | |
|---|---|---|
| Tipe kluster yang didukung | Kluster ACK yang dikelola | Kluster ACK yang dikelola dan cluster khusus ACK |
| Kerapatan penerapan | Pod biasa menggunakan ENI bersama; pod tertentu menggunakan ENI eksklusif — kerapatan keseluruhan lebih tinggi | Semua pod menggunakan ENI eksklusif — kerapatan lebih rendah |
| Tipe node yang didukung | Node ECS | Node ECS |
| Tipe instans | Instans dengan EniTrunkSupported=true (lihat DescribeInstanceTypes) | Instans yang mendukung ENI |
Batasan
Cluster khusus ACK: Ajukan kuota
Container network supports Terway ENI Trunking modedi 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-eniipyang 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 ENIMemiliki 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.
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
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.tokenOutput yang diharapkan:
NAME TYPE DATA AGE
addon.network.token Opaque 1 69mJika 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
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Klik nama kluster. Di panel navigasi sebelah kiri, pilih Operations > Add-ons.
Di halaman Add-ons, klik tab Networking dan temukan terway-eniip.
Di kartu terway-eniip, klik Upgrade untuk memperbarui ke versi terbaru. Jika tombol Upgrade tidak ditampilkan, berarti versi terbaru sudah terinstal.
Edit ConfigMap
eni-configuntuk mengaktifkan Trunk ENI:Parameter Nilai Deskripsi 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-configAtur 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: ConfigMapRestart pod Terway agar perubahan diterapkan:
kubectl delete pod -n kube-system -l app=terway-eniipDi 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.
Masuk ke Konsol ACK dan klik Clusters.
Klik nama kluster. Di panel navigasi sebelah kiri, pilih Workloads > Custom Resources.
Di halaman Custom Resources, klik tab CRDs, lalu klik Create from YAML.
Tempel templat berikut dan sesuaikan parameternya untuk lingkungan Anda:
Parameter Deskripsi 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 tanpaownerReferencessecara 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 typeadalahFixed.TTL: lepaskan IP setelah penundaan yang ditentukan direleaseAfter(minimal 5 menit).Never: IP tidak pernah dilepaskan secara otomatis; hapus PodENI secara manual untuk membebaskan alamat tersebut.releaseAfterHanya berlaku ketika releaseStrategyadalahTTL. Menggunakan format durasi Go. Contoh:2h45m,5m0s.podSelectorMencocokkan label pod. Jika podSelectordannamespaceSelectorkeduanya 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: ReadyTabel berikut menjelaskan parameter-parameter tersebut.
Klik Create.
Verifikasi bahwa PodNetworking siap digunakan:
kubectl describe PodNetworking example # Ganti example dengan nama PodNetworking AndaTunggu 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.
Buat namespace uji coba:
kubectl create ns exampleTambahkan label yang sesuai dengan
namespaceSelectorAnda:kubectl label namespaces example foo=bar # Ganti example dengan nama namespace AndaVerifikasi bahwa label telah diterapkan:
kubectl get namespace example --show-labels # Ganti example dengan nama namespace AndaOutput 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
Buat file
my-nginx.yamldengan 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: 1GiTerapkan aplikasi:
kubectl apply -f my-nginx.yamlVerifikasi bahwa pod menggunakan konfigurasi PodNetworking. Jika pod cocok dengan PodNetworking, anotasi
k8s.aliyun.com/pod-networkingditambahkan 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: elasticPeriksa 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 namespaceOutput 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:
Hentikan
terway-controlplane:kubectl scale deploy -nkube-system terway-controlplane --replicas 0Cadangkan 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 1Jika migrasi berhasil: Hapus
terway-controlplanedan instal ulang dari halaman Add-ons:kubectl delete deploy -nkube-system terway-controlplaneUntuk petunjuk instalasi ulang, lihat Kelola komponen sistem.
FAQ
Mengapa pod tidak menggunakan PodNetworking yang diharapkan?
Periksa hal berikut secara berurutan:
statusPodNetworking harusReady. Jalankankubectl describe PodNetworking <name>untuk memeriksa.Label pod harus cocok dengan tepat satu PodNetworking. Jika cocok dengan beberapa PodNetworking, konfigurasi jaringan yang digunakan tidak terdefinisi.
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
Konfigurasikan beberapa grup keamanan per ENI untuk kebijakan firewall tingkat pod yang lebih detail: Konfigurasikan beberapa grup keamanan untuk ENI.
Pemecahan masalah jaringan kontainer: FAQ tentang jaringan kontainer.