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 modepenegakan kebijakan . -
Jika Anda mengubah
policyEnforcementMode
instalasi Cilium yang ada, Anda harus memulai ulang agen Cilium DaemonSet untuk menerapkan mode penegakan kebijakan baru. -
Gunakan
namespaceSelector
danpodSelector
untuk mengizinkan atau menolak to/from ruang nama lalu lintas dan pod dengan label yang cocok. ThenamespaceSelector
danpodSelector
dapat digunakan denganmatchLabels
ataumatchExpressions
untuk memilih namespace dan pod berdasarkan label mereka. -
Gunakan
ingress.ports
danegress.ports
untuk mengizinkan atau menolak to/from pelabuhan lalu lintas dan protokol. -
ipBlock
Bidang 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
-
Cilium dipasang mengikuti instruksi di. Konfigurasikan CNI untuk node hybrid
-
Helm diinstal di lingkungan baris perintah Anda, lihat instruksi Setup Helm.
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.
-
Buat aplikasi sampel.
kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
-
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
-
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
-
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>
-
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
-
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
-
Terapkan kebijakan jaringan tolak ke klaster Anda.
kubectl apply -f network-policy-default-deny-bookinfo.yaml
-
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
-
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 namespacekube-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
-
-
Terapkan kebijakan jaringan productpage ke klaster Anda.
kubectl apply -f network-policy-productpage.yaml
-
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."}
-
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
-
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
-
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"]
-
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
-
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}}
-
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
-