View a markdown version of this page

Menjalankan kube-proxy dalam Mode nftables - Amazon EKS

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menjalankan kube-proxy dalam Mode nftables

kube-proxyDengan mode nftables, Amazon EKS dapat menyelesaikan masalah latensi jaringan yang umum di cluster besar dengan lebih dari 1.000 layanan yang menjalankan kube-proxy dalam mode iptables. Mode Iptables memproses aturan pemfilteran paket secara berurutan untuk paket pertama dari setiap koneksi, yang menyebabkan masalah kinerja ini. nftables adalah penerus iptables, dan kube-proxy backend nftables mengatasi masalah latensi ini dengan memproses paket dalam waktu yang hampir konstan terlepas dari ukuran cluster. Untuk menghindari masalah ini, konfigurasikan cluster Anda untuk berjalan kube-proxy dalam mode nftables.

Gambaran umum

kube-proxyBackend nftables telah tersedia secara umum (GA) sejak Kubernetes versi 1.33. Itu tersedia sebagai alpha di 1.29 dan beta di 1.31. Backend iptables menginstal satu aturan untuk setiap Layanan dan mengevaluasi aturan secara berurutan. Hal ini menghasilkan waktu pemrosesan paket O (n) yang tumbuh dengan jumlah layanan. Sebaliknya, nftables menggunakan peta vonis https://kubernetes.io/blog/2025/02/28/nftables-kube-proxy/ untuk mengirimkan paket dalam waktu kira-kira O (1). Hal ini membuat latensi per paket hampir konstan bahkan dalam cluster dengan puluhan ribu layanan, memberikan efisiensi untuk cluster dengan ribuan node dan layanan.

catatan

Meskipun backend nftables adalah GA, iptables tetap menjadi kube-proxy mode default untuk alasan kompatibilitas. Anda harus secara eksplisit memilih masuk ke mode nftables.

Berbeda dengan back end IPVS, yang dirancang sebagai penyeimbang beban dan mengekspos algoritma penjadwalan seperti round robin dan koneksi terendah, backend nftables tidak menawarkan algoritma penjadwalan yang dapat dikonfigurasi. Ketika Layanan memiliki beberapa Pod pendukung, mode nftables memilih Pod backend secara acak.

Persyaratan

kube-proxyBackend nftables memerlukan kernel Linux 5.13 atau yang lebih baru pada node pekerja Anda. Amazon Linux 2023 dan versi Ubuntu saat ini memenuhi persyaratan minimum ini. Karena kube-proxy program nftables mengatur langsung melalui subsistem netfilter kernel, Anda tidak memerlukan paket ruang pengguna tambahan (sepertiipvsadm) atau pemuatan modul kernel di luar kernel yang didukung.

catatan

Kernel 5.13 adalah minimum yang diperlukan untuk menjalankan mode nftables. Untuk meningkatkan kinerja sinkronisasi aturan di cluster besar, kami merekomendasikan kernel dan kube-proxy versi yang lebih baru. Untuk informasi selengkapnya, lihat Pertimbangan Kin erja.

penting

Backend nftables mungkin tidak kompatibel dengan semua plugin jaringan. Konsultasikan dokumentasi penyedia CNI Anda sebelum mengaktifkan mode nftables. Amazon VPC CNI kompatibel dengan mode nftables dimulai dengan versi. v1.23.0

Implementasi

Konfigurasikan cluster Anda kube-proxy DaemonSet untuk berjalan dalam mode nftables dengan menyetel ke kube-proxymode. nftables

Awas

Ini adalah perubahan yang mengganggu. Kami merekomendasikan melakukannya di luar jam kerja atau selama pembuatan cluster EKS awal untuk meminimalkan dampak.

Anda dapat mengeluarkan perintah AWS Command Line Interface (AWS CLI) untuk mengaktifkan nftables dengan memperbarui EKS. kube-proxy Add-on Ini membutuhkan cluster EKS yang menjalankan Kubernetes 1.33 atau yang lebih baru.

aws eks update-addon --cluster-name $CLUSTER_NAME --addon-name kube-proxy \ --configuration-values '{"mode": "nftables"}' \ --resolve-conflicts OVERWRITE

Atau Anda dapat melakukan ini dengan memodifikasi kube-proxy-config ConfigMap di cluster Anda.

kubectl -n kube-system edit cm kube-proxy-config

Temukan mode pengaturan, yang defaultnyaiptables, dan ubah nilainya menjadinftables. Hasil dari salah satu opsi akan terlihat mirip dengan konfigurasi berikut.

mode: "nftables" nftables: masqueradeAll: false masqueradeBit: 14 minSyncPeriod: 1s syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 nodePortAddresses: null oomScoreAdj: -998 portRange: ""

Jika node pekerja Anda bergabung dengan cluster Anda sebelum Anda membuat perubahan ini, mulai ulang kube-proxy DaemonSet.

kubectl -n kube-system rollout restart ds kube-proxy

Pertimbangan Kinerja

Meskipun mode nftables umumnya tersedia mulai dengan versi Kubernetesv1.33, kami sarankan menggunakan mode ini hanya dimulai dengan. v1.36 Di kube-proxy v1.36.0, proyek Kubernetes membuat banyak peningkatan kinerja untuk bagaimana peta dan aturan nftables dibangun. Perubahan ini secara signifikan mengurangi jumlah rantai danjump/gotoaturan, sangat meningkatkan kinerja sinkronisasi dalam skala besar.

Peningkatan ini terutama menguntungkan cluster dengan sejumlah besar titik akhir (Pod yang mendukung Layanan Anda). Sebelum kube-proxy v1.36.0, cluster dengan ratusan ribu titik akhir dapat mengalami waktu sinkronisasi aturan nftables yang sangat lambat dan penguncian lunak CPU. Ini terjadi karena kernel Linux memverifikasi bahwa rantai dan lompatan yang dihasilkan kube-proxy tidak mengandung loop.

Perilaku ini juga dipengaruhi oleh versi kernel Linux. Perbaikan kernel yang mendasarinya disertakan dalam kernel Linux 6.18 (dan sedang di-backport ke beberapa kernel stabil sebelumnya). Menggunakan mode nftables dengan versi kernel Linux sebelumnya dapat menghasilkan waktu sinkronisasi aturan yang lebih lambat dan potensi penguncian lunak CPU. Untuk kinerja terbaik di cluster besar, kami sarankan menjalankan kernel Linux terbaru bersama dengan kube-proxy v1.36.0 atau yang lebih baru. Untuk informasi selengkapnya, lihat masalah kinerja kube-proxy nftables (kubernetes/kubernetes#135639) di situs web. GitHub