Sesuaikan parameter conntrack, identity, dan BPF map untuk Terway Datapath V2 guna meningkatkan kinerja dan stabilitas kluster.
Optimalkan konfigurasi conntrack
Datapath V2 menggunakan conntrack berbasis eBPF untuk jaringan kontainer. Untuk menyesuaikan parameter seperti ukuran tabel conntrack dan timeout TCP pada workload dengan konkurensi tinggi, lihat Optimize conntrack configurations in Terway.
Batasi jumlah identitas
Pada mode Datapath V2, NetworkPolicy menggunakan eBPF alih-alih Netfilter dan memberikan satu identity kepada setiap pod untuk kontrol akses jaringan detail halus.
Sebuah identity terdiri dari label pod dan label namespace. Pod dengan label yang sama berbagi satu identity untuk manajemen akses jaringan.
Sebelum mendistribusikan traffic, sistem memeriksa aturan NetworkPolicy berdasarkan alamat IP dan identity pod tersebut.
-
Jika fitur NetworkPolicy dinonaktifkan, identity tidak berpengaruh, dan Terway secara otomatis membatasi jumlah identity.
-
Setelah mengaktifkan NetworkPolicy, pastikan pod dengan identity yang sama memiliki label yang identik. Label yang berbeda akan menghasilkan identity berlebih, meningkatkan beban kerja lapisan kontrol dan memperlambat alokasi IP.
Untuk mencegah pembuatan identity berlebih akibat label yang tidak valid, konfigurasikan aturan penyaringan label.
-
Memodifikasi aturan penyaringan label sementara akan membuat identity baru, sehingga meningkatkan beban API server.
-
Aturan penyaringan label yang salah dapat menyebabkan kegagalan penerapan aturan NetworkPolicy.
-
Jangan saring semua label: pertahankan setidaknya satu label (namespace atau pod) per kelompok pod, agar sistem tetap dapat mengenali identity.
-
Label yang disaring tidak dapat dirujuk dalam aturan NetworkPolicy. Saring hanya label yang tidak digunakan dalam kebijakan.
-
Untuk sintaks penyaringan label, lihat dokumentasi Cilium.
Untuk mengonfigurasi ini di Terway, lihat parameter cilium_args dalam Customize Terway configuration parameters.
Jumlah identity secara langsung memengaruhi jumlah entri policy map per pod. Kapasitas policy map dikendalikan oleh bpf-policy-map-max (default: 16384, maksimum: 65536 per endpoint). Lihat bpf-policy-map-max.
Pantau pemanfaatan BPF map
BPF map yang penuh dapat menyebabkan masalah jaringan pod atau kegagalan pemrograman service entry. Kami sangat merekomendasikan mengaktifkan pengambilan metrik Prometheus untuk Cilium Agent di kluster produksi dan menyiapkan alert untuk pemanfaatan BPF map.
Aktifkan metrik Prometheus
Datapath V2 menggunakan kembali endpoint metrik Cilium Agent. Tambahkan argumen --prometheus-serve-addr ke cilium_args dalam ConfigMap Terway:
"cilium_args": "--prometheus-serve-addr=:9962"
-
:9962adalah port metrik sesuai konvensi Cilium (atur ke string kosong untuk menonaktifkan). Mendengarkan pada0.0.0.0, memungkinkan pengambilan langsung dari port hostNetwork pod. -
Lakukan restart pod terway-eniip agar perubahan diterapkan.
-
Tambahkan anotasi scrape ke pod atau layanan Anda, atau buat ServiceMonitor untuk penemuan otomatis oleh Prometheus:
metadata: annotations: prometheus.io/scrape: "true" prometheus.io/port: "9962" prometheus.io/path: "/metrics"
Konfigurasikan grup keamanan yang sesuai untuk kluster Anda guna mencegah akses eksternal ke port metrik.
Metrik utama BPF map
Beberapa metrik memerlukan Terway v1.14.0 atau versi lebih baru. Lakukan upgrade ke versi terbaru.
|
Metric |
Type |
Description |
|
|
Gauge |
Paling penting. Rasio entri saat ini terhadap |
|
|
Gauge |
Kapasitas map ( |
|
|
Counter |
Penghitung operasi map, berdasarkan |
|
|
Gauge |
Memori virtual maksimum yang digunakan oleh semua map. Gunakan untuk memantau tekanan memori node. |
Contoh alert dan kueri
# Alert jika penggunaan BPF map melebihi 80% selama 5 menit
max by (map_name) (cilium_bpf_map_pressure) > 0.8
# Penggunaan Map LB Service tiap node
cilium_bpf_map_pressure{map_name=~"cilium_lb[46]_services_v2"}
# Penggunaan Policy Map tiap endpoint (Top 10)
topk(10, cilium_bpf_map_pressure{map_name=~"cilium_policy_.*"})
# Alert kapasitas Node Map (tingkatkan bpf-node-map-max jika >80%)
cilium_bpf_map_pressure{map_name="cilium_node_map_v2"} > 0.8
# Tekanan Global Conntrack Map (terkait tuning bpf-map-dynamic-size-ratio)
cilium_bpf_map_pressure{map_name=~"cilium_ct.*_global"} > 0.7
# Tingkat kegagalan penulisan map
sum by (map_name) (rate(cilium_bpf_map_ops_total{operation="update",outcome="fail"}[5m])) > 0
Jika cilium_bpf_map_pressure secara konsisten melebihi 0,8, sesuaikan parameter terkait sebagaimana dijelaskan dalam bagian bpf map capacity tuning. Nilai yang melebihi 0,95 menandakan kondisi darurat yang memerlukan peningkatan kapasitas segera untuk mencegah kegagalan pemrograman entri.
Tuning kapasitas BPF map
Datapath V2 menggunakan BPF map yang nilai max_entries-nya ditetapkan saat pembuatan dan tidak dapat diperluas saat runtime. Map yang penuh dapat menyebabkan kegagalan update, anomali traffic pod, serta memblokir entri identity atau layanan baru. Secara proaktif evaluasi dan sesuaikan ukuran map menggunakan metrik pada bagian Monitor BPF map utilization.
Menyesuaikan ukuran BPF map apa pun memerlukan restart Cilium Agent (pod terway-eniip) untuk membuat ulang map tersebut.
Saat restart, agent mengisi ulang entri conntrack dan layanan, yang dapat menyebabkan jitter koneksi singkat. Lakukan pada jam sepi dengan strategi rolling update.
Ikhtisar parameter
|
Parameter |
Fitur yang terpengaruh |
Default |
Rentang nilai |
Kapan menyesuaikan |
|
|
Connection tracking dan NAT: Mengontrol jumlah koneksi bersamaan (CT) dan entri NAT pada sebuah node. |
|
|
Node menjalankan workload dengan konkurensi tinggi atau koneksi berdurasi panjang, dan tekanan pada map CT/NAT tinggi. |
|
|
NetworkPolicy (per pod): Mengontrol jumlah aturan kebijakan per pod (kombinasi identitas peer yang diizinkan × port/protokol). Jika penuh, pemrograman kebijakan dipangkas dan penerapan mungkin tidak sesuai tujuan. |
|
|
NetworkPolicy diaktifkan, dan jumlah identity besar atau satu pod berkomunikasi dengan banyak peer. |
|
|
Kubernetes Service (semua node): Mengontrol jumlah total entri layanan Kubernetes dan endpoint. Jika penuh, layanan atau backend baru tidak dapat diprogram dan IP Service mungkin menjadi tidak dapat dijangkau. |
|
Tidak ada batas atas mutlak (dibatasi oleh memori). |
Jumlah layanan dikalikan rata-rata jumlah pod backend mendekati nilai default 64K. |
|
|
Skala node kluster: Mengontrol jumlah maksimum node kluster. |
|
|
Jumlah node dalam kluster mendekati 16.000. |
Tetapkan parameter ini dalam cilium_args pada ConfigMap Terway. Contohnya:
"cilium_args": "--bpf-map-dynamic-size-ratio=0.005 --bpf-policy-map-max=32768 --bpf-lb-map-max=131072"
Untuk mengonfigurasi ini di Terway, lihat parameter cilium_args dalam Customize Terway configuration parameters.
bpf-map-dynamic-size-ratio
-
Fungsi: Mengontrol jumlah koneksi bersamaan yang dilacak dan entri terjemahan NodePort/SNAT per node. Kapasitas dihitung secara dinamis dari memori fisik node, rasio ini, dan ukuran entri. Jika penuh, koneksi baru gagal dan koneksi yang ada mungkin dihapus, menyebabkan kehilangan paket.
-
Ruang lingkup: Kapasitas beberapa map global — CT (
cilium_ct4_global/cilium_ct_any4_global), NAT (cilium_snat_v4_external), Neighbor (cilium_nodeport_neigh4), dan SockRevNAT — dihitung secara dinamis berdasarkan parameter ini dan memori fisik node. -
Rentang nilai:
(0.0, 1.0], dengan nilai default0.0025(sekitar 0,25% dari memori fisik). -
Perhitungan khas (berdasarkan ukuran elemen default Cilium):
Memori fisik node
Entri CT TCP
Entri CT apa pun
Entri NAT
512 MiB
33.140
16.570
33.140
1 GiB
66.280
33.140
66.280
4 GiB
265.121
132.560
265.121
16 GiB
1.060.485
530.242
1.060.485
-
Pembatasan: Hasil dibatasi pada rentang
[1Ki, 16Mi](sekitar 1 GiB memori per map). Entri maksimum per map:2^24 = 16.777.216. -
Rekomendasi tuning:
-
Untuk node dengan konkurensi tinggi (lebih dari 10.000 koneksi berdurasi panjang per node), tingkatkan menjadi
0.005–0.01untuk mengizinkan lebih banyak entri CT/NAT pada node berkapasitas memori besar. -
Map yang memiliki pengaturan eksplisit
bpf-ct-global-tcp-max,bpf-ct-global-any-max, ataubpf-nat-global-maxtidak terpengaruh. -
Jika
pemantauan penggunaan bpf mapmenunjukkan bahwacilium_bpf_map_pressureuntuk map seperticilium_ct4_globalsecara konsisten melebihi 0,8, sesuaikan rasio ini atau atur kapasitas secara eksplisit untuk map yang terpengaruh.
-
bpf-policy-map-max
-
Ruang lingkup: Setiap pod memiliki map
cilium_policy_*sendiri yang menyimpan kombinasi yang diizinkan dari identity peer, port, dan protokol untuk penerapan NetworkPolicy di bidang data. -
Nilai default:
16384. Nilai minimum:256(2^8), nilai maksimum:65536(2^16). Nilai di luar rentang akan dikoreksi dengan peringatan. -
Kapan menyesuaikan:
-
NetworkPolicy diaktifkan di kluster, dan jumlah identity besar (lihat
Limit the number of identities). -
Hasil perkalian antara jumlah identity peer dan kombinasi port/protokol yang terbuka untuk satu pod mendekati 16384.
-
Metrik
cilium_bpf_map_pressure{map_name=~"cilium_policy_.*"}secara konsisten melebihi 0,8.
-
-
Cara menyesuaikan: Tambahkan
--bpf-policy-map-max=32768kecilium_argsdalam ConfigMap Terway dan restart pod terway-eniip. -
Catatan: Memori per map sebanding dengan
max_entries, dan setiap node menyimpan satu map per pod. Menetapkan nilai 65536 tanpa evaluasi akan meningkatkan overhead memori node secara signifikan.
bpf-node-map-max
-
Fungsi: Mengontrol jumlah maksimum node yang dapat dikenali oleh kluster. Menyimpan pemetaan ID Node ke alamat IP dalam satu map global untuk komunikasi lintas node, enkripsi IPsec/WireGuard, dan Egress Gateway. Jika penuh, node baru tidak dapat dikenali, menyebabkan kegagalan traffic lintas node.
-
Ruang lingkup: Satu map
cilium_node_map_v2yang digunakan bersama di seluruh kluster untuk komunikasi lintas node, enkripsi, dan Egress Gateway. -
Nilai default:
16384(dapat menampung sekitar 16.000 alamat IP node unik). -
Batasan: Kode sumber melarang menetapkan nilai di bawah default 16384. Jika
bpf-node-map-max < 16384saat startup, agent akan keluar dengan error. Batas atas:uint32(secara teoretis4.294.967.295), dibatasi oleh memori node. -
Kapan menyesuaikan:
-
Ukuran kluster mendekati 16.000 node, atau fitur yang meningkatkan entri per node—seperti IPsec/WireGuard—diaktifkan.
-
Metrik
cilium_bpf_map_pressure{map_name="cilium_node_map_v2"}secara konsisten melebihi 0,8.
-
-
Cara menyesuaikan: Tambahkan
--bpf-node-map-max=32768kecilium_argsdan restart pod terway-eniip.
Jika sebuah node dual-stack atau mendapatkan alamat tambahan lainnya, node tersebut mungkin mengonsumsi dua atau tiga entri dalam map.
bpf-lb-map-max
-
Fungsi: Mengontrol kapasitas bidang data untuk semua layanan Kubernetes dalam kluster — ClusterIP, NodePort, dan LoadBalancer — termasuk backend, reverse NAT, afinitas sesi, dan tabel hash Maglev. Jika penuh, layanan atau backend baru tidak dapat diprogram, menyebabkan IP layanan tidak dapat dijangkau atau pembaruan endpoint tertunda.
-
Ruang lingkup: Menetapkan kapasitas untuk
cilium_lb{4,6}_services_v2(entri load balancing ClusterIP dan NodePort) dan sub-map LB berikut (kecuali di-override secara individual):-
cilium_lb4_services_v2/cilium_lb6_services_v2 -
cilium_lb4_backends_v3/cilium_lb6_backends_v3 -
cilium_lb4_reverse_nat/cilium_lb6_reverse_nat -
cilium_lb4_affinity/cilium_lb6_affinity -
cilium_lb4_source_range/cilium_lb6_source_range
-
-
Nilai default:
65536(64K). Jika penuh, Cilium tidak dapat memperbarui endpoint layanan, memengaruhi konektivitas atau pembuatan layanan baru. -
Estimasi kapasitas: Entri per layanan = jumlah pod backend × kombinasi port/protokol dalam spesifikasi layanan.
Perkirakan ukuran map LB yang diperlukan:
Entri per layanan ClusterIP/NodePort = jumlah pod backend yang dipilih oleh layanan × jumlah entri port/protokol dalam spesifikasi Service.
Perkiraan total ukuran map:
Perkiraan ini mengasumsikan distribusi pod dan entri port/protokol per layanan yang kurang lebih normal. Untuk outlier signifikan (misalnya, satu layanan dengan banyak backend), lakukan estimasi yang lebih rinci.
Menyesuaikan bpf-lb-map-max dan melakukan restart Cilium akan mengganggu koneksi selama agent mengisi ulang entri layanan.