All Products
Search
Document Center

Container Service for Kubernetes:Praktik terbaik untuk Terway Datapath V2

Last Updated:Jun 24, 2026

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.

Penting
  • 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"
  • :9962 adalah port metrik sesuai konvensi Cilium (atur ke string kosong untuk menonaktifkan). Mendengarkan pada 0.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"
Penting

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

cilium_bpf_map_pressure

Gauge

Paling penting. Rasio entri saat ini terhadap max_entries, berdasarkan map_name. Dilaporkan hanya jika penggunaan mencapai 0,1 (10%) atau lebih tinggi.

cilium_bpf_map_capacity

Gauge

Kapasitas map (max_entries), dikelompokkan berdasarkan map_group. Map dengan kapasitas 65536 termasuk dalam kelompok default.

cilium_bpf_map_ops_total

Counter

Penghitung operasi map, berdasarkan map_name, operation, dan outcome. Berguna untuk mendeteksi lonjakan operasi update yang gagal.

cilium_bpf_maps_virtual_memory_max_bytes

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.

Peringatan

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

bpf-map-dynamic-size-ratio

Connection tracking dan NAT: Mengontrol jumlah koneksi bersamaan (CT) dan entri NAT pada sebuah node.

0.0025

(0.0, 1.0]

Node menjalankan workload dengan konkurensi tinggi atau koneksi berdurasi panjang, dan tekanan pada map CT/NAT tinggi.

bpf-policy-map-max

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.

16384

[256, 65536]

NetworkPolicy diaktifkan, dan jumlah identity besar atau satu pod berkomunikasi dengan banyak peer.

bpf-lb-map-max

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.

65536

Tidak ada batas atas mutlak (dibatasi oleh memori).

Jumlah layanan dikalikan rata-rata jumlah pod backend mendekati nilai default 64K.

bpf-node-map-max

Skala node kluster: Mengontrol jumlah maksimum node kluster.

16384

≥ 16384

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 default 0.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.0050.01 untuk 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, atau bpf-nat-global-max tidak terpengaruh.

    • Jika pemantauan penggunaan bpf map menunjukkan bahwa cilium_bpf_map_pressure untuk map seperti cilium_ct4_global secara 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=32768 ke cilium_args dalam 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_v2 yang 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 < 16384 saat startup, agent akan keluar dengan error. Batas atas: uint32 (secara teoretis 4.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=32768 ke cilium_args dan restart pod terway-eniip.

Catatan

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.
Peringatan

Menyesuaikan bpf-lb-map-max dan melakukan restart Cilium akan mengganggu koneksi selama agent mengisi ulang entri layanan.