Batasi lalu lintas Pod dengan kebijakan jaringan Kubernetes - Amazon EKS

Bantu tingkatkan halaman ini

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

Untuk berkontribusi pada panduan pengguna ini, pilih Edit halaman ini pada GitHub tautan yang terletak di panel kanan setiap halaman.

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

Batasi lalu lintas Pod dengan kebijakan jaringan Kubernetes

Gambaran umum

Secara default, tidak ada batasan di Kubernetes untuk alamat IP, port, atau koneksi antara Pod apa pun di klaster Anda atau antara Pod Anda dan sumber daya di jaringan lain mana pun. Anda dapat menggunakan kebijakan jaringan Kubernetes untuk membatasi lalu lintas jaringan ke dan dari Pod Anda. Untuk informasi selengkapnya, lihat Kebijakan Jaringan dalam dokumentasi Kubernetes.

Kebijakan jaringan standar

Anda dapat menggunakan standar NetworkPolicy untuk mengelompokkan pod-to-pod lalu lintas di cluster. Kebijakan jaringan ini beroperasi pada lapisan 3 dan 4 dari model jaringan OSI, memungkinkan Anda untuk mengontrol arus lalu lintas di alamat IP atau tingkat port dalam cluster Amazon EKS Anda. Kebijakan jaringan standar dicakup ke tingkat namespace.

Kasus penggunaan

  • Segmentasikan lalu lintas jaringan antar beban kerja untuk memastikan bahwa hanya aplikasi terkait yang dapat berbicara satu sama lain.

  • Isolasi penyewa di tingkat namespace menggunakan kebijakan untuk menegakkan pemisahan jaringan.

Contoh

Dalam kebijakan di bawah ini, lalu lintas keluar dari pod webapp di namespace matahari dibatasi.

apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: webapp-egress-policy namespace: sun spec: podSelector: matchLabels: role: webapp policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: moon podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 8080 - to: - namespaceSelector: matchLabels: name: stars podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 8080

Kebijakan ini berlaku untuk pod dengan label role: webapp di sun namespace.

  • Lalu lintas yang diizinkan: Pod dengan label role: frontend di moon namespace pada port TCP 8080

  • Lalu lintas yang diizinkan: Pod dengan peran label: frontend di stars namespace pada port TCP 8080

  • Lalu lintas yang diblokir: Semua lalu lintas keluar lainnya dari webapp pod ditolak secara implisit

Kebijakan jaringan admin (atau cluster)

llustrasi urutan evaluasi untuk kebijakan jaringan di EKS

Anda dapat menggunakan ClusterNetworkPolicy untuk menegakkan standar keamanan jaringan yang berlaku untuk seluruh cluster. Alih-alih mendefinisikan dan mempertahankan kebijakan yang berbeda secara berulang untuk setiap namespace, Anda dapat menggunakan satu kebijakan untuk mengelola kontrol akses jaringan secara terpusat untuk beban kerja yang berbeda di klaster, terlepas dari namespace mereka.

Kasus penggunaan

  • Kelola kontrol akses jaringan secara terpusat untuk semua (atau sebagian dari) beban kerja di kluster EKS Anda.

  • Tentukan postur keamanan jaringan default di seluruh cluster.

  • Memperluas standar keamanan organisasi ke ruang lingkup cluster dengan cara yang lebih efisien secara operasional.

Contoh

Dalam kebijakan di bawah ini, Anda dapat secara eksplisit memblokir lalu lintas klaster dari ruang nama lain untuk mencegah akses jaringan ke namespace beban kerja yang sensitif.

apiVersion: networking.k8s.aws/v1alpha1 kind: ClusterNetworkPolicy metadata: name: protect-sensitive-workload spec: tier: Admin priority: 10 subject: namespaces: matchLabels: kubernetes.io/metadata.name: earth ingress: - action: Deny from: - namespaces: matchLabels: {} # Match all namespaces. name: select-all-deny-all

Catatan penting

Kebijakan jaringan di plugin Amazon VPC CNI untuk Kubernetes didukung dalam konfigurasi yang tercantum di bawah ini.

  • Versi 1.21.0 (atau yang lebih baru) plugin Amazon VPC CNI untuk kebijakan jaringan standar dan admin.

  • Cluster dikonfigurasi untuk IPv4 atau IPv6 alamat.

  • Anda dapat menggunakan kebijakan jaringan dengan grup keamanan untuk Pod. Dengan kebijakan jaringan, Anda dapat mengontrol semua komunikasi dalam cluster. Dengan grup keamanan untuk Pod, Anda dapat mengontrol akses ke AWS layanan dari aplikasi di dalam Pod.

  • Anda dapat menggunakan kebijakan jaringan dengan jaringan kustom dan delegasi awalan.

Pertimbangan-pertimbangan

Arsitektur

  • Saat menerapkan plugin Amazon VPC CNI untuk kebijakan jaringan Kubernetes ke klaster Anda dengan plugin Amazon VPC CNI untuk Kubernetes, Anda hanya dapat menerapkan kebijakan tersebut ke node Amazon Linux. EC2 Anda tidak dapat menerapkan kebijakan ke Fargate atau Windows node.

  • Kebijakan jaringan hanya berlaku salah satu IPv4 atau IPv6 alamat, tetapi tidak keduanya. Dalam sebuah IPv4 klaster, VPC CNI memberikan IPv4 alamat ke pod dan menerapkan kebijakan. IPv4 Dalam sebuah IPv6 klaster, VPC CNI memberikan IPv6 alamat ke pod dan menerapkan kebijakan. IPv6 Aturan kebijakan IPv4 jaringan apa pun yang diterapkan pada IPv6 klaster akan diabaikan. Aturan kebijakan IPv6 jaringan apa pun yang diterapkan pada IPv4 klaster akan diabaikan.

Kebijakan Jaringan

  • Kebijakan Jaringan hanya diterapkan pada Pod yang merupakan bagian dari Deployment. Pod mandiri yang tidak memiliki metadata.ownerReferences satu set tidak dapat memiliki kebijakan jaringan yang diterapkan padanya.

  • Anda dapat menerapkan beberapa kebijakan jaringan ke Pod yang sama. Ketika dua atau lebih kebijakan yang memilih Pod yang sama dikonfigurasi, semua kebijakan diterapkan ke Pod.

  • Jumlah maksimum kombinasi port dan protokol untuk rentang alamat IP tunggal (CIDR) adalah 24 di semua kebijakan jaringan Anda. Selektor seperti namespaceSelector menyelesaikan satu atau lebih CIDRs. Jika beberapa penyeleksi menyelesaikan ke CIDR tunggal atau Anda menentukan CIDR langsung yang sama beberapa kali dalam kebijakan jaringan yang sama atau berbeda, semua ini dihitung dalam batas ini.

  • Untuk salah satu layanan Kubernetes Anda, port layanan harus sama dengan port kontainer. Jika Anda menggunakan port bernama, gunakan nama yang sama dalam spesifikasi layanan juga.

Kebijakan Jaringan Admin

  1. Kebijakan tingkat admin (dievaluasi terlebih dahulu): Semua tingkat Admin ClusterNetworkPolicies dievaluasi sebelum kebijakan lainnya. Dalam tingkat Admin, kebijakan diproses dalam urutan prioritas (nomor prioritas terendah terlebih dahulu). Jenis tindakan menentukan apa yang terjadi selanjutnya.

    • Tindakan tolak (prioritas tertinggi): Ketika kebijakan Admin dengan tindakan Tolak cocok dengan lalu lintas, lalu lintas tersebut segera diblokir terlepas dari kebijakan lainnya. Tidak ada lebih lanjut ClusterNetworkPolicy atau NetworkPolicy aturan yang diproses. Ini memastikan bahwa kontrol keamanan di seluruh organisasi tidak dapat diganti oleh kebijakan tingkat ruang nama.

    • Izinkan tindakan: Setelah aturan Tolak dievaluasi, kebijakan Admin dengan tindakan Izinkan diproses dalam urutan prioritas (nomor prioritas terendah terlebih dahulu). Ketika tindakan Izinkan cocok, lalu lintas diterima dan tidak ada evaluasi kebijakan lebih lanjut yang terjadi. Kebijakan ini dapat memberikan akses di beberapa ruang nama berdasarkan pemilih label, memberikan kontrol terpusat atas beban kerja mana yang dapat mengakses sumber daya tertentu.

    • Lulus tindakan: Melewati tindakan dalam kebijakan tingkat Admin mendelegasikan pengambilan keputusan ke tingkat yang lebih rendah. Ketika lalu lintas cocok dengan aturan Pass, evaluasi melewatkan semua aturan tingkat Admin yang tersisa untuk lalu lintas tersebut dan melanjutkan langsung ke tingkat. NetworkPolicy Hal ini memungkinkan administrator untuk secara eksplisit mendelegasikan kontrol untuk pola lalu lintas tertentu ke tim aplikasi. Misalnya, Anda dapat menggunakan aturan Pass untuk mendelegasikan manajemen lalu lintas intra-namespace ke administrator namespace sambil mempertahankan kontrol ketat atas akses eksternal.

  2. Tingkat kebijakan jaringan: Jika tidak ada kebijakan tingkat Admin yang cocok dengan Tolak atau Izinkan, atau jika tindakan Pass dicocokkan, sumber daya cakupan ruang nama akan dievaluasi NetworkPolicy berikutnya. Kebijakan ini memberikan kontrol halus dalam ruang nama individu dan dikelola oleh tim aplikasi. Kebijakan dengan cakupan ruang nama hanya bisa lebih ketat daripada kebijakan Admin. Mereka tidak dapat mengesampingkan keputusan Tolak kebijakan Admin, tetapi mereka dapat membatasi lalu lintas yang diizinkan atau disahkan oleh kebijakan Admin.

  3. Kebijakan Admin tingkat dasar: Jika tidak ada kebijakan dengan cakupan Admin atau ruang nama yang cocok dengan lalu lintas, tingkat dasar akan dievaluasi. ClusterNetworkPolicies Ini memberikan postur keamanan default yang dapat diganti dengan kebijakan cakupan ruang nama, memungkinkan administrator untuk menetapkan default di seluruh organisasi sambil memberi tim fleksibilitas untuk menyesuaikan sesuai kebutuhan. Kebijakan dasar dievaluasi dalam urutan prioritas (nomor prioritas terendah terlebih dahulu).

  4. Penyangkalan default (jika tidak ada kebijakan yang cocok): deny-by-default Perilaku ini memastikan bahwa hanya koneksi yang diizinkan secara eksplisit yang diizinkan, mempertahankan postur keamanan yang kuat.

Migrasi

  • Jika klaster Anda saat ini menggunakan solusi pihak ketiga untuk mengelola kebijakan jaringan Kubernetes, Anda dapat menggunakan kebijakan yang sama dengan plugin Amazon VPC CNI untuk Kubernetes. Namun Anda harus menghapus solusi yang ada sehingga tidak mengelola kebijakan yang sama.

Awas

Kami menyarankan bahwa setelah Anda menghapus solusi kebijakan jaringan, maka Anda mengganti semua node yang memiliki solusi kebijakan jaringan diterapkan pada mereka. Ini karena peraturan lalu lintas mungkin tertinggal oleh pod solusi jika keluar tiba-tiba.

Instalasi

  • Fitur kebijakan jaringan membuat dan memerlukan PolicyEndpoint Custom Resource Definition (CRD) yang disebutpolicyendpoints.networking.k8s.aws. PolicyEndpointobjek Sumber Daya Kustom dikelola oleh Amazon EKS. Anda tidak boleh memodifikasi atau menghapus sumber daya ini.

  • Jika Anda menjalankan pod yang menggunakan kredensial IAM peran instance atau terhubung ke EC2 IMDS, berhati-hatilah untuk memeriksa kebijakan jaringan yang akan memblokir akses ke IMDS. EC2 Anda mungkin perlu menambahkan kebijakan jaringan untuk mengizinkan akses ke EC2 IMDS. Untuk informasi selengkapnya, lihat Metadata instans dan data pengguna di EC2 Panduan Pengguna Amazon.

    Pod yang menggunakan peran IAM untuk akun layanan atau EKS Pod Identity tidak mengakses EC2 IMDS.

  • Plugin Amazon VPC CNI untuk Kubernetes tidak menerapkan kebijakan jaringan ke antarmuka jaringan tambahan untuk setiap pod, hanya antarmuka utama untuk setiap pod (). eth0 Ini mempengaruhi arsitektur berikut:

    • IPv6pod dengan ENABLE_V4_EGRESS variabel disetel ketrue. Variabel ini memungkinkan fitur IPv4 keluar untuk menghubungkan IPv6 pod ke IPv4 titik akhir seperti yang berada di luar cluster. Fitur IPv4 jalan keluar bekerja dengan membuat antarmuka jaringan tambahan dengan alamat IPv4 loopback lokal.

    • Saat menggunakan plugin jaringan berantai seperti Multus. Karena plugin ini menambahkan antarmuka jaringan ke setiap pod, kebijakan jaringan tidak diterapkan ke plugin jaringan yang dirantai.