Konfigurasikan Kebijakan Jaringan Kubernetes untuk node hybrid - 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.

Konfigurasikan Kebijakan Jaringan Kubernetes untuk node hybrid

AWS mendukung Kebijakan Jaringan Kubernetes (Layer 3/Layer 4) untuk lalu lintas masuk dan keluar pod saat menggunakan Cilium sebagai CNI dengan EKS Hybrid Nodes. Jika Anda menjalankan kluster EKS dengan node di AWS Cloud, AWS mendukung Amazon VPC CNI untuk Kebijakan Jaringan Kubernetes.

Topik ini membahas cara mengkonfigurasi Kebijakan Jaringan Cilium dan Kubernetes dengan EKS Hybrid Nodes. Untuk informasi rinci tentang Kebijakan Jaringan Kubernetes, lihat Kebijakan Jaringan Kubernetes di dokumentasi Kubernetes.

Konfigurasikan kebijakan jaringan

Pertimbangan

  • AWS mendukung Kebijakan Jaringan Kubernetes hulu dan spesifikasi untuk pod ingress dan egress. AWS saat ini tidak mendukung CiliumNetworkPolicy atauCiliumClusterwideNetworkPolicy.

  • Nilai policyEnforcementMode Helm dapat digunakan untuk mengontrol perilaku penegakan kebijakan Cilium default. Perilaku default memungkinkan semua lalu lintas keluar dan masuk. Ketika titik akhir dipilih oleh kebijakan jaringan, ia akan beralih ke status default-deny, di mana hanya lalu lintas yang diizinkan secara eksplisit yang diizinkan. Lihat dokumentasi Cilium untuk informasi selengkapnya tentang mode kebijakan default dan mode penegakan kebijakan.

  • Jika Anda mengubah policyEnforcementMode instalasi Cilium yang ada, Anda harus memulai ulang agen Cilium DaemonSet untuk menerapkan mode penegakan kebijakan baru.

  • Gunakan namespaceSelector dan podSelector untuk mengizinkan atau menolak to/from ruang nama lalu lintas dan pod dengan label yang cocok. The namespaceSelector dan podSelector dapat digunakan dengan matchLabels atau matchExpressions untuk memilih namespace dan pod berdasarkan label mereka.

  • Gunakan ingress.ports dan egress.ports untuk mengizinkan atau menolak to/from pelabuhan lalu lintas dan protokol.

  • ipBlockBidang tidak dapat digunakan untuk secara selektif mengizinkan atau menolak alamat IP to/from pod lalu lintas (#9209). Menggunakan ipBlock penyeleksi untuk node IPs adalah fitur beta di Cilium dan tidak didukung oleh. AWS

  • Lihat NetworkPolicy sumber daya dalam dokumentasi Kubernetes untuk informasi tentang bidang yang tersedia untuk Kebijakan Jaringan Kubernetes.

Prasyarat

Prosedur

Prosedur berikut mengatur kebijakan jaringan untuk aplikasi layanan mikro sampel sehingga komponen hanya dapat berbicara dengan komponen lain yang diperlukan agar aplikasi berfungsi. Prosedur ini menggunakan aplikasi layanan mikro sampel Istio Bookinfo.

Aplikasi Bookinfo terdiri dari empat layanan mikro terpisah dengan hubungan berikut:

  • halaman produk. Layanan mikro halaman produk memanggil detail dan ulasan layanan mikro untuk mengisi halaman.

  • rincian. Detailnya microservice berisi informasi buku.

  • ulasan. Ulasan microservice berisi ulasan buku. Ini juga menyebut peringkat microservice.

  • peringkat. Layanan mikro peringkat berisi informasi peringkat buku yang menyertai ulasan buku.

    1. Buat aplikasi sampel.

      kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
    2. Konfirmasikan aplikasi berjalan dengan sukses dan catat alamat IP pod untuk microservice productpage. Anda akan menggunakan alamat IP pod ini untuk menanyakan setiap layanan mikro pada langkah selanjutnya.

      kubectl get pods -o wide
      NAME READY STATUS RESTARTS AGE IP NODE details-v1-766844796b-9wff2 1/1 Running 0 7s 10.86.3.7 mi-0daa253999fe92daa productpage-v1-54bb874995-lwfgg 1/1 Running 0 7s 10.86.2.193 mi-082f73826a163626e ratings-v1-5dc79b6bcd-59njm 1/1 Running 0 7s 10.86.2.232 mi-082f73826a163626e reviews-v1-598b896c9d-p2289 1/1 Running 0 7s 10.86.2.47 mi-026d6a261e355fba7 reviews-v2-556d6457d-djktc 1/1 Running 0 7s 10.86.3.58 mi-0daa253999fe92daa reviews-v3-564544b4d6-g8hh4 1/1 Running 0 7s 10.86.2.69 mi-09183e8a3d755abf6
    3. Buat pod yang akan digunakan secara keseluruhan untuk menguji kebijakan jaringan. Perhatikan bahwa pod dibuat di default namespace dengan label. access: true

      kubectl run curl-pod --image=curlimages/curl -i --tty --labels=access=true --namespace=default --overrides='{"spec": { "nodeSelector": {"eks.amazonaws.com/compute-type": "hybrid"}}}' -- /bin/sh
    4. Uji akses ke microservice productpage. Pada contoh di bawah ini, kita menggunakan alamat IP pod dari productpage pod (10.86.2.193) untuk query microservice. Ganti ini dengan alamat IP pod dari pod productpage di lingkungan Anda.

      curl -s http://10.86.2.193:9080/productpage | grep -o "<title>.*</title>"
      <title>Simple Bookstore App</title>
    5. Anda dapat keluar dari test curl pod dengan mengetik exit dan dapat menyambung kembali ke pod dengan menjalankan perintah berikut.

      kubectl attach curl-pod -c curl-pod -i -t
    6. Untuk mendemonstrasikan efek kebijakan jaringan dalam langkah-langkah berikut, pertama-tama kami membuat kebijakan jaringan yang menolak semua lalu lintas untuk layanan BookInfo mikro. Buat file bernama network-policy-deny-bookinfo.yaml yang mendefinisikan kebijakan jaringan penolakan.

      apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-bookinfo namespace: default spec: podSelector: matchExpressions: - key: app operator: In values: ["productpage", "details", "reviews", "ratings"] policyTypes: - Ingress - Egress
    7. Terapkan kebijakan jaringan tolak ke klaster Anda.

      kubectl apply -f network-policy-default-deny-bookinfo.yaml
    8. Uji akses ke BookInfo aplikasi. Pada contoh di bawah ini, kita menggunakan alamat IP pod dari productpage pod (10.86.2.193) untuk query microservice. Ganti ini dengan alamat IP pod dari pod productpage di lingkungan Anda.

      curl http://10.86.2.193:9080/productpage --max-time 10
      curl: (28) Connection timed out after 10001 milliseconds
    9. Buat file bernama network-policy-productpage.yaml yang mendefinisikan kebijakan jaringan productpage. Kebijakan ini memiliki aturan berikut:

      • memungkinkan lalu lintas masuk dari pod dengan label access: true (pod curl yang dibuat pada langkah sebelumnya)

      • memungkinkan lalu lintas TCP keluar di port 9080 untuk detail, ulasan, dan peringkat layanan mikro

      • memungkinkan TCP/UDP lalu lintas keluar pada port untuk 53 CoreDNS yang berjalan di namespace kube-system

        apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: productpage-policy namespace: default spec: podSelector: matchLabels: app: productpage policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: access: "true" egress: - to: - podSelector: matchExpressions: - key: app operator: In values: ["details", "reviews", "ratings"] ports: - port: 9080 protocol: TCP - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kube-system podSelector: matchLabels: k8s-app: kube-dns ports: - port: 53 protocol: UDP - port: 53 protocol: TCP
    10. Terapkan kebijakan jaringan productpage ke klaster Anda.

      kubectl apply -f network-policy-productpage.yaml
    11. Connect ke curl pod dan uji akses ke aplikasi Bookinfo. Akses ke layanan mikro halaman produk sekarang diizinkan, tetapi layanan mikro lainnya masih ditolak karena masih tunduk pada kebijakan jaringan penolakan. Dalam contoh di bawah ini, kita menggunakan alamat IP pod dari productpage pod (10.86.2.193) untuk query microservice. Ganti ini dengan alamat IP pod dari pod productpage di lingkungan Anda.

      kubectl attach curl-pod -c curl-pod -i -t
      curl -s http://10.86.2.193:9080/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
      curl -s http://10.86.2.193:9080/api/v1/products/1 {"error": "Sorry, product details are currently unavailable for this book."}
      curl -s http://10.86.2.193:9080/api/v1/products/1/reviews {"error": "Sorry, product reviews are currently unavailable for this book."}
      curl -s http://10.86.2.193:9080/api/v1/products/1/ratings {"error": "Sorry, product ratings are currently unavailable for this book."}
    12. Buat file bernama network-policy-details.yaml yang mendefinisikan kebijakan jaringan detail. Kebijakan ini hanya mengizinkan lalu lintas masuk dari layanan mikro halaman produk.

      apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: details-policy namespace: default spec: podSelector: matchLabels: app: details policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: productpage
    13. Buat file bernama network-policy-reviews.yaml yang mendefinisikan kebijakan jaringan ulasan. Kebijakan ini hanya mengizinkan lalu lintas masuk dari layanan mikro halaman produk dan hanya mengalihkan lalu lintas ke layanan mikro peringkat dan CoreDNS.

      apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: reviews-policy namespace: default spec: podSelector: matchLabels: app: reviews policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: app: productpage egress: - to: - podSelector: matchLabels: app: ratings - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kube-system podSelector: matchLabels: k8s-app: kube-dns ports: - port: 53 protocol: UDP - port: 53 protocol: TCP
    14. Buat file bernama network-policy-ratings.yaml yang mendefinisikan kebijakan jaringan peringkat. Kebijakan ini hanya mengizinkan lalu lintas masuk dari halaman produk dan meninjau layanan mikro.

      apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: ratings-policy namespace: default spec: podSelector: matchLabels: app: ratings policyTypes: - Ingress ingress: - from: - podSelector: matchExpressions: - key: app operator: In values: ["productpage", "reviews"]
    15. Terapkan kebijakan jaringan detail, ulasan, dan peringkat ke klaster Anda.

      kubectl apply -f network-policy-details.yaml kubectl apply -f network-policy-reviews.yaml kubectl apply -f network-policy-ratings.yaml
    16. Connect ke curl pod dan uji akses ke aplikasi Bookinfo. Dalam contoh di bawah ini, kita menggunakan alamat IP pod dari productpage pod (10.86.2.193) untuk query microservice. Ganti ini dengan alamat IP pod dari pod productpage di lingkungan Anda.

      kubectl attach curl-pod -c curl-pod -i -t

      Uji detailnya microservice.

      curl -s http://10.86.2.193:9080/api/v1/products/1
      {"id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890"}

      Uji ulasan microservice.

      curl -s http://10.86.2.193:9080/api/v1/products/1/reviews
      {"id": "1", "podname": "reviews-v1-598b896c9d-p2289", "clustername": "null", "reviews": [{"reviewer": "Reviewer1", "text": "An extremely entertaining play by Shakespeare. The slapstick humour is refreshing!"}, {"reviewer": "Reviewer2", "text": "Absolutely fun and entertaining. The play lacks thematic depth when compared to other plays by Shakespeare."}]}

      Uji peringkat microservice.

      curl -s http://10.86.2.193:9080/api/v1/products/1/ratings
      {"id": 1, "ratings": {"Reviewer1": 5, "Reviewer2": 4}}
    17. Bersihkan sumber daya yang Anda buat dalam prosedur ini.

      kubectl delete -f network-policy-deny-bookinfo.yaml kubectl delete -f network-policy-productpage.yaml kubectl delete -f network-policy-details.yaml kubectl delete -f network-policy-reviews.yaml kubectl delete -f network-policy-ratings.yaml kubectl delete -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml kubectl delete pod curl-pod