Bantu tingkatkan halaman ini
Ingin berkontribusi pada panduan pengguna ini? Gulir ke bagian bawah halaman ini dan pilih Edit halaman ini GitHub. Kontribusi Anda akan membantu membuat panduan pengguna kami lebih baik untuk semua orang.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan klaster Anda untuk kebijakan Kubernetes jaringan
Secara default, tidak ada batasan Kubernetes untuk alamat IP, port, atau koneksi antara apa pun Pods di cluster Anda atau antara Anda Pods dan sumber daya di jaringan lain mana pun. Anda dapat menggunakan kebijakan Kubernetes jaringan untuk membatasi lalu lintas jaringan ke dan dari AndaPods. Untuk informasi selengkapnya, lihat Kebijakan Jaringan
Jika Anda memiliki versi 1.13
atau versi sebelumnya Amazon VPC CNI plugin for Kubernetes di klaster Anda, Anda perlu menerapkan solusi pihak ketiga untuk menerapkan kebijakan Kubernetes jaringan ke klaster Anda. Versi 1.14
atau versi plugin yang lebih baru dapat menerapkan kebijakan jaringan, jadi Anda tidak perlu menggunakan solusi pihak ketiga. Dalam topik ini, Anda mempelajari cara mengonfigurasi klaster agar menggunakan kebijakan Kubernetes jaringan di klaster tanpa menggunakan add-on pihak ketiga.
Kebijakan jaringan di Amazon VPC CNI plugin for Kubernetes didukung dalam konfigurasi berikut.
-
Amazon EKS cluster versi
1.25
dan yang lebih baru. -
Versi 1.14 atau yang lebih baru Amazon VPC CNI plugin for Kubernetes di cluster Anda.
-
Cluster dikonfigurasi untuk
IPv4
atauIPv6
alamat. -
Anda dapat menggunakan kebijakan jaringan dengan grup keamanan untuk Pods. Dengan kebijakan jaringan, Anda dapat mengontrol semua komunikasi dalam cluster. Dengan grup keamanan untukPods, Anda dapat mengontrol akses ke Layanan AWS dari aplikasi dalam filePod.
-
Anda dapat menggunakan kebijakan jaringan dengan jaringan kustom dan delegasi awalan.
Pertimbangan
-
Saat menerapkan kebijakan Amazon VPC CNI plugin for Kubernetes jaringan ke cluster Anda dengan Amazon VPC CNI plugin for Kubernetes, Anda dapat menerapkan kebijakan ke node Amazon EC2 Linux saja. Anda tidak dapat menerapkan kebijakan ke Fargate atau Windows node.
-
Jika kluster Anda saat ini menggunakan solusi pihak ketiga untuk mengelola kebijakan Kubernetes jaringan, Anda dapat menggunakan kebijakan yang sama dengan Amazon VPC CNI plugin for Kubernetes. Namun Anda harus menghapus solusi yang ada sehingga tidak mengelola kebijakan yang sama.
-
Anda dapat menerapkan beberapa kebijakan jaringan untuk hal yang samaPod. Ketika dua atau beberapa kebijakan yang memilih yang sama Pod dikonfigurasi, semua kebijakan diterapkan ke kebijakanPod.
-
Jumlah maksimum kombinasi unik port untuk setiap protokol di masing-masing
ingress:
atauegress:
pemilih dalam kebijakan jaringan adalah 24. -
Untuk setiap Kubernetes layanan Anda, port layanan harus sama dengan port kontainer. Jika Anda menggunakan port bernama, gunakan nama yang sama dalam spesifikasi layanan juga.
-
Penegakan kebijakan saat Pod startup
Amazon VPC CNI plugin for KubernetesKonfigurasi kebijakan jaringan untuk Pod secara paralel dengan penyediaan pod. Sampai semua kebijakan dikonfigurasi untuk pod baru, container di pod baru akan dimulai dengan kebijakan allow default. Ini disebut mode standar. Kebijakan allow default berarti bahwa semua lalu lintas masuk dan keluar diizinkan ke dan dari pod baru.
Anda dapat mengubah kebijakan jaringan default ini dengan menyetel variabel lingkungan
NETWORK_POLICY_ENFORCING_MODE
kestrict
dalamaws-node
wadah CNI VPC.DaemonSet
env: - name: NETWORK_POLICY_ENFORCING_MODE value: "strict"
Dengan
NETWORK_POLICY_ENFORCING_MODE
variabel disetel kestrict
, pod yang menggunakan VPC CNI dimulai dengan kebijakan penolakan default, kemudian kebijakan dikonfigurasi. Ini disebut mode ketat. Dalam mode ketat, Anda harus memiliki kebijakan jaringan untuk setiap titik akhir yang perlu diakses pod di klaster Anda. Perhatikan bahwa persyaratan ini berlaku untuk CoreDNS pod. Kebijakan penolakan default tidak dikonfigurasi untuk pod dengan jaringan Host. -
Fitur kebijakan jaringan membuat dan memerlukan
PolicyEndpoint
Custom Resource Definition (CRD) yang disebutpolicyendpoints.networking.k8s.aws
.PolicyEndpoint
objek 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 IMDS EC2, 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 dalam Panduan Pengguna Amazon EC2.
Pod yang menggunakan peran IAM untuk akun layanan tidak mengakses IMDS EC2.
-
Amazon VPC CNI plugin for KubernetesItu tidak menerapkan kebijakan jaringan ke antarmuka jaringan tambahan untuk setiap pod, hanya antarmuka utama untuk setiap pod (
eth0
). Ini mempengaruhi arsitektur berikut:-
IPv6
pod denganENABLE_V4_EGRESS
variabel disetel ketrue
. Variabel ini memungkinkan fiturIPv4
keluar untuk menghubungkan pod IPv6 keIPv4
titik akhir seperti yang berada di luar klaster. FiturIPv4
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.
-
-
Fitur kebijakan jaringan menggunakan port
8162
pada node untuk metrik secara default. Juga, fitur yang digunakan port8163
untuk probe kesehatan. Jika Anda menjalankan aplikasi lain di node atau di dalam pod yang perlu menggunakan port ini, aplikasi gagal dijalankan. Dalam versi VPC CNIv1.14.1
atau yang lebih baru, Anda dapat mengubah port port ini di tempat-tempat berikut:
Prasyarat
-
Versi cluster minimum
Sebuah klaster Amazon EKS yang sudah ada. Untuk menyebarkan satu, lihatMemulai dengan Amazon EKS. Cluster harus Kubernetes versi
1.25
atau yang lebih baru. Cluster harus menjalankan salah satu Kubernetes versi dan versi platform yang tercantum dalam tabel berikut. Perhatikan bahwa versi apa pun Kubernetes dan platform yang lebih lambat dari yang terdaftar juga didukung. Anda dapat memeriksa Kubernetes versi Anda saat ini dengan menggantimy-cluster
dalam perintah berikut dengan nama cluster Anda dan kemudian menjalankan perintah yang dimodifikasi:aws eks describe-cluster --name
my-cluster
--query cluster.version --output textVersi Kubernetes
Versi platform
1.27.4
eks.5
1.26.7
eks.6
1.25.12
eks.7
-
Versi VPC CNI minimum
Versi
1.14
atau yang lebih baru Amazon VPC CNI plugin for Kubernetes di cluster Anda. Anda dapat melihat versi mana yang saat ini Anda miliki dengan perintah berikut.kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Jika versi Anda lebih awal dari
1.14
, lihat Memperbarui add-on Amazon EKS untuk meningkatkan ke versi1.14
atau yang lebih baru. -
Versi kernel Linux minimum
Node Anda harus memiliki versi kernel Linux
5.10
atau yang lebih baru. Anda dapat memeriksa versi kernel Anda denganuname -r
. Jika Anda menggunakan versi terbaru Amazon EKS yang dioptimalkan Amazon Linux, Amazon EKS mengoptimalkan AMI Amazon Linux yang dipercepat, dan AMI Bottlerocket, mereka sudah memiliki versi kernel yang diperlukan.Amazon EKS mengoptimalkan versi AMI Amazon Linux yang dipercepat
v20231116
atau yang lebih baru memiliki versi kernel5.10
.
Untuk mengonfigurasi klaster Anda untuk menggunakan kebijakan Kubernetes jaringan
-
Pasang sistem file BPF
catatan
Jika klaster Anda versi
1.27
atau yang lebih baru, Anda dapat melewati langkah ini karena semua Amazon EKS mengoptimalkan Amazon Linux dan Bottlerocket AMI untuk1.27
atau yang lebih baru sudah memiliki fitur ini.Untuk semua versi cluster lainnya, jika Anda memutakhirkan Amazon EKS yang dioptimalkan Amazon Linux ke versi
v20230703
atau yang lebih baru atau Anda memutakhirkan AMI Bottlerocket kev1.0.2
versi atau yang lebih baru, Anda dapat melewati langkah ini.-
Pasang sistem file Berkeley Packet Filter (BPF) pada setiap node Anda.
sudo mount -t bpf bpffs /sys/fs/bpf
-
Kemudian, tambahkan perintah yang sama ke data pengguna Anda di template peluncuran untuk Grup Auto Scaling Amazon EC2 Anda.
-
-
Aktifkan kebijakan jaringan di VPC CNI
-
Lihat jenis add-on yang diinstal pada cluster Anda. Bergantung pada alat yang digunakan untuk membuat klaster, saat ini Anda mungkin tidak menginstal jenis add-on Amazon EKS di klaster Anda. Ganti
my-cluster
dengan nama klaster Anda.aws eks describe-addon --cluster-name
my-cluster
--addon-name vpc-cni --query addon.addonVersion --output textJika nomor versi dikembalikan, Anda memiliki jenis add-on Amazon EKS yang diinstal pada cluster Anda dan tidak perlu menyelesaikan langkah-langkah yang tersisa dalam prosedur ini. Jika kesalahan dikembalikan, Anda tidak memiliki jenis add-on Amazon EKS yang diinstal pada cluster Anda.
-
-
Pengaya Amazon EKS
-
Add-on yang dikelola sendiri
-
-
-
Konfirmasikan bahwa
aws-node
pod berjalan di klaster Anda.kubectl get pods -n kube-system | grep 'aws-node\|amazon'
Contoh output adalah sebagai berikut.
aws-node-
gmqp7
2/2 Running 1 (24h ago) 24h aws-node-prnsh
2/2 Running 1 (24h ago) 24hJika kebijakan jaringan diaktifkan, ada 2 kontainer dalam
aws-node
pod. Di versi sebelumnya dan jika kebijakan jaringan dinonaktifkan, hanya ada satu kontainer diaws-node
pod.Sekarang Anda dapat menerapkan kebijakan Kubernetes jaringan ke klaster Anda. Untuk informasi selengkapnya, lihat Kuberneteskebijakan jaringan.
Bintang demo kebijakan jaringan
Demo ini membuat layanan front-end, back-end, dan klien di cluster Amazon EKS Anda. Demo ini juga menciptakan antarmuka pengguna grafis manajemen yang menunjukkan jalur masuk dan keluar yang tersedia di antara setiap layanan. Kami menyarankan Anda menyelesaikan demo di klaster tempat Anda tidak menjalankan beban kerja produksi.
Sebelum Anda membuat kebijakan jaringan apa pun, semua layanan dapat berkomunikasi dua arah. Setelah Anda menerapkan kebijakan jaringan, Anda dapat melihat bahwa klien hanya dapat berkomunikasi dengan layanan front-end, dan back-end hanya menerima lalu lintas dari front-end.
Untuk menjalankan demo kebijakan Stars
-
Menerapkan layanan antarmuka pengguna front-end, back-end, klien, dan manajemen:
kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/namespace.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/management-ui.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/backend.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/frontend.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/client.yaml
-
Lihat semua Pods di cluster.
kubectl get pods -A
Contoh output adalah sebagai berikut.
Dalam output Anda, Anda akan melihat pod di namespace yang ditunjukkan pada output berikut.
NAMA-NAMA
Pod Anda dan jumlah Pod diREADY
kolom berbeda dari yang ada di output berikut. Jangan lanjutkan sampai Anda melihat pod dengan nama yang mirip dan semuanya adaRunning
diSTATUS
kolom.NAMESPACE NAME READY STATUS RESTARTS AGE [...] client client-
xlffc
1/1
Running 05m19s
[...] management-ui management-ui-qrb2g
1/1
Running 05m24s
stars backend-sz87q
1/1
Running 05m23s
stars frontend-cscnf
1/1
Running 05m21s
[...] -
Untuk terhubung ke antarmuka pengguna manajemen, sambungkan ke layanan
EXTERNAL-IP
yang berjalan di klaster Anda:kubectl get service/management-ui -n management-ui
-
Buka browser ke lokasi dari langkah sebelumnya. Anda harus melihat antarmuka pengguna manajemen. Node C adalah layanan klien, simpul F adalah layanan front-end, dan simpul B adalah layanan back-end. Setiap node memiliki akses komunikasi penuh ke semua node lain, seperti yang ditunjukkan oleh garis tebal berwarna.
-
Terapkan kebijakan jaringan berikut di ruang nama
stars
danclient
ruang nama untuk mengisolasi layanan satu sama lain:kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: default-deny spec: podSelector: matchLabels: {}
Anda dapat menggunakan perintah berikut untuk menerapkan kebijakan ke kedua ruang nama:
kubectl apply -n stars -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/apply_network_policies.files/default-deny.yaml kubectl apply -n client -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/apply_network_policies.files/default-deny.yaml
-
Segarkan peramban Anda. Anda melihat bahwa antarmuka pengguna manajemen tidak dapat lagi menjangkau salah satu node, sehingga tidak muncul di antarmuka pengguna.
-
Terapkan kebijakan jaringan yang berbeda berikut untuk memungkinkan antarmuka pengguna manajemen mengakses layanan. Terapkan kebijakan ini untuk mengizinkan UI:
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: stars name: allow-ui spec: podSelector: matchLabels: {} ingress: - from: - namespaceSelector: matchLabels: role: management-ui
Terapkan kebijakan ini untuk mengizinkan klien:
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: client name: allow-ui spec: podSelector: matchLabels: {} ingress: - from: - namespaceSelector: matchLabels: role: management-ui
Anda dapat menggunakan perintah berikut untuk menerapkan kedua kebijakan:
kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/apply_network_policies.files/allow-ui.yaml kubectl apply -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/apply_network_policies.files/allow-ui-client.yaml
-
Segarkan peramban Anda. Anda melihat bahwa antarmuka pengguna manajemen dapat mencapai node lagi, tetapi node tidak dapat berkomunikasi satu sama lain.
-
Terapkan kebijakan jaringan berikut untuk mengizinkan lalu lintas dari layanan front-end ke layanan back-end:
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: stars name: backend-policy spec: podSelector: matchLabels: role: backend ingress: - from: - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 6379
-
Segarkan peramban Anda. Anda melihat bahwa front-end dapat berkomunikasi dengan back-end.
-
Terapkan kebijakan jaringan berikut untuk mengizinkan lalu lintas dari klien ke layanan front-end:
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: namespace: stars name: frontend-policy spec: podSelector: matchLabels: role: frontend ingress: - from: - namespaceSelector: matchLabels: role: client ports: - protocol: TCP port: 80
-
Segarkan peramban Anda. Anda melihat bahwa klien dapat berkomunikasi dengan layanan front-end. Layanan front-end masih dapat berkomunikasi dengan layanan back-end.
-
(Opsional) Setelah selesai dengan demo, Anda dapat menghapus sumber dayanya.
kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/client.yaml kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/frontend.yaml kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/backend.yaml kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/management-ui.yaml kubectl delete -f https://eksworkshop.com/beginner/120_network-policies/calico/stars_policy_demo/create_resources.files/namespace.yaml
Bahkan setelah menghapus sumber daya, masih ada titik akhir kebijakan jaringan pada node yang mungkin mengganggu jaringan di cluster Anda dengan cara yang tidak terduga. Satu-satunya cara pasti untuk menghapus aturan ini adalah dengan me-reboot node atau menghentikan semua node dan mendaur ulangnya. Untuk mengakhiri semua simpul, atur jumlah Grup Auto Scaling yang diinginkan ke 0, lalu buat cadangan ke jumlah yang diinginkan, atau cukup hentikan simpul.
Pemecahan masalah kebijakan jaringan
Anda dapat memecahkan masalah dan menyelidiki koneksi jaringan yang menggunakan kebijakan jaringan dengan membaca Log kebijakan jaringan dan dengan menjalankan alat dari. SDK eBPF
Log kebijakan jaringan
Apakah koneksi diizinkan atau ditolak oleh kebijakan jaringan dicatat dalam log aliran. Log kebijakan jaringan pada setiap node menyertakan log aliran untuk setiap pod yang memiliki kebijakan jaringan. Log kebijakan jaringan disimpan di/var/log/aws-routed-eni/network-policy-agent.log
. Contoh berikut adalah dari sebuah network-policy-agent.log
file:
{"level":"info","timestamp":"2023-05-30T16:05:32.573Z","logger":"ebpf-client","msg":"Flow Info: ","Src
IP":"192.168.87.155","Src Port":38971,"Dest IP":"64.6.160","Dest
Port":53,"Proto":"UDP","Verdict":"ACCEPT"}
Log kebijakan jaringan dinonaktifkan secara default. Untuk mengaktifkan log kebijakan jaringan, ikuti langkah-langkah berikut:
catatan
Log kebijakan jaringan memerlukan 1 vCPU tambahan untuk aws-network-policy-agent
penampung dalam manifes daemonset VPC CNI. aws-node
Pengaya Amazon EKS
Add-on yang dikelola sendiri
Kirim log kebijakan jaringan ke Amazon CloudWatch Logs
Anda dapat memantau log kebijakan jaringan menggunakan layanan seperti Amazon CloudWatch Logs. Anda dapat menggunakan metode berikut untuk mengirim log kebijakan jaringan ke CloudWatch Log.
Untuk kluster EKS, log kebijakan akan ditempatkan di bawah /aws/eks/
dan untuk klaster K8S yang dikelola sendiri, log akan ditempatkan di bawah /. cluster-name
/cluster//aws/k8s-cluster/cluster
Kirim log kebijakan jaringan dengan Amazon VPC CNI plugin for Kubernetes
Jika Anda mengaktifkan kebijakan jaringan, kontainer kedua akan ditambahkan ke aws-node
pod untuk agen node. Agen node ini dapat mengirim log kebijakan jaringan ke CloudWatch Log.
catatan
Hanya log kebijakan jaringan yang dikirim oleh agen node. Log lain yang dibuat oleh VPC CNI tidak disertakan.
Prasyarat
-
Tambahkan izin berikut sebagai bait atau kebijakan terpisah ke peran IAM yang Anda gunakan untuk CNI VPC.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
Pengaya Amazon EKS
Add-on yang dikelola sendiri
Mengirim log kebijakan jaringan dengan Fluent Bit daemonset
Jika Anda menggunakan Fluent Bit dalam daemonset untuk mengirim log dari node Anda, Anda dapat menambahkan konfigurasi untuk menyertakan log kebijakan jaringan dari kebijakan jaringan. Anda dapat menggunakan konfigurasi contoh berikut:
[INPUT] Name tail Tag eksnp.* Path /var/log/aws-routed-eni/network-policy-agent*.log Parser json DB /var/log/aws-routed-eni/flb_npagent.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10
Termasuk eBPF SDK
Amazon VPC CNI plugin for KubernetesMenginstal koleksi alat eBPF SDK pada node. Anda dapat menggunakan alat eBPF SDK untuk mengidentifikasi masalah dengan kebijakan jaringan. Misalnya, perintah berikut mencantumkan program yang berjalan pada node.
sudo /opt/cni/bin/aws-eks-na-cli ebpf progs
Untuk menjalankan perintah ini, Anda dapat menggunakan metode apa pun untuk terhubung ke node.
Kuberneteskebijakan jaringan
Untuk menerapkan kebijakan Kubernetes jaringan, Anda membuat Kubernetes NetworkPolicy
objek dan menerapkannya ke klaster Anda. NetworkPolicy
objek dicakup ke namespace. Anda menerapkan kebijakan untuk mengizinkan atau menolak lalu lintas Pods berdasarkan pemilih label, ruang nama, dan rentang alamat IP. Untuk informasi selengkapnya tentang membuat NetworkPolicy
objek, lihat Kebijakan Jaringan
Penegakan Kubernetes NetworkPolicy
objek diimplementasikan menggunakanExtended Berkeley Packet Filter (eBPF). Sehubungan dengan implementasi iptables
berbasis, ia menawarkan karakteristik latensi dan kinerja yang lebih rendah, termasuk pengurangan pemanfaatan CPU dan menghindari pencarian berurutan. Selain itu, eBPF probe menyediakan akses ke data kaya konteks yang membantu men-debug masalah tingkat kernel yang kompleks dan meningkatkan observabilitas. Amazon EKS mendukung eksportir eBPF berbasis yang memanfaatkan probe untuk mencatat hasil kebijakan pada setiap node dan mengekspor data ke pengumpul log eksternal untuk membantu debugging. Untuk informasi lebih lanjut, lihat dokumentasi eBPF