Konfigurasikan klaster Anda untuk kebijakan Kubernetes jaringan - Amazon EKS

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 dalam Kubernetes dokumentasi.

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 atau IPv6 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: atau egress: 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 ke strict dalam aws-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. 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 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:

    • IPv6pod dengan ENABLE_V4_EGRESS variabel disetel ketrue. Variabel ini memungkinkan fitur IPv4 keluar untuk menghubungkan pod IPv6 ke IPv4 titik akhir seperti yang berada di luar klaster. 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.

  • Fitur kebijakan jaringan menggunakan port 8162 pada node untuk metrik secara default. Juga, fitur yang digunakan port 8163 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 CNI v1.14.1 atau yang lebih baru, Anda dapat mengubah port port ini di tempat-tempat berikut:

    AWS Management Console
    1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/home#/clusters.

    2. Di panel navigasi kiri, pilih Cluster, lalu pilih nama cluster yang ingin Anda konfigurasikan untuk add-on Amazon VPC CNI.

    3. Pilih tab Add-ons.

    4. Pilih kotak di kanan atas kotak add-on dan kemudian pilih Edit.

    5. Pada halaman Konfigurasi nama addon:

      1. Pilih versi v1.14.0-eksbuild.3 atau yang lebih baru dalam daftar dropdown Versi.

      2. Perluas pengaturan konfigurasi opsional.

      3. Masukkan kunci "enableNetworkPolicy": dan nilai JSON "true" dalam nilai Konfigurasi. Teks yang dihasilkan harus berupa objek JSON yang valid. Jika kunci dan nilai ini adalah satu-satunya data dalam kotak teks, kelilingi kunci dan nilai dengan kurawal kurawal. {}

        Contoh berikut mengaktifkan fitur kebijakan jaringan, log kebijakan jaringan diaktifkan, log kebijakan jaringan yang dikirim ke Amazon CloudWatch Logs, dan metrik serta probe kesehatan disetel ke nomor port default:

      { "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true", "enableCloudWatchLogs": "true", "healthProbeBindAddr": "8163", "metricsBindAddr": "8162" } }
    Helm

    Jika Anda telah menginstal Amazon VPC CNI plugin for Kubernetes melaluihelm, Anda dapat memperbarui konfigurasi untuk mengubah port.

    • Jalankan perintah berikut untuk mengubah port. Tetapkan nomor port dalam nilai untuk kunci nodeAgent.metricsBindAddr atau kuncinodeAgent.healthProbeBindAddr, masing-masing.

      helm upgrade --set nodeAgent.metricsBindAddr=8162 --set nodeAgent.healthProbeBindAddr=8163 aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
    kubectl
    1. Buka aws-node DaemonSet di editor Anda.

      kubectl edit daemonset -n kube-system aws-node
    2. Ganti nomor port dalam argumen perintah berikut di dalam aws-network-policy-agent wadah dalam args: manifes daemonset VPC CNIaws-node.

      - args: - --metrics-bind-addr=:8162 - --health-probe-bind-addr=:8163

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 mengganti my-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 text

    Versi 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 dari1.14, lihat Memperbarui add-on Amazon EKS untuk meningkatkan ke versi 1.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

  1. 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 untuk 1.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 ke v1.0.2 versi atau yang lebih baru, Anda dapat melewati langkah ini.

    1. Pasang sistem file Berkeley Packet Filter (BPF) pada setiap node Anda.

      sudo mount -t bpf bpffs /sys/fs/bpf
    2. Kemudian, tambahkan perintah yang sama ke data pengguna Anda di template peluncuran untuk Grup Auto Scaling Amazon EC2 Anda.

  2. Aktifkan kebijakan jaringan di VPC CNI
    1. 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 text

      Jika 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

        AWS Management Console
        1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/home#/clusters.

        2. Di panel navigasi kiri, pilih Cluster, lalu pilih nama cluster yang ingin Anda konfigurasikan untuk add-on Amazon VPC CNI.

        3. Pilih tab Add-ons.

        4. Pilih kotak di kanan atas kotak add-on dan kemudian pilih Edit.

        5. Pada halaman Konfigurasi nama addon:

          1. Pilih versi v1.14.0-eksbuild.3 atau yang lebih baru dalam daftar dropdown Versi.

          2. Perluas pengaturan konfigurasi opsional.

          3. Masukkan kunci "enableNetworkPolicy": dan nilai JSON "true" dalam nilai Konfigurasi. Teks yang dihasilkan harus berupa objek JSON yang valid. Jika kunci dan nilai ini adalah satu-satunya data dalam kotak teks, kelilingi kunci dan nilai dengan kurawal kurawal. {} Contoh berikut menunjukkan kebijakan jaringan diaktifkan:

            { "enableNetworkPolicy": "true" }

            Screenshot berikut menunjukkan contoh skenario ini.

          AWS Management Console menampilkan add-on VPC CNI dengan kebijakan jaringan dalam konfigurasi opsional.
        AWS CLI
        • Jalankan AWS CLI perintah berikut. Ganti my-cluster dengan nama cluster Anda dan peran IAM ARN dengan peran yang Anda gunakan.

          aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"enableNetworkPolicy": "true"}'
      • Add-on yang dikelola sendiri

        Helm

        Jika Anda telah menginstal Amazon VPC CNI plugin for Kubernetes melaluihelm, Anda dapat memperbarui konfigurasi untuk mengaktifkan kebijakan jaringan.

        • Jalankan perintah berikut untuk mengaktifkan kebijakan jaringan.

          helm upgrade --set enableNetworkPolicy=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
        kubectl
        1. Buka amazon-vpc-cni ConfigMap di editor Anda.

          kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml
        2. Tambahkan baris berikut ke data dalamConfigMap.

          enable-network-policy-controller: "true"

          Setelah Anda menambahkan baris, Anda ConfigMap akan terlihat seperti contoh berikut.

          apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-network-policy-controller: "true"
        3. Buka aws-node DaemonSet di editor Anda.

          kubectl edit daemonset -n kube-system aws-node
        4. Ganti false dengan true dalam argumen perintah di --enable-network-policy=false dalam aws-network-policy-agent wadah args: dalam manifes daemonset VPC CNIaws-node.

          - args: - --enable-network-policy=true
  3. 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)   24h

    Jika kebijakan jaringan diaktifkan, ada 2 kontainer dalam aws-node pod. Di versi sebelumnya dan jika kebijakan jaringan dinonaktifkan, hanya ada satu kontainer di aws-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
  1. 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
  2. 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 di READY kolom berbeda dari yang ada di output berikut. Jangan lanjutkan sampai Anda melihat pod dengan nama yang mirip dan semuanya ada Running di STATUS kolom.

    NAMESPACE NAME READY STATUS RESTARTS AGE [...] client client-xlffc 1/1 Running 0 5m19s [...] management-ui management-ui-qrb2g 1/1 Running 0 5m24s stars backend-sz87q 1/1 Running 0 5m23s stars frontend-cscnf 1/1 Running 0 5m21s [...]
  3. Untuk terhubung ke antarmuka pengguna manajemen, sambungkan ke layanan EXTERNAL-IP yang berjalan di klaster Anda:

    kubectl get service/management-ui -n management-ui
  4. 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.

    Buka kebijakan jaringan
  5. Terapkan kebijakan jaringan berikut di ruang nama stars dan client 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
  6. Segarkan peramban Anda. Anda melihat bahwa antarmuka pengguna manajemen tidak dapat lagi menjangkau salah satu node, sehingga tidak muncul di antarmuka pengguna.

  7. 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
  8. Segarkan peramban Anda. Anda melihat bahwa antarmuka pengguna manajemen dapat mencapai node lagi, tetapi node tidak dapat berkomunikasi satu sama lain.

    Kebijakan jaringan akses UI
  9. 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
  10. Segarkan peramban Anda. Anda melihat bahwa front-end dapat berkomunikasi dengan back-end.

    Kebijakan front-end ke back-end
  11. 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
  12. Segarkan peramban Anda. Anda melihat bahwa klien dapat berkomunikasi dengan layanan front-end. Layanan front-end masih dapat berkomunikasi dengan layanan back-end.

    Kebijakan jaringan akhir
  13. (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

AWS Management Console
  1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/home#/clusters.

  2. Di panel navigasi kiri, pilih Cluster, lalu pilih nama cluster yang ingin Anda konfigurasikan untuk add-on Amazon VPC CNI.

  3. Pilih tab Add-ons.

  4. Pilih kotak di kanan atas kotak add-on dan kemudian pilih Edit.

  5. Pada halaman Konfigurasi nama addon:

    1. Pilih versi v1.14.0-eksbuild.3 atau yang lebih baru dalam daftar dropdown Versi.

    2. Perluas pengaturan konfigurasi opsional.

    3. Masukkan kunci JSON tingkat atas "nodeAgent": dan nilai adalah objek dengan kunci "enablePolicyEventLogs": dan nilai "true" dalam nilai Konfigurasi. Teks yang dihasilkan harus berupa objek JSON yang valid. Contoh berikut menunjukkan kebijakan jaringan dan log kebijakan jaringan diaktifkan, dan log kebijakan jaringan dikirim ke CloudWatch Log:

      { "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true" } }

Screenshot berikut menunjukkan contoh skenario ini.

AWS Management Console menampilkan add-on VPC CNI dengan kebijakan jaringan dan CloudWatch Log dalam konfigurasi opsional.
AWS CLI
  • Jalankan AWS CLI perintah berikut. Ganti my-cluster dengan nama cluster Anda dan ganti peran IAM ARN dengan peran yang Anda gunakan.

    aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"nodeAgent": {"enablePolicyEventLogs": "true"}}'

Add-on yang dikelola sendiri

Helm

Jika Anda telah menginstal Amazon VPC CNI plugin for Kubernetes melaluihelm, Anda dapat memperbarui konfigurasi untuk menulis log kebijakan jaringan.

  • Jalankan perintah berikut untuk mengaktifkan kebijakan jaringan.

    helm upgrade --set nodeAgent.enablePolicyEventLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl

Jika Anda telah menginstal Amazon VPC CNI plugin for Kubernetes melaluikubectl, Anda dapat memperbarui konfigurasi untuk menulis log kebijakan jaringan.

  1. Buka aws-node DaemonSet di editor Anda.

    kubectl edit daemonset -n kube-system aws-node
  2. Ganti false dengan true dalam argumen perintah di --enable-policy-event-logs=false dalam aws-network-policy-agent wadah args: dalam manifes daemonset VPC CNIaws-node.

    - args: - --enable-policy-event-logs=true

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/cluster-name/cluster/ dan untuk klaster K8S yang dikelola sendiri, log akan ditempatkan di bawah /. /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
AWS Management Console
  1. Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/home#/clusters.

  2. Di panel navigasi kiri, pilih Cluster, lalu pilih nama cluster yang ingin Anda konfigurasikan untuk add-on Amazon VPC CNI.

  3. Pilih tab Add-ons.

  4. Pilih kotak di kanan atas kotak add-on dan kemudian pilih Edit.

  5. Pada halaman Konfigurasi nama addon:

    1. Pilih versi v1.14.0-eksbuild.3 atau yang lebih baru dalam daftar dropdown Versi.

    2. Perluas pengaturan konfigurasi opsional.

    3. Masukkan kunci JSON tingkat atas "nodeAgent": dan nilai adalah objek dengan kunci "enableCloudWatchLogs": dan nilai "true" dalam nilai Konfigurasi. Teks yang dihasilkan harus berupa objek JSON yang valid. Contoh berikut menunjukkan kebijakan jaringan dan log kebijakan jaringan diaktifkan, dan log dikirim ke CloudWatch Log:

      { "enableNetworkPolicy": "true", "nodeAgent": { "enablePolicyEventLogs": "true", "enableCloudWatchLogs": "true", } }

Screenshot berikut menunjukkan contoh skenario ini.

AWS Management Console menampilkan add-on VPC CNI dengan kebijakan jaringan dan CloudWatch Log dalam konfigurasi opsional.
AWS CLI
  • Jalankan AWS CLI perintah berikut. Ganti my-cluster dengan nama cluster Anda dan ganti peran IAM ARN dengan peran yang Anda gunakan.

    aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"nodeAgent": {"enablePolicyEventLogs": "true", "enableCloudWatchLogs": "true"}}'
Add-on yang dikelola sendiri
Helm

Jika Anda telah menginstal Amazon VPC CNI plugin for Kubernetes melaluihelm, Anda dapat memperbarui konfigurasi untuk mengirim log kebijakan jaringan ke CloudWatch Log.

  • Jalankan perintah berikut untuk mengaktifkan log kebijakan jaringan dan mengirimkannya ke CloudWatch Log.

    helm upgrade --set nodeAgent.enablePolicyEventLogs=true --set nodeAgent.enableCloudWatchLogs=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
  1. Buka aws-node DaemonSet di editor Anda.

    kubectl edit daemonset -n kube-system aws-node
  2. Ganti false dengan true dalam dua argumen perintah --enable-policy-event-logs=false dan --enable-cloudwatch-logs=false dalam aws-network-policy-agent wadah dalam args: manifes daemonset VPC CNIaws-node.

    - args: - --enable-policy-event-logs=true - --enable-cloudwatch-logs=true

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. NetworkPolicyobjek 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 dalam Kubernetes dokumentasi.

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.