

 **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
<a name="hybrid-nodes-network-policies"></a>

 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](cni-network-policy.md) 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.](https://kubernetes.io/docs/concepts/services-networking/network-policies/)

## Konfigurasikan kebijakan jaringan
<a name="hybrid-nodes-configure-network-policies"></a>

### Pertimbangan
<a name="_considerations"></a>
+  AWS mendukung Kebijakan Jaringan Kubernetes hulu dan spesifikasi untuk pod ingress dan egress. AWS saat ini tidak mendukung `CiliumNetworkPolicy` atau`CiliumClusterwideNetworkPolicy`.
+ 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](https://docs.cilium.io/en/stable/security/policy/intro/#policy-mode-default) [penegakan kebijakan](https://docs.cilium.io/en/stable/security/policy/intro/#policy-enforcement-modes).
+ 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.
+ `ipBlock`Bidang tidak dapat digunakan untuk secara selektif mengizinkan atau menolak alamat IP to/from pod lalu lintas ([\#9209](https://github.com/cilium/cilium/issues/9209)). Menggunakan `ipBlock` penyeleksi untuk node IPs adalah fitur beta di Cilium dan tidak didukung oleh. AWS
+ Lihat [NetworkPolicy sumber daya](https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource) dalam dokumentasi Kubernetes untuk informasi tentang bidang yang tersedia untuk Kebijakan Jaringan Kubernetes.

### Prasyarat
<a name="_prerequisites"></a>
+ Cilium dipasang mengikuti instruksi di. [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md)
+ Helm diinstal di lingkungan baris perintah Anda, lihat instruksi [Setup](helm.md) Helm.

### Prosedur
<a name="_procedure"></a>

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](https://istio.io/latest/docs/examples/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
     ```

  1. 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
     ```

  1. 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
     ```

  1. 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>
     ```

  1. 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
     ```

  1. 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
     ```

  1. Terapkan kebijakan jaringan tolak ke klaster Anda.

     ```
     kubectl apply -f network-policy-default-deny-bookinfo.yaml
     ```

  1. 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
     ```

  1. 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
       ```

  1. Terapkan kebijakan jaringan productpage ke klaster Anda.

     ```
     kubectl apply -f network-policy-productpage.yaml
     ```

  1. 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."}
     ```

  1. 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
     ```

  1. 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
     ```

  1. 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"]
     ```

  1. 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
     ```

  1. 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}}
     ```

  1. 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
     ```