

 **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 jaringan aplikasi, add-on, dan webhook untuk node hybrid
<a name="hybrid-nodes-configure"></a>

Setelah Anda membuat kluster EKS untuk node hibrida, konfigurasikan kemampuan tambahan untuk jaringan aplikasi (CNI, BGP, Ingress, Load Balancing, Kebijakan Jaringan), add-on, webhook, dan pengaturan proxy. Untuk daftar lengkap EKS dan add-on komunitas yang kompatibel dengan node hibrida, lihat[Konfigurasikan add-on untuk node hybrid](hybrid-nodes-add-ons.md).

 **Wawasan kluster EKS EKS menyertakan pemeriksaan wawasan untuk kesalahan konfigurasi dalam penyiapan node hibrid Anda yang dapat mengganggu fungsionalitas klaster atau beban** kerja Anda. Untuk informasi lebih lanjut tentang wawasan cluster, lihat[Bersiaplah untuk upgrade versi Kubernetes dan pecahkan masalah kesalahan konfigurasi dengan wawasan klaster](cluster-insights.md).

Berikut ini mencantumkan kemampuan umum dan add-on yang dapat Anda gunakan dengan node hybrid:
+  **Container Networking Interface (CNI)**: AWS mendukung [Cilium](https://docs.cilium.io/en/stable/index.html) sebagai CNI untuk node hybrid. Untuk informasi selengkapnya, lihat [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md). Perhatikan bahwa AWS VPC CNI tidak dapat digunakan dengan node hybrid.
+  **CoreDNS dan `kube-proxy`**: CoreDNS dan diinstal secara otomatis ketika node hybrid `kube-proxy` bergabung dengan cluster EKS. Add-on ini dapat dikelola sebagai add-on EKS setelah pembuatan cluster.
+  **Ingress dan Load Balancing**: Anda dapat menggunakan Load AWS Balancer Controller dan Application Load Balancer (ALB) atau Network Load Balancer (NLB) dengan tipe target untuk beban kerja yang berjalan pada node hybrid. `ip` AWS mendukung fitur load balancing Ingress, Gateway, dan Kubernetes Service bawaan Cilium untuk beban kerja yang berjalan pada node hybrid. Untuk informasi selengkapnya, lihat [Konfigurasikan Ingress Kubernetes untuk node hybrid](hybrid-nodes-ingress.md) dan [Konfigurasikan Layanan tipe LoadBalancer untuk node hibrida](hybrid-nodes-load-balancing.md).
+  **Metrik**: Anda dapat menggunakan Amazon Managed Service for Prometheus (AMP) tanpa agen scraper, Distro for Open Telemetry (ADOT) AWS , dan Amazon Observability Agent dengan node hybrid. CloudWatch Untuk menggunakan scraper tanpa agen AMP untuk metrik pod pada node hybrid, pod Anda harus dapat diakses dari VPC yang Anda gunakan untuk cluster EKS.
+  **Log**: Anda dapat mengaktifkan pencatatan bidang kontrol EKS untuk cluster berkemampuan node hibrida. Anda dapat menggunakan add-on ADOT EKS dan add-on Amazon CloudWatch Observability Agent EKS untuk node hybrid dan pod logging.
+  **Identitas Pod dan IRSA**: Anda dapat menggunakan EKS Pod Identities dan IAM Roles for Service Accounts (IRSA) dengan aplikasi yang berjalan pada node hybrid untuk mengaktifkan akses granular untuk pod Anda yang berjalan pada node hybrid dengan layanan lain. AWS 
+  **Webhooks**: Jika Anda menjalankan webhook, lihat pertimbangan dan langkah-langkah [Konfigurasikan webhook untuk node hybrid](hybrid-nodes-webhooks.md) untuk menjalankan webhook secara opsional di node cloud jika Anda tidak dapat membuat jaringan pod lokal dapat dirutekan.
+  **Proxy**: Jika Anda menggunakan server proxy di lingkungan lokal untuk lalu lintas yang meninggalkan pusat data atau lingkungan edge, Anda dapat mengonfigurasi node dan cluster hibrida untuk menggunakan server proxy Anda. Lihat informasi yang lebih lengkap di [Konfigurasikan proxy untuk node hybrid](hybrid-nodes-proxy.md).

**Topics**
+ [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md)
+ [Konfigurasikan add-on untuk node hybrid](hybrid-nodes-add-ons.md)
+ [Konfigurasikan webhook untuk node hybrid](hybrid-nodes-webhooks.md)
+ [Konfigurasikan proxy untuk node hybrid](hybrid-nodes-proxy.md)
+ [Konfigurasikan Cilium BGP untuk node hybrid](hybrid-nodes-cilium-bgp.md)
+ [Konfigurasikan Ingress Kubernetes untuk node hybrid](hybrid-nodes-ingress.md)
+ [Konfigurasikan Layanan tipe LoadBalancer untuk node hibrida](hybrid-nodes-load-balancing.md)
+ [Konfigurasikan Kebijakan Jaringan Kubernetes untuk node hybrid](hybrid-nodes-network-policies.md)

# Konfigurasikan CNI untuk node hybrid
<a name="hybrid-nodes-cni"></a>

Cilium adalah Container Networking Interface (CNI) yang AWS didukung untuk Amazon EKS Hybrid Nodes. Anda harus menginstal CNI untuk node hybrid agar siap melayani beban kerja. Node hibrida muncul dengan status `Not Ready` sampai CNI berjalan. Anda dapat mengelola CNI dengan alat pilihan Anda seperti Helm. Petunjuk pada halaman ini mencakup manajemen siklus hidup Cilium (instal, tingkatkan, hapus). Lihat[Ikhtisar Cilium Ingress dan Cilium Gateway](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium),[Jenis layanan LoadBalancer](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium-loadbalancer), dan [Konfigurasikan Kebijakan Jaringan Kubernetes untuk node hybrid](hybrid-nodes-network-policies.md) untuk cara mengonfigurasi Cilium untuk kebijakan ingress, load balancing, dan network.

Cilium tidak didukung oleh AWS saat berjalan di node di AWS Cloud. Amazon VPC CNI tidak kompatibel dengan node hybrid dan VPC CNI dikonfigurasi dengan anti-afinitas untuk label. `eks.amazonaws.com/compute-type: hybrid`

Dokumentasi Calico sebelumnya di halaman ini telah dipindahkan ke [EKS Hybrid Examples Repository](https://github.com/aws-samples/eks-hybrid-examples).

## Kompatibilitas versi
<a name="hybrid-nodes-cilium-version-compatibility"></a>

Versi cilium `v1.17.x` dan `v1.18.x` didukung untuk EKS Hybrid Nodes untuk setiap versi Kubernetes yang didukung di Amazon EKS.

**catatan**  
 Persyaratan kernel **Cilium v1.18.3: Karena persyaratan kernel** (kernel Linux >= 5.10), Cilium v1.18.3 tidak didukung pada:
+ Ubuntu 20.04
+ Red Hat Enterprise Linux (RHEL) 8

Untuk persyaratan sistem, lihat Persyaratan [sistem Cilium](https://docs.cilium.io/en/stable/operations/system_requirements/).

Lihat [dukungan versi Kubernetes untuk versi](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html) Kubernetes yang didukung oleh Amazon EKS. EKS Hybrid Nodes memiliki dukungan versi Kubernetes yang sama dengan cluster Amazon EKS dengan node cloud.

## Kemampuan yang didukung
<a name="hybrid-nodes-cilium-support"></a>

 AWS [memelihara build Cilium untuk EKS Hybrid Nodes yang didasarkan pada proyek Cilium open source.](https://github.com/cilium/cilium) Untuk menerima dukungan dari AWS Cilium, Anda harus menggunakan build Cilium yang AWS dikelola dan versi Cilium yang didukung.

 AWS memberikan dukungan teknis untuk konfigurasi default dari kemampuan Cilium berikut untuk digunakan dengan EKS Hybrid Nodes. Jika Anda berencana untuk menggunakan fungsionalitas di luar cakupan AWS dukungan, disarankan untuk mendapatkan dukungan komersial alternatif untuk Cilium atau memiliki keahlian internal untuk memecahkan masalah dan berkontribusi perbaikan pada proyek Cilium.


| Fitur Cilium | Didukung oleh AWS  | 
| --- | --- | 
|  Kesesuaian jaringan Kubernetes  |  Ya  | 
|  Konektivitas cluster inti  |  Ya  | 
|  Keluarga IP  |  IPv4  | 
|  Manajemen Siklus Hidup  |  Helm  | 
|  Mode Jaringan  |  Enkapsulasi VXLAN  | 
|  Manajemen Alamat IP (IPAM)  |  Lingkup Cluster Cilium IPAM  | 
|  Kebijakan Jaringan  |  Kebijakan Jaringan Kubernetes  | 
|  Protokol Gerbang Perbatasan (BGP)  |  Bidang Kontrol Cilium BGP  | 
|  Masuknya Kubernetes  |  Masuknya Cilium, Gerbang Cilium  | 
|   LoadBalancer Alokasi IP Layanan  |  Load Balancer Cilium IPAM  | 
|  Iklan Alamat LoadBalancer IP Layanan  |  Bidang Kontrol Cilium BGP  | 
|  penggantian kube-proxy  |  Ya  | 

## Pertimbangan silia
<a name="hybrid-nodes-cilium-considerations"></a>
+  **Repositori Helm** [- AWS menjadi tuan rumah bagan Cilium Helm di Amazon Elastic Container Registry Public (Amazon ECR Public) di Amazon EKS Cilium/Cilium.](https://gallery.ecr.aws/eks/cilium/cilium) Versi yang tersedia meliputi:
  + Silia v1.17.9: `oci://public.ecr.aws/eks/cilium/cilium:1.17.9-0` 
  + Silia v1.18.3: `oci://public.ecr.aws/eks/cilium/cilium:1.18.3-0` 

    Perintah dalam topik ini menggunakan repositori ini. Perhatikan bahwa `helm repo` perintah tertentu tidak valid untuk repositor Helm di Amazon ECR Public, jadi Anda tidak dapat merujuk ke repositori ini dari nama repo Helm lokal. Sebagai gantinya, gunakan URI lengkap di sebagian besar perintah.
+ [Secara default, Cilium dikonfigurasi untuk berjalan dalam mode overlay/tunnel dengan VXLAN sebagai metode enkapsulasi.](https://docs.cilium.io/en/stable/network/concepts/routing/#encapsulation) Mode ini memiliki persyaratan paling sedikit pada jaringan fisik yang mendasarinya.
+ Secara default, Cilium [menyamarkan](https://docs.cilium.io/en/stable/network/concepts/masquerading/) alamat IP sumber dari semua lalu lintas pod meninggalkan cluster ke alamat IP node. Jika Anda menonaktifkan masquerading, maka pod Anda CIDRs harus dapat dirutekan di jaringan lokal Anda.
+ Jika Anda menjalankan webhook pada node hybrid, pod Anda CIDRs harus dapat dirutekan di jaringan lokal Anda. Jika pod CIDRs Anda tidak dapat dirutekan di jaringan lokal, maka disarankan untuk menjalankan webhook di node cloud di cluster yang sama. Lihat [Konfigurasikan webhook untuk node hybrid](hybrid-nodes-webhooks.md) dan [Mempersiapkan jaringan untuk node hybrid](hybrid-nodes-networking.md) untuk informasi lebih lanjut.
+  AWS merekomendasikan penggunaan fungsionalitas BGP bawaan Cilium untuk membuat pod Anda CIDRs dapat dirutekan di jaringan lokal Anda. Untuk informasi lebih lanjut tentang cara mengkonfigurasi Cilium BGP dengan node hybrid, lihat. [Konfigurasikan Cilium BGP untuk node hybrid](hybrid-nodes-cilium-bgp.md)
+ IP Address Management (IPAM) default di Cilium disebut [Cluster Scope](https://docs.cilium.io/en/stable/network/concepts/ipam/cluster-pool/), di mana operator Cilium mengalokasikan alamat IP untuk setiap node berdasarkan pod yang dikonfigurasi pengguna. CIDRs

## Instal Cilium pada node hybrid
<a name="hybrid-nodes-cilium-install"></a>

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

1. Buat file YAMM bernama`cilium-values.yaml`. Contoh berikut mengonfigurasi Cilium untuk berjalan hanya pada node hibrida dengan menetapkan afinitas untuk `eks.amazonaws.com/compute-type: hybrid` label untuk agen dan operator Cilium.
   + Konfigurasikan `clusterPoolIpv4PodCIDRList` dengan pod yang sama dengan yang CIDRs Anda konfigurasikan untuk *jaringan pod jarak jauh* kluster EKS Anda. Misalnya, `10.100.0.0/24`. Operator Cilium mengalokasikan irisan alamat IP dari dalam ruang IP yang dikonfigurasi. `clusterPoolIpv4PodCIDRList` CIDR pod Anda tidak boleh tumpang tindih dengan node CIDR lokal, CIDR VPC Anda, atau CIDR layanan Kubernetes Anda.
   + Konfigurasikan `clusterPoolIpv4MaskSize` berdasarkan pod yang Anda butuhkan per node. Misalnya, `25` untuk ukuran segmen /25 128 pod per node.
   + Jangan mengubah `clusterPoolIpv4PodCIDRList` atau `clusterPoolIpv4MaskSize` setelah menerapkan Cilium di klaster Anda, lihat [Memperluas kumpulan klaster untuk informasi selengkapnya](https://docs.cilium.io/en/stable/network/concepts/ipam/cluster-pool/#expanding-the-cluster-pool).
   + Jika Anda menjalankan Cilium dalam mode penggantian kube-proxy, atur `kubeProxyReplacement: "true"` nilai Helm Anda dan pastikan Anda tidak memiliki penerapan kube-proxy yang berjalan pada node yang sama dengan Cilium.
   + Contoh di bawah ini menonaktifkan proxy Envoy Layer 7 (L7) yang digunakan Cilium untuk kebijakan dan ingress jaringan L7. Untuk informasi selengkapnya, lihat [Konfigurasikan Kebijakan Jaringan Kubernetes untuk node hybrid](hybrid-nodes-network-policies.md) dan [Ikhtisar Cilium Ingress dan Cilium Gateway](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium).
   + Contoh di bawah ini mengonfigurasi`loadBalancer.serviceTopology`: `true` agar Distribusi Lalu Lintas Layanan berfungsi dengan benar jika Anda mengonfigurasinya untuk layanan Anda. Untuk informasi selengkapnya, lihat [Konfigurasikan Distribusi Lalu Lintas Layanan](hybrid-nodes-webhooks.md#hybrid-nodes-mixed-service-traffic-distribution).
   + Untuk daftar lengkap nilai Helm untuk Cilium, lihat [referensi Helm](https://docs.cilium.io/en/stable/helm-reference/) di dokumentasi Cilium.

     ```
     affinity:
       nodeAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
           nodeSelectorTerms:
           - matchExpressions:
             - key: eks.amazonaws.com/compute-type
               operator: In
               values:
               - hybrid
     ipam:
       mode: cluster-pool
       operator:
         clusterPoolIPv4MaskSize: 25
         clusterPoolIPv4PodCIDRList:
         - POD_CIDR
     loadBalancer:
       serviceTopology: true
     operator:
       affinity:
         nodeAffinity:
           requiredDuringSchedulingIgnoredDuringExecution:
             nodeSelectorTerms:
             - matchExpressions:
               - key: eks.amazonaws.com/compute-type
                 operator: In
                 values:
                   - hybrid
       unmanagedPodWatcher:
         restart: false
     loadBalancer:
       serviceTopology: true
     envoy:
       enabled: false
     kubeProxyReplacement: "false"
     ```

1. Instal Cilium di cluster Anda.
   + Ganti `CILIUM_VERSION` dengan versi Cilium (misalnya `1.17.9-0` atau`1.18.3-0`). Disarankan untuk menggunakan versi patch terbaru untuk versi minor Cilium.
   + Pastikan node Anda memenuhi persyaratan kernel untuk versi yang Anda pilih. Cilium v1.18.3 membutuhkan kernel Linux >= 5.10.
   + Jika Anda menggunakan file kubeconfig tertentu, gunakan `--kubeconfig` flag dengan perintah Helm install.

     ```
     helm install cilium oci://public.ecr.aws/eks/cilium/cilium \
         --version CILIUM_VERSION \
         --namespace kube-system \
         --values cilium-values.yaml
     ```

1. Konfirmasikan instalasi Cilium Anda berhasil dengan perintah berikut. Anda akan melihat `cilium-operator` penerapan dan `cilium-agent` berjalan pada setiap node hybrid Anda. Selain itu, node hybrid Anda sekarang harus memiliki status`Ready`. Untuk informasi tentang cara mengonfigurasi Cilium BGP untuk mengiklankan pod Anda ke jaringan lokal, CIDRs lanjutkan ke. [Konfigurasikan Cilium BGP untuk node hybrid](hybrid-nodes-cilium-bgp.md)

   ```
   kubectl get pods -n kube-system
   ```

   ```
   NAME                              READY   STATUS    RESTARTS   AGE
   cilium-jjjn8                      1/1     Running   0          11m
   cilium-operator-d4f4d7fcb-sc5xn   1/1     Running   0          11m
   ```

   ```
   kubectl get nodes
   ```

   ```
   NAME                   STATUS   ROLES    AGE   VERSION
   mi-04a2cf999b7112233   Ready    <none>   19m   v1.31.0-eks-a737599
   ```

## Tingkatkan Cilium pada node hibrida
<a name="hybrid-nodes-cilium-upgrade"></a>

Sebelum memutakhirkan penerapan Cilium Anda, tinjau [dokumentasi pemutakhiran Cilium dan catatan pemutakhiran](https://docs.cilium.io/en/v1.17/operations/upgrade/) dengan cermat untuk memahami perubahan dalam versi Cilium target.

1. Pastikan Anda telah menginstal `helm` CLI di lingkungan baris perintah Anda. Lihat [dokumentasi Helm](https://helm.sh/docs/intro/quickstart/) untuk petunjuk penginstalan.

1. Jalankan pemeriksaan pra-penerbangan peningkatan Cilium. Ganti `CILIUM_VERSION` dengan versi Cilium target Anda. Kami menyarankan Anda menjalankan versi patch terbaru untuk versi minor Cilium Anda. Anda dapat menemukan rilis patch terbaru untuk rilis Cilium minor tertentu di [bagian Stable Releases](https://github.com/cilium/cilium#stable-releases) dari dokumentasi Cilium.

   ```
   helm install cilium-preflight oci://public.ecr.aws/eks/cilium/cilium --version CILIUM_VERSION \
     --namespace=kube-system \
     --set preflight.enabled=true \
     --set agent=false \
     --set operator.enabled=false
   ```

1. Setelah menerapkan`cilium-preflight.yaml`, pastikan jumlah pod sama dengan jumlah `READY` pod Cilium yang berjalan.

   ```
   kubectl get ds -n kube-system | sed -n '1p;/cilium/p'
   ```

   ```
   NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
   cilium                    2         2         2       2            2           <none>          1h20m
   cilium-pre-flight-check   2         2         2       2            2           <none>          7m15s
   ```

1. Setelah jumlah pod READY sama, pastikan penerapan pra-penerbangan Cilium juga ditandai sebagai READY 1/1. Jika menunjukkan READY 0/1, lihat bagian [Validasi CNP](https://docs.cilium.io/en/v1.17/operations/upgrade/#cnp-validation) dan selesaikan masalah dengan penerapan sebelum melanjutkan dengan peningkatan.

   ```
   kubectl get deployment -n kube-system cilium-pre-flight-check -w
   ```

   ```
   NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
   cilium-pre-flight-check   1/1     1            0           12s
   ```

1. Hapus preflight

   ```
   helm uninstall cilium-preflight --namespace kube-system
   ```

1. Sebelum menjalankan `helm upgrade` perintah, pertahankan nilai untuk penerapan Anda di `existing-cilium-values.yaml` atau gunakan opsi baris `--set` perintah untuk pengaturan Anda saat Anda menjalankan perintah pemutakhiran. Operasi pemutakhiran menimpa Cilium ConfigMap, jadi sangat penting bahwa nilai konfigurasi Anda diteruskan saat Anda memutakhirkan.

   ```
   helm get values cilium --namespace kube-system -o yaml > existing-cilium-values.yaml
   ```

1. Selama operasi cluster normal, semua komponen Cilium harus menjalankan versi yang sama. Langkah-langkah berikut menjelaskan cara memutakhirkan semua komponen dari satu rilis stabil ke rilis stabil selanjutnya. Saat memutakhirkan dari satu rilis minor ke rilis minor lainnya, disarankan untuk memutakhirkan ke rilis patch terbaru untuk versi minor Cilium yang ada terlebih dahulu. Untuk meminimalkan gangguan, atur `upgradeCompatibility` opsi ke versi Cilium awal yang Anda instal di cluster ini.

   ```
   helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium --version CILIUM_VERSION \
     --namespace kube-system \
     --set upgradeCompatibility=1.X \
     -f existing-cilium-values.yaml
   ```

1. (Opsional) Jika Anda perlu mengembalikan upgrade Anda karena masalah, jalankan perintah berikut.

   ```
   helm history cilium --namespace kube-system
   helm rollback cilium [REVISION] --namespace kube-system
   ```

## Hapus Cilium dari node hibrida
<a name="hybrid-nodes-cilium-delete"></a>

1. Jalankan perintah berikut untuk menghapus semua komponen Cilium dari cluster Anda. Catatan, menghapus instalasi CNI dapat memengaruhi kesehatan node dan pod dan tidak boleh dilakukan pada cluster produksi.

   ```
   helm uninstall cilium --namespace kube-system
   ```

   Antarmuka dan rute yang dikonfigurasi oleh Cilium tidak dihapus secara default saat CNI dihapus dari cluster, lihat [GitHub masalah](https://github.com/cilium/cilium/issues/34289) untuk informasi selengkapnya.

1. Untuk membersihkan file konfigurasi dan sumber daya on-disk, jika Anda menggunakan direktori konfigurasi standar, Anda dapat menghapus file seperti yang ditunjukkan oleh [`cni-uninstall.sh`skrip](https://github.com/cilium/cilium/blob/main/plugins/cilium-cni/cni-uninstall.sh) di repositori Cilium pada. GitHub

1. Untuk menghapus Cilium Custom Resource Definitions (CRDs) dari cluster Anda, Anda dapat menjalankan perintah berikut.

   ```
   kubectl get crds -oname | grep "cilium" | xargs kubectl delete
   ```

# Konfigurasikan add-on untuk node hybrid
<a name="hybrid-nodes-add-ons"></a>

Halaman ini menjelaskan pertimbangan untuk menjalankan AWS add-on dan add-on komunitas di Amazon EKS Hybrid Nodes. Untuk mempelajari lebih lanjut tentang add-on Amazon EKS dan proses untuk membuat, meningkatkan, dan menghapus add-on dari klaster Anda, lihat. [Add-on Amazon EKS](eks-add-ons.md) Kecuali dinyatakan lain di halaman ini, proses untuk membuat, meningkatkan, dan menghapus add-on Amazon EKS sama untuk klaster Amazon EKS dengan node hibrida seperti halnya untuk cluster Amazon EKS dengan node yang berjalan di Cloud. AWS Hanya add-on yang disertakan pada halaman ini yang telah divalidasi untuk kompatibilitas dengan Amazon EKS Hybrid Nodes.

 AWS Add-on berikut ini kompatibel dengan Amazon EKS Hybrid Nodes.


|  AWS add-on | Versi add-on yang kompatibel | 
| --- | --- | 
|  kube-proxy  |  v1.25.14-eksbuild.2 dan di atas  | 
|  CoreDNS  |  v1.9.3-eksbuild.7 dan di atas  | 
|   AWS Distro untuk OpenTelemetry (ADOT)  |  v0.102.1-eksbuild.2 dan di atas  | 
|  CloudWatch Agen observabilitas  |  v2.2.1-eksbuild.1 dan di atas  | 
|  Agen Identitas EKS Pod  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/eks/latest/userguide/hybrid-nodes-add-ons.html)  | 
|  Agen pemantauan simpul  |  v1.2.0-eksbuild.1 dan di atas  | 
|  Pengontrol snapshot CSI  |  v8.1.0-eksbuild.1 dan di atas  | 
|   AWS Konektor CA Pribadi untuk Kubernetes  |  v1.6.0-eksbuild.1 dan di atas  | 
|  Pengemudi Amazon FSx CSI  |  v1.7.0-eksbuild.1 dan di atas  | 
|   AWS Toko Rahasia Penyedia driver CSI  |  v2.1.1-eksbuild.1 dan di atas  | 

Add-on komunitas berikut kompatibel dengan Amazon EKS Hybrid Nodes. Untuk mempelajari lebih lanjut tentang add-on komunitas, lihat[Pengaya komunitas](community-addons.md).


| Add-on komunitas | Versi add-on yang kompatibel | 
| --- | --- | 
|  Server Metrik Kubernetes  |  v0.7.2-eksbuild.1 dan di atas  | 
|  manajer sertifikat  |  v1.17.2-eksbuild.1 dan di atas  | 
|  Prometheus Node Exportir  |  v1.9.1-eksbuild.2 dan di atas  | 
|  kube-state-metrics  |  v2.15.0-eksbuild.4 dan di atas  | 
|  DNS Eksternal  |  v0.19.0-eksbuild.1 dan di atas  | 

Selain add-on Amazon EKS pada tabel di atas, [Amazon Managed Service untuk Prometheus Collector,](prometheus.md) dan Load [AWS Balancer Controller [untuk masuknya aplikasi](alb-ingress.md) (HTTP) [dan load](network-load-balancing.md) balancing](aws-load-balancer-controller.md) (TCP/UDP) kompatibel dengan node hybrid.

Ada AWS add-on dan add-on komunitas yang tidak kompatibel dengan Amazon EKS Hybrid Nodes. Versi terbaru dari add-on ini memiliki aturan anti-afinitas untuk `eks.amazonaws.com/compute-type: hybrid` label default yang diterapkan pada node hybrid. Ini mencegah mereka berjalan pada node hybrid saat digunakan di cluster Anda. Jika Anda memiliki cluster dengan node hybrid dan node yang berjalan di AWS Cloud, Anda dapat menerapkan add-on ini di cluster Anda ke node yang berjalan di Cloud. AWS Amazon VPC CNI tidak kompatibel dengan node hybrid, dan Cilium dan Calico didukung sebagai Container Networking Interfaces () CNIs untuk Amazon EKS Hybrid Nodes. Untuk informasi selengkapnya, lihat [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md).

## AWS add-on
<a name="hybrid-nodes-add-ons-aws-add-ons"></a>

Bagian berikut menjelaskan perbedaan antara menjalankan AWS add-on yang kompatibel pada node hybrid dibandingkan dengan jenis komputasi Amazon EKS lainnya.

## kube-proxy dan CoreDNS
<a name="hybrid-nodes-add-ons-core"></a>

EKS menginstal kube-proxy dan CoreDNS sebagai add-on yang dikelola sendiri secara default saat Anda membuat cluster EKS dengan API dan, termasuk dari CLI. AWS AWS SDKs AWS Anda dapat menimpa add-on ini dengan add-on Amazon EKS setelah pembuatan cluster. Referensi dokumentasi EKS untuk detail tentang [Kelola `kube-proxy` di kluster Amazon EKS](managing-kube-proxy.md) dan[Kelola CoreDNS untuk DNS di kluster Amazon EKS](managing-coredns.md). Jika Anda menjalankan cluster mode campuran dengan node hybrid dan node di AWS Cloud, AWS rekomendasikan untuk memiliki setidaknya satu replika CoreDNS pada node hybrid dan setidaknya satu replika CoreDNS di node Anda di Cloud. AWS Lihat [Konfigurasikan replika CoreDNS](hybrid-nodes-webhooks.md#hybrid-nodes-mixed-coredns) langkah-langkah konfigurasi.

## CloudWatch Agen observabilitas
<a name="hybrid-nodes-add-ons-cw"></a>

Operator agen CloudWatch Observability menggunakan [webhook](https://kubernetes.io/docs/reference/access-authn-authz/webhook/). Jika Anda menjalankan operator pada node hibrid, CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal dan Anda harus mengonfigurasi kluster EKS Anda dengan jaringan pod jarak jauh Anda. Untuk informasi selengkapnya, lihat [Mengonfigurasi webhook untuk node hybrid](hybrid-nodes-webhooks.md).

Metrik tingkat simpul tidak tersedia untuk node hibrida karena [CloudWatch Wawasan Kontainer](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) bergantung pada ketersediaan [Layanan Metadata Instance (IMDS) untuk metrik tingkat simpul](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html). Metrik tingkat cluster, beban kerja, pod, dan container tersedia untuk node hybrid.

Setelah menginstal add-on dengan mengikuti langkah-langkah yang dijelaskan di [Instal CloudWatch agen dengan Amazon CloudWatch Observability](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Observability-EKS-addon.html), manifes add-on harus diperbarui sebelum agen dapat berjalan dengan sukses di node hybrid. Edit `amazoncloudwatchagents` sumber daya pada cluster untuk menambahkan variabel `RUN_WITH_IRSA` lingkungan seperti yang ditunjukkan di bawah ini.

```
kubectl edit amazoncloudwatchagents -n amazon-cloudwatch cloudwatch-agent
```

```
apiVersion: v1
items:
- apiVersion: cloudwatch.aws.amazon.com/v1alpha1
  kind: AmazonCloudWatchAgent
  metadata:
    ...
    name: cloudwatch-agent
    namespace: amazon-cloudwatch
    ...
  spec:
    ...
    env:
    - name: RUN_WITH_IRSA # <-- Add this
      value: "True" # <-- Add this
    - name: K8S_NODE_NAME
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName
          ...
```

## Kolektor terkelola Prometheus yang Dikelola Amazon untuk node hibrida
<a name="hybrid-nodes-add-ons-amp"></a>

Kolektor terkelola Amazon Managed Service for Prometheus (AMP) terdiri dari scraper yang menemukan dan mengumpulkan metrik dari sumber daya di klaster Amazon EKS. AMP mengelola scraper untuk Anda, menghilangkan kebutuhan untuk mengelola instans, agen, atau pencakar apa pun sendiri.

Anda dapat menggunakan kolektor terkelola AMP tanpa konfigurasi tambahan khusus untuk node hibrid. Namun titik akhir metrik untuk aplikasi Anda pada node hybrid harus dapat dijangkau dari VPC, termasuk rute dari VPC ke jaringan pod jarak jauh CIDRs dan port yang terbuka di firewall lokal Anda. Selain itu, cluster Anda harus memiliki [akses endpoint cluster pribadi](cluster-endpoint.md).

Ikuti langkah-langkah dalam [Menggunakan kolektor AWS terkelola](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html) di Amazon Managed Service for Prometheus User Guide.

## AWS Distro untuk OpenTelemetry (ADOT)
<a name="hybrid-nodes-add-ons-adot"></a>

Anda dapat menggunakan add-on AWS Distro for OpenTelemetry (ADOT) untuk mengumpulkan metrik, log, dan melacak data dari aplikasi Anda yang berjalan pada node hybrid. ADOT menggunakan [webhook](https://kubernetes.io/docs/reference/access-authn-authz/webhook/) masuk untuk mengubah dan memvalidasi permintaan Sumber Daya Kustom Kolektor. Jika Anda menjalankan operator ADOT pada node hibrid, CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal dan Anda harus mengonfigurasi kluster EKS dengan jaringan pod jarak jauh. Untuk informasi selengkapnya, lihat [Mengonfigurasi webhook untuk node hybrid](hybrid-nodes-webhooks.md).

Ikuti langkah-langkah dalam [Memulai dengan AWS Distro untuk OpenTelemetry menggunakan EKS Add-On](https://aws-otel.github.io/docs/getting-started/adot-eks-add-on) di * AWS Distro* untuk dokumentasi. OpenTelemetry

## AWS Pengontrol Load Balancer
<a name="hybrid-nodes-add-ons-lbc"></a>

Anda dapat menggunakan [AWS Load Balancer Controller](aws-load-balancer-controller.md) dan Application Load Balancer (ALB) atau Network Load Balancer (NLB) dengan `ip` tipe target untuk beban kerja pada node hybrid Target IP yang digunakan dengan ALB atau NLB harus dapat dirutekan dari. AWS[Pengontrol AWS Load Balancer juga menggunakan webhook.](https://kubernetes.io/docs/reference/access-authn-authz/webhook/) Jika Anda menjalankan operator AWS Load Balancer Controller pada node hybrid, CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal dan Anda harus mengonfigurasi klaster EKS dengan jaringan pod jarak jauh. Untuk informasi selengkapnya, lihat [Mengonfigurasi webhook untuk node hybrid](hybrid-nodes-webhooks.md).

Untuk menginstal AWS Load Balancer Controller, ikuti langkah-langkah di [AWS Application Load Balancer](hybrid-nodes-ingress.md#hybrid-nodes-ingress-alb) atau. [AWS Network Load Balancer](hybrid-nodes-load-balancing.md#hybrid-nodes-service-lb-nlb)

Untuk masuk dengan ALB, Anda harus menentukan anotasi di bawah ini. Untuk informasi selengkapnya, lihat [Rute aplikasi dan lalu lintas HTTP dengan Application Load Balancers](alb-ingress.md).

```
alb.ingress.kubernetes.io/target-type: ip
```

Untuk load balancing dengan NLB, Anda harus menentukan anotasi di bawah ini. Untuk informasi selengkapnya, lihat [Rute lalu lintas TCP dan UDP dengan Network Load Balancers](network-load-balancing.md).

```
service.beta.kubernetes.io/aws-load-balancer-type: "external"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
```

## Agen Identitas EKS Pod
<a name="hybrid-nodes-add-ons-pod-id"></a>

**catatan**  
Agar berhasil menerapkan add-on EKS Pod Identity Agent pada node hybrid yang menjalankan Bottlerocket, pastikan versi Bottlerocket Anda setidaknya v1.39.0. Agen Identitas Pod tidak didukung pada versi Bottlerocket sebelumnya di lingkungan node hybrid.

Agen Identitas Pod Amazon DaemonSet EKS asli bergantung pada ketersediaan EC2 IMDS pada node untuk mendapatkan kredensi yang diperlukan. AWS Karena IMDS tidak tersedia pada node hybrid, dimulai dengan versi 1.3.3-eksbuild.1, add-on Pod Identity Agent secara opsional menerapkan a yang memasang kredensil yang diperlukan. DaemonSet Node hybrid yang menjalankan Bottlerocket memerlukan metode yang berbeda untuk me-mount kredensialnya, dan mulai dari versi 1.3.7-eksbuild.2, add-on Pod Identity Agent secara opsional menyebarkan a yang secara khusus menargetkan node hybrid Bottlerocket. DaemonSet Bagian berikut menjelaskan proses untuk mengaktifkan opsional DaemonSets.

### Ubuntu/RHEL/AL2023
<a name="_ubunturhelal2023"></a>

1. Untuk menggunakan agen Pod Identity pada node hybrid Ubuntu/RHEL/Al 2023, atur `enableCredentialsFile: true` di bagian hybrid `nodeadm` konfigurasi seperti yang ditunjukkan di bawah ini:

   ```
   apiVersion: node.eks.aws/v1alpha1
   kind: NodeConfig
   spec:
       hybrid:
           enableCredentialsFile: true # <-- Add this
   ```

   Ini akan dikonfigurasi `nodeadm` untuk membuat file kredensial yang akan dikonfigurasi pada node di bawah`/eks-hybrid/.aws/credentials`, yang akan digunakan oleh `eks-pod-identity-agent` pod. File kredensial ini akan berisi AWS kredensil sementara yang akan di-refresh secara berkala.

1. Setelah Anda memperbarui `nodeadm` konfigurasi pada *setiap* node, jalankan `nodeadm init` perintah berikut dengan Anda `nodeConfig.yaml` untuk menggabungkan node hybrid Anda ke cluster Amazon EKS Anda. Jika node Anda telah bergabung dengan cluster sebelumnya, tetap jalankan `nodeadm init` perintah lagi.

   ```
   nodeadm init -c file://nodeConfig.yaml
   ```

1. Instal `eks-pod-identity-agent` dengan dukungan untuk node hybrid diaktifkan, dengan menggunakan AWS CLI atau. Konsol Manajemen AWS

   1.  AWS CLI: Dari mesin yang Anda gunakan untuk mengelola cluster, jalankan perintah berikut untuk menginstal `eks-pod-identity-agent` dengan dukungan untuk node hybrid diaktifkan. Ganti `my-cluster` dengan nama klaster Anda.

      ```
      aws eks create-addon \
          --cluster-name my-cluster \
          --addon-name eks-pod-identity-agent \
          --configuration-values '{"daemonsets":{"hybrid":{"create": true}}}'
      ```

   1.  Konsol Manajemen AWS: Jika Anda menginstal add-on Pod Identity Agent melalui AWS konsol, tambahkan berikut ini ke konfigurasi opsional untuk menyebarkan node hybrid DaemonSet yang menargetkan.

      ```
      {"daemonsets":{"hybrid":{"create": true}}}
      ```

### Bottlerocket
<a name="_bottlerocket"></a>

1. Untuk menggunakan agen Pod Identity pada node hybrid Bottlerocket, tambahkan `--enable-credentials-file=true` flag ke perintah yang digunakan untuk data pengguna container bootstrap Bottlerocket, seperti yang dijelaskan dalam. [Hubungkan node hybrid dengan Bottlerocket](hybrid-nodes-bottlerocket.md)

   1. Jika Anda menggunakan penyedia kredensi SSM, perintah Anda akan terlihat seperti ini:

      ```
      eks-hybrid-ssm-setup --activation-id=<activation-id> --activation-code=<activation-code> --region=<region> --enable-credentials-file=true
      ```

   1. Jika Anda menggunakan penyedia kredensi IAM Roles Anywhere, perintah Anda akan terlihat seperti ini:

      ```
      eks-hybrid-iam-ra-setup --certificate=<certificate> --key=<private-key> --enable-credentials-file=true
      ```

      Ini akan mengkonfigurasi skrip bootstrap untuk membuat file kredensial pada node di bawah`/var/eks-hybrid/.aws/credentials`, yang akan digunakan oleh `eks-pod-identity-agent` pod. File kredensial ini akan berisi AWS kredensil sementara yang akan di-refresh secara berkala.

1. Instal `eks-pod-identity-agent` dengan dukungan untuk node hybrid Bottlerocket diaktifkan, dengan menggunakan CLI atau. AWS Konsol Manajemen AWS

   1.  AWS CLI: Dari mesin yang Anda gunakan untuk mengelola cluster, jalankan perintah berikut untuk menginstal `eks-pod-identity-agent` dengan dukungan untuk node hybrid Bottlerocket diaktifkan. Ganti `my-cluster` dengan nama klaster Anda.

      ```
      aws eks create-addon \
          --cluster-name my-cluster \
          --addon-name eks-pod-identity-agent \
          --configuration-values '{"daemonsets":{"hybrid-bottlerocket":{"create": true}}}'
      ```

   1.  Konsol Manajemen AWS: Jika Anda menginstal add-on Pod Identity Agent melalui AWS konsol, tambahkan berikut ini ke konfigurasi opsional untuk menyebarkan node hybrid Bottlerocket DaemonSet yang menargetkan Bottlerocket.

      ```
      {"daemonsets":{"hybrid-bottlerocket":{"create": true}}}
      ```

## Pengontrol snapshot CSI
<a name="hybrid-nodes-add-ons-csi-snapshotter"></a>

Dimulai dengan versi`v8.1.0-eksbuild.2`, [add-on pengontrol snapshot CSI](csi-snapshot-controller.md) menerapkan aturan anti-afinitas lunak untuk node hibrida, lebih memilih pengontrol `deployment` untuk berjalan di EC2 di Wilayah yang sama dengan bidang kontrol Amazon AWS EKS. Menempatkan bersama `deployment` di AWS Wilayah yang sama dengan bidang kontrol Amazon EKS meningkatkan latensi.

## Pengaya komunitas
<a name="hybrid-nodes-add-ons-community"></a>

Bagian berikut menjelaskan perbedaan antara menjalankan add-on komunitas yang kompatibel pada node hibrida dibandingkan dengan jenis komputasi Amazon EKS lainnya.

## Server Metrik Kubernetes
<a name="hybrid-nodes-add-ons-metrics-server"></a>

Bidang kontrol perlu mencapai IP pod Metrics Server (atau IP node jika HostNetwork diaktifkan). Oleh karena itu, kecuali Anda menjalankan Metrics Server dalam mode HostNetwork, Anda harus mengonfigurasi jaringan pod jarak jauh saat membuat cluster Amazon EKS Anda, dan Anda harus membuat alamat IP pod Anda dapat dirutekan. Menerapkan Border Gateway Protocol (BGP) dengan CNI adalah salah satu cara umum untuk membuat alamat IP pod Anda dapat dirutekan.

## manajer sertifikat
<a name="hybrid-nodes-add-ons-cert-manager"></a>

 `cert-manager`menggunakan [webhooks](https://kubernetes.io/docs/reference/access-authn-authz/webhook/). Jika Anda menjalankan `cert-manager` node hibrid, CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal dan Anda harus mengonfigurasi kluster EKS dengan jaringan pod jarak jauh. Untuk informasi selengkapnya, lihat [Mengonfigurasi webhook untuk node hybrid](hybrid-nodes-webhooks.md).

# Konfigurasikan webhook untuk node hybrid
<a name="hybrid-nodes-webhooks"></a>

Halaman ini merinci pertimbangan untuk menjalankan webhook dengan node hybrid. Webhook digunakan dalam aplikasi Kubernetes dan proyek open source, seperti Load Balancer AWS Controller dan CloudWatch Observability Agent, untuk melakukan kemampuan mutasi dan validasi saat runtime.

 **Jaringan pod yang dapat dirutekan** 

Jika Anda dapat membuat CIDR pod lokal dapat dirutekan di jaringan lokal, Anda dapat menjalankan webhook pada node hibrid. Ada beberapa teknik yang dapat Anda gunakan untuk membuat pod lokal CIDR dapat dirutekan di jaringan lokal Anda termasuk Border Gateway Protocol (BGP), rute statis, atau solusi perutean kustom lainnya. BGP adalah solusi yang direkomendasikan karena lebih skalabel dan lebih mudah dikelola daripada solusi alternatif yang memerlukan konfigurasi rute khusus atau manual. AWS mendukung kemampuan BGP Cilium dan Calico untuk pod iklan CIDRs, lihat [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md) dan untuk informasi lebih lanjut. [Pod jarak jauh yang dapat dirutekan CIDRs](hybrid-nodes-concepts-kubernetes.md#hybrid-nodes-concepts-k8s-pod-cidrs)

 **Jaringan pod yang tidak dapat dirutekan** 

Jika Anda *tidak dapat* membuat CIDR pod lokal dapat dirutekan di jaringan lokal dan perlu menjalankan webhook, sebaiknya jalankan semua webhook di node cloud di cluster EKS yang sama dengan node hibrid Anda.

## Pertimbangan untuk cluster mode campuran
<a name="hybrid-nodes-considerations-mixed-mode"></a>

 *Cluster mode campuran* didefinisikan sebagai cluster EKS yang memiliki node hybrid dan node yang berjalan di AWS Cloud. Saat menjalankan cluster mode campuran, pertimbangkan rekomendasi berikut:
+ Jalankan VPC CNI pada node di AWS Cloud dan Cilium atau Calico pada node hybrid. Cilium dan Calico tidak didukung AWS saat berjalan di node di Cloud. AWS 
+ Konfigurasikan webhook untuk berjalan di node di AWS Cloud. Lihat [Konfigurasikan webhook untuk add-on](#hybrid-nodes-webhooks-add-ons) cara mengonfigurasi webhook untuk AWS dan add-on komunitas.
+ Jika aplikasi Anda memerlukan pod yang berjalan di node di AWS Cloud untuk berkomunikasi langsung dengan pod yang berjalan pada node hybrid (“komunikasi timur-barat”), dan Anda menggunakan CNI VPC pada node di AWS Cloud, dan Cilium atau Calico pada node hybrid, maka CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal Anda.
+ Jalankan setidaknya satu replika CoreDNS pada node AWS di Cloud dan setidaknya satu replika CoreDNS pada node hybrid.
+ Konfigurasikan Distribusi Lalu Lintas Layanan untuk menjaga lalu lintas Layanan lokal ke zona asalnya. Untuk informasi selengkapnya tentang Distribusi Lalu Lintas Layanan, lihat[Konfigurasikan Distribusi Lalu Lintas Layanan](#hybrid-nodes-mixed-service-traffic-distribution).
+ Jika Anda menggunakan AWS Application Load Balancers (ALB) atau Network Load Balancers (NLB) untuk lalu lintas beban kerja yang berjalan pada node hybrid, maka target IP yang digunakan dengan ALB atau NLB harus dapat dirutekan dari. AWS
+ Add-on Metrics Server memerlukan konektivitas dari bidang kontrol EKS ke alamat IP pod Metrics Server. Jika Anda menjalankan add-on Metrics Server pada node hibrid, maka CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal Anda.
+ Untuk mengumpulkan metrik node hibrid menggunakan Amazon Managed Service untuk kolektor terkelola Prometheus (AMP), CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal. Atau, Anda dapat menggunakan kolektor terkelola AMP untuk metrik dan sumber daya bidang kontrol EKS yang berjalan di AWS Cloud, dan add-on AWS Distro for OpenTelemetry (ADOT) untuk mengumpulkan metrik untuk node hibrid.

## Konfigurasikan cluster mode campuran
<a name="hybrid-nodes-mixed-mode"></a>

Untuk melihat webhook yang bermutasi dan memvalidasi yang berjalan di klaster, Anda dapat melihat jenis sumber daya **Ekstensi** di panel **Resources** konsol EKS untuk klaster Anda, atau Anda dapat menggunakan perintah berikut. EKS juga melaporkan metrik webhook di dasbor observabilitas cluster, lihat [Memantau klaster dengan dasbor observabilitas](observability-dashboard.md) untuk informasi lebih lanjut.

```
kubectl get mutatingwebhookconfigurations
```

```
kubectl get validatingwebhookconfigurations
```

### Konfigurasikan Distribusi Lalu Lintas Layanan
<a name="hybrid-nodes-mixed-service-traffic-distribution"></a>

Saat menjalankan cluster mode campuran, kami menyarankan Anda menggunakan [https://kubernetes.io/docs/reference/networking/virtual-ips/#traffic-distribution](https://kubernetes.io/docs/reference/networking/virtual-ips/#traffic-distribution) untuk menjaga lalu lintas Layanan lokal ke zona asalnya. Service Traffic Distribution (tersedia untuk Kubernetes versi 1.31 dan yang lebih baru di EKS) adalah solusi yang direkomendasikan melalui [Topology Aware Routing](https://kubernetes.io/docs/concepts/services-networking/topology-aware-routing/) karena lebih mudah diprediksi. Dengan Distribusi Lalu Lintas Layanan, titik akhir yang sehat di zona tersebut akan menerima semua lalu lintas untuk zona itu. Dengan Topology Aware Routing, setiap layanan harus memenuhi beberapa kondisi di zona tersebut untuk menerapkan perutean kustom, jika tidak, ia merutekan lalu lintas secara merata ke semua titik akhir.

Jika Anda menggunakan Cilium sebagai CNI Anda, Anda harus menjalankan CNI dengan `enable-service-topology` set untuk mengaktifkan Distribusi Lalu Lintas `true` Layanan. Anda dapat meneruskan konfigurasi ini dengan bendera Helm install `--set loadBalancer.serviceTopology=true` atau Anda dapat memperbarui instalasi yang ada dengan perintah Cilium CLI. `cilium config set enable-service-topology true` Agen Cilium yang berjalan pada setiap node harus dimulai ulang setelah memperbarui konfigurasi untuk instalasi yang ada.

Contoh cara mengonfigurasi Distribusi Lalu Lintas Layanan untuk Layanan CoreDNS ditampilkan di bagian berikut, dan kami menyarankan Anda mengaktifkan hal yang sama untuk semua Layanan di klaster Anda untuk menghindari lalu lintas lintas lingkungan yang tidak diinginkan.

### Konfigurasikan replika CoreDNS
<a name="hybrid-nodes-mixed-coredns"></a>

Jika Anda menjalankan cluster mode campuran dengan node hybrid dan node di AWS Cloud, sebaiknya Anda memiliki setidaknya satu replika CoreDNS pada node hybrid dan setidaknya satu replika CoreDNS di node Anda di Cloud. AWS [Untuk mencegah masalah latensi dan jaringan dalam pengaturan cluster mode campuran, Anda dapat mengonfigurasi Layanan CoreDNS untuk memilih replika CoreDNS terdekat dengan Distribusi Lalu Lintas Layanan.](https://kubernetes.io/docs/reference/networking/virtual-ips/#traffic-distribution)

 *Service Traffic Distribution* (tersedia untuk Kubernetes versi 1.31 dan yang lebih baru di EKS) adalah solusi yang direkomendasikan melalui [Topology Aware Routing](https://kubernetes.io/docs/concepts/services-networking/topology-aware-routing/) karena lebih mudah diprediksi. Dalam Distribusi Lalu Lintas Layanan, titik akhir yang sehat di zona tersebut akan menerima semua lalu lintas untuk zona itu. Dalam Topology Aware Routing, setiap layanan harus memenuhi beberapa kondisi di zona tersebut untuk menerapkan perutean kustom, jika tidak, ia merutekan lalu lintas secara merata ke semua titik akhir. Langkah-langkah berikut mengkonfigurasi Distribusi Lalu Lintas Layanan.

Jika Anda menggunakan Cilium sebagai CNI Anda, Anda harus menjalankan CNI dengan `enable-service-topology` set untuk mengaktifkan Distribusi Lalu Lintas `true` Layanan. Anda dapat meneruskan konfigurasi ini dengan bendera Helm install `--set loadBalancer.serviceTopology=true` atau Anda dapat memperbarui instalasi yang ada dengan perintah Cilium CLI. `cilium config set enable-service-topology true` Agen Cilium yang berjalan pada setiap node harus dimulai ulang setelah memperbarui konfigurasi untuk instalasi yang ada.

1. Tambahkan label zona topologi untuk setiap node hibrida Anda, misalnya. `topology.kubernetes.io/zone: onprem` Atau, Anda dapat mengatur label pada `nodeadm init` fase dengan menentukan label dalam `nodeadm` konfigurasi Anda, lihat[Node Config untuk menyesuaikan kubelet (Opsional)](hybrid-nodes-nodeadm.md#hybrid-nodes-nodeadm-kubelet). Catatan, node yang berjalan di AWS Cloud secara otomatis mendapatkan label zona topologi yang diterapkan padanya yang sesuai dengan zona ketersediaan (AZ) node.

   ```
   kubectl label node hybrid-node-name topology.kubernetes.io/zone=zone
   ```

1. Tambahkan `podAntiAffinity` ke penerapan CoreDNS dengan kunci zona topologi. Atau, Anda dapat mengonfigurasi penerapan CoreDNS selama instalasi dengan add-on EKS.

   ```
   kubectl edit deployment coredns -n kube-system
   ```

   ```
   spec:
     template:
       spec:
         affinity:
          ...
           podAntiAffinity:
             preferredDuringSchedulingIgnoredDuringExecution:
             - podAffinityTerm:
                 labelSelector:
                   matchExpressions:
                   - key: k8s-app
                     operator: In
                     values:
                     - kube-dns
                 topologyKey: kubernetes.io/hostname
               weight: 100
             - podAffinityTerm:
                 labelSelector:
                   matchExpressions:
                   - key: k8s-app
                     operator: In
                     values:
                     - kube-dns
                 topologyKey: topology.kubernetes.io/zone
               weight: 50
         ...
   ```

1. Tambahkan pengaturan ke konfigurasi `kube-dns` Layanan `trafficDistribution: PreferClose` untuk mengaktifkan Distribusi Lalu Lintas Layanan.

   ```
   kubectl patch svc kube-dns -n kube-system --type=merge -p '{
     "spec": {
       "trafficDistribution": "PreferClose"
     }
   }'
   ```

1. Anda dapat mengonfirmasi bahwa Distribusi Lalu Lintas Layanan diaktifkan dengan melihat irisan titik akhir untuk `kube-dns` Layanan. Irisan titik akhir Anda harus menunjukkan label zona topologi Anda, yang mengonfirmasi bahwa Distribusi Lalu Lintas Layanan diaktifkan. `hints` Jika Anda tidak melihat `hints` untuk setiap alamat titik akhir, maka Distribusi Lalu Lintas Layanan tidak diaktifkan.

   ```
   kubectl get endpointslice -A | grep "kube-dns"
   ```

   ```
   kubectl get endpointslice [.replaceable]`kube-dns-<id>`  -n kube-system -o yaml
   ```

   ```
   addressType: IPv4
   apiVersion: discovery.k8s.io/v1
   endpoints:
   - addresses:
     - <your-hybrid-node-pod-ip>
     hints:
       forZones:
       - name: onprem
     nodeName: <your-hybrid-node-name>
     zone: onprem
   - addresses:
     - <your-cloud-node-pod-ip>
     hints:
       forZones:
       - name: us-west-2a
     nodeName: <your-cloud-node-name>
     zone: us-west-2a
   ```

### Konfigurasikan webhook untuk add-on
<a name="hybrid-nodes-webhooks-add-ons"></a>

Add-on berikut menggunakan webhook dan didukung untuk digunakan dengan node hybrid.
+  AWS Pengontrol Load Balancer
+ CloudWatch Agen Observabilitas
+  AWS Distro untuk OpenTelemetry (ADOT)
+  `cert-manager` 

Lihat bagian berikut untuk mengonfigurasi webhook yang digunakan oleh add-on ini untuk berjalan di node di Cloud. AWS 

#### AWS Pengontrol Load Balancer
<a name="hybrid-nodes-mixed-lbc"></a>

Untuk menggunakan AWS Load Balancer Controller dalam pengaturan cluster mode campuran, Anda harus menjalankan controller pada node di AWS Cloud. Untuk melakukannya, tambahkan berikut ini ke konfigurasi nilai Helm Anda atau tentukan nilainya dengan menggunakan konfigurasi add-on EKS.

```
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: eks.amazonaws.com/compute-type
          operator: NotIn
          values:
          - hybrid
```

#### CloudWatch Agen Observabilitas
<a name="hybrid-nodes-mixed-cwagent"></a>

Add-on CloudWatch Observability Agent memiliki Operator Kubernetes yang menggunakan webhook. Untuk menjalankan operator pada node di AWS Cloud dalam pengaturan cluster mode campuran, edit konfigurasi operator CloudWatch Observability Agent. Anda tidak dapat mengonfigurasi afinitas operator selama penginstalan dengan add-on Helm dan EKS (lihat masalah [containers-roadmap](https://github.com/aws/containers-roadmap/issues/2431) \$12431).

```
kubectl edit -n amazon-cloudwatch deployment amazon-cloudwatch-observability-controller-manager
```

```
spec:
  ...
  template:
    ...
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: eks.amazonaws.com/compute-type
                operator: NotIn
                values:
                - hybrid
```

#### AWS Distro untuk OpenTelemetry (ADOT)
<a name="hybrid-nodes-mixed-adot"></a>

Add-on AWS Distro for OpenTelemetry (ADOT) memiliki Operator Kubernetes yang menggunakan webhook. Untuk menjalankan operator pada node di AWS Cloud dalam pengaturan cluster mode campuran, tambahkan berikut ini ke konfigurasi nilai Helm Anda atau tentukan nilai dengan menggunakan konfigurasi add-on EKS.

```
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: eks.amazonaws.com/compute-type
          operator: NotIn
          values:
          - hybrid
```

Jika CIDR pod Anda tidak dapat dirutekan di jaringan lokal Anda, maka kolektor ADOT harus berjalan pada node hybrid untuk mengikis metrik dari node hibrid Anda dan beban kerja yang berjalan di dalamnya. Untuk melakukannya, edit Definisi Sumber Daya Kustom (CRD).

```
kubectl -n opentelemetry-operator-system edit opentelemetrycollectors.opentelemetry.io adot-col-prom-metrics
```

```
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: eks.amazonaws.com/compute-type
            operator: In
            values:
            - hybrid
```

Anda dapat mengonfigurasi kolektor ADOT untuk hanya mengikis metrik dari node hibrida dan sumber daya yang berjalan pada node hibrida dengan menambahkan yang berikut `relabel_configs` ke masing-masing `scrape_configs` dalam konfigurasi CRD kolektor ADOT.

```
relabel_configs:
  - action: keep
    regex: hybrid
    source_labels:
    - __meta_kubernetes_node_label_eks_amazonaws_com_compute_type
```

Add-on ADOT memiliki persyaratan prasyarat `cert-manager` untuk menginstal sertifikat TLS yang digunakan oleh webhook operator ADOT. `cert-manager`juga menjalankan webhooks dan Anda dapat mengonfigurasinya untuk berjalan di node di AWS Cloud dengan konfigurasi nilai Helm berikut.

```
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: eks.amazonaws.com/compute-type
          operator: NotIn
          values:
          - hybrid
webhook:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: eks.amazonaws.com/compute-type
            operator: NotIn
            values:
            - hybrid
cainjector:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: eks.amazonaws.com/compute-type
            operator: NotIn
            values:
            - hybrid
startupapicheck:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: eks.amazonaws.com/compute-type
            operator: NotIn
            values:
            - hybrid
```

#### `cert-manager`
<a name="hybrid-nodes-mixed-cert-manager"></a>

`cert-manager`Add-on menjalankan webhooks dan Anda dapat mengonfigurasinya untuk berjalan di node di AWS Cloud dengan konfigurasi nilai Helm berikut.

```
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: eks.amazonaws.com/compute-type
          operator: NotIn
          values:
          - hybrid
webhook:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: eks.amazonaws.com/compute-type
            operator: NotIn
            values:
            - hybrid
cainjector:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: eks.amazonaws.com/compute-type
            operator: NotIn
            values:
            - hybrid
startupapicheck:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: eks.amazonaws.com/compute-type
            operator: NotIn
            values:
            - hybrid
```

# Konfigurasikan proxy untuk node hybrid
<a name="hybrid-nodes-proxy"></a>

Jika Anda menggunakan server proxy di lingkungan lokal untuk lalu lintas yang meninggalkan pusat data atau lingkungan edge, Anda perlu mengonfigurasi node dan klaster secara terpisah untuk menggunakan server proxy Anda.

Klaster  
Di cluster Anda, Anda perlu mengkonfigurasi `kube-proxy` untuk menggunakan server proxy Anda. Anda harus mengonfigurasi `kube-proxy` setelah membuat cluster Amazon EKS Anda.

Simpul  
Pada node Anda, Anda harus mengkonfigurasi sistem operasi,`containerd`,`kubelet`, dan agen SSM Amazon untuk menggunakan server proxy Anda. Anda dapat membuat perubahan ini selama proses build untuk image sistem operasi Anda atau sebelum Anda menjalankan `nodeadm init` pada setiap node hybrid.

## Konfigurasi tingkat simpul
<a name="_node_level_configuration"></a>

Anda harus menerapkan konfigurasi berikut baik dalam gambar sistem operasi Anda atau sebelum berjalan `nodeadm init` pada setiap node hybrid.

### `containerd`konfigurasi proxy
<a name="_containerd_proxy_configuration"></a>

 `containerd`adalah runtime manajemen kontainer default untuk Kubernetes. Jika Anda menggunakan proxy untuk akses internet, Anda harus mengkonfigurasi `containerd` sehingga dapat menarik gambar kontainer yang diperlukan oleh Kubernetes dan Amazon EKS.

Buat file pada setiap node hybrid yang disebut `http-proxy.conf` dalam `/etc/systemd/system/containerd.service.d` direktori dengan konten berikut. Ganti `proxy-domain` dan `port` dengan nilai-nilai untuk lingkungan Anda.

```
[Service]
Environment="HTTP_PROXY=http://proxy-domain:port"
Environment="HTTPS_PROXY=http://proxy-domain:port"
Environment="NO_PROXY=localhost"
```

#### `containerd`konfigurasi dari data pengguna
<a name="_containerd_configuration_from_user_data"></a>

`containerd.service.d`Direktori harus dibuat untuk file ini. Anda perlu memuat ulang systemd untuk mengambil file konfigurasi tanpa reboot. Di AL2 023, layanan kemungkinan sudah berjalan ketika skrip Anda dijalankan, jadi Anda juga perlu memulai ulang.

```
mkdir -p /etc/systemd/system/containerd.service.d
echo '[Service]' > /etc/systemd/system/containerd.service.d/http-proxy.conf
echo 'Environment="HTTP_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/containerd.service.d/http-proxy.conf
echo 'Environment="HTTPS_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/containerd.service.d/http-proxy.conf
echo 'Environment="NO_PROXY=localhost"' >> /etc/systemd/system/containerd.service.d/http-proxy.conf
systemctl daemon-reload
systemctl restart containerd
```

### `kubelet`konfigurasi proxy
<a name="_kubelet_proxy_configuration"></a>

 `kubelet`adalah agen node Kubernetes yang berjalan pada setiap node Kubernetes dan bertanggung jawab untuk mengelola node dan pod yang berjalan di atasnya. Jika Anda menggunakan proxy di lingkungan lokal, Anda harus mengonfigurasinya `kubelet` agar dapat berkomunikasi dengan titik akhir publik atau pribadi klaster Amazon EKS Anda.

Buat file pada setiap node hybrid yang disebut `http-proxy.conf` dalam `/etc/systemd/system/kubelet.service.d/` direktori dengan konten berikut. Ganti `proxy-domain` dan `port` dengan nilai-nilai untuk lingkungan Anda.

```
[Service]
Environment="HTTP_PROXY=http://proxy-domain:port"
Environment="HTTPS_PROXY=http://proxy-domain:port"
Environment="NO_PROXY=localhost"
```

#### `kubelet`konfigurasi dari data pengguna
<a name="_kubelet_configuration_from_user_data"></a>

`kubelet.service.d`Direktori harus dibuat untuk file ini. Anda perlu memuat ulang systemd untuk mengambil file konfigurasi tanpa reboot. Di AL2 023, layanan kemungkinan sudah berjalan ketika skrip Anda dijalankan, jadi Anda juga perlu memulai ulang.

```
mkdir -p /etc/systemd/system/kubelet.service.d
echo '[Service]' > /etc/systemd/system/kubelet.service.d/http-proxy.conf
echo 'Environment="HTTP_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/kubelet.service.d/http-proxy.conf
echo 'Environment="HTTPS_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/kubelet.service.d/http-proxy.conf
echo 'Environment="NO_PROXY=localhost"' >> /etc/systemd/system/kubelet.service.d/http-proxy.conf
systemctl daemon-reload
systemctl restart kubelet
```

### `ssm`konfigurasi proxy
<a name="_ssm_proxy_configuration"></a>

 `ssm`adalah salah satu penyedia kredensi yang dapat digunakan untuk menginisialisasi node hybrid. `ssm`bertanggung jawab untuk mengautentikasi dengan AWS dan menghasilkan kredensi sementara yang digunakan oleh. `kubelet` Jika Anda menggunakan proxy di lingkungan lokal dan menggunakan `ssm` sebagai penyedia kredensi di node, Anda harus mengonfigurasinya `ssm` agar dapat berkomunikasi dengan titik akhir layanan Amazon SSM.

Buat file pada setiap node hybrid yang disebut `http-proxy.conf` di jalur di bawah ini tergantung pada sistem operasi
+ Ubuntu - `/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d/http-proxy.conf` 
+ Amazon Linux 2023 dan Red Hat Enterprise Linux - `/etc/systemd/system/amazon-ssm-agent.service.d/http-proxy.conf` 

Isi file dengan konten berikut. Ganti `proxy-domain` dan `port` dengan nilai-nilai untuk lingkungan Anda.

```
[Service]
Environment="HTTP_PROXY=http://proxy-domain:port"
Environment="HTTPS_PROXY=http://proxy-domain:port"
Environment="NO_PROXY=localhost"
```

#### `ssm`konfigurasi dari data pengguna
<a name="_ssm_configuration_from_user_data"></a>

Direktori file layanan `ssm` systemd harus dibuat untuk file ini. Jalur direktori tergantung pada sistem operasi yang digunakan pada node.
+ Ubuntu - `/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d` 
+ Amazon Linux 2023 dan Red Hat Enterprise Linux - `/etc/systemd/system/amazon-ssm-agent.service.d` 

Ganti nama layanan systemd dalam perintah restart di bawah ini tergantung pada sistem operasi yang digunakan pada node
+ Ubuntu - `snap.amazon-ssm-agent.amazon-ssm-agent` 
+ Amazon Linux 2023 dan Red Hat Enterprise Linux - `amazon-ssm-agent` 

```
mkdir -p systemd-service-file-directory
echo '[Service]' > [.replaceable]#systemd-service-file-directory/http-proxy.conf
echo 'Environment="HTTP_PROXY=http://[.replaceable]#proxy-domain:port"' >> systemd-service-file-directory/http-proxy.conf
echo 'Environment="HTTPS_PROXY=http://[.replaceable]#proxy-domain:port"' >> [.replaceable]#systemd-service-file-directory/http-proxy.conf
echo 'Environment="NO_PROXY=localhost"' >> [.replaceable]#systemd-service-file-directory/http-proxy.conf
systemctl daemon-reload
systemctl restart [.replaceable]#systemd-service-name
```

### Konfigurasi proxy sistem operasi
<a name="_operating_system_proxy_configuration"></a>

Jika Anda menggunakan proxy untuk akses internet, Anda harus mengkonfigurasi sistem operasi Anda untuk dapat menarik dependensi node hybrid dari manajer paket sistem operasi Anda.

 **Ubuntu** 

1. Konfigurasikan `snap` untuk menggunakan proxy Anda dengan perintah berikut:

   ```
   sudo snap set system proxy.https=http://proxy-domain:port
   sudo snap set system proxy.http=http://proxy-domain:port
   ```

1. Untuk mengaktifkan proxy`apt`, buat file yang disebut `apt.conf` dalam `/etc/apt/` direktori. Ganti proxy-domain dan port dengan nilai untuk lingkungan Anda.

   ```
   Acquire::http::Proxy "http://proxy-domain:port";
   Acquire::https::Proxy "http://proxy-domain:port";
   ```

 **Amazon Linux 2023** 

1. `dnf`Konfigurasikan untuk menggunakan proxy Anda. Buat file `/etc/dnf/dnf.conf` dengan proxy-domain dan nilai port untuk lingkungan Anda.

   ```
   proxy=http://proxy-domain:port
   ```

 **Perusahaan Topi Merah Linux** 

1. `yum`Konfigurasikan untuk menggunakan proxy Anda. Buat file `/etc/yum.conf` dengan proxy-domain dan nilai port untuk lingkungan Anda.

   ```
   proxy=http://proxy-domain:port
   ```

### Konfigurasi proxy Peran IAM Di Mana Saja
<a name="_iam_roles_anywhere_proxy_configuration"></a>

Layanan penyedia kredensi IAM Roles Anywhere bertanggung jawab untuk menyegarkan kredensil saat menggunakan Peran IAM Di Mana Saja dengan tanda (lihat). `enableCredentialsFile` [Agen Identitas EKS Pod](hybrid-nodes-add-ons.md#hybrid-nodes-add-ons-pod-id) Jika Anda menggunakan proxy di lingkungan lokal, Anda harus mengonfigurasi layanan agar dapat berkomunikasi dengan titik akhir IAM Roles Anywhere.

Buat file yang disebut `http-proxy.conf` dalam `/etc/systemd/system/aws_signing_helper_update.service.d/` direktori dengan konten berikut. Ganti `proxy-domain` dan `port` dengan nilai-nilai untuk lingkungan Anda.

```
[Service]
Environment="HTTP_PROXY=http://proxy-domain:port"
Environment="HTTPS_PROXY=http://proxy-domain:port"
Environment="NO_PROXY=localhost"
```

## Konfigurasi luas cluster
<a name="_cluster_wide_configuration"></a>

Konfigurasi di bagian ini harus diterapkan setelah Anda membuat klaster Amazon EKS dan sebelum berjalan `nodeadm init` pada setiap node hybrid.

### konfigurasi proxy kube-proxy
<a name="_kube_proxy_proxy_configuration"></a>

Amazon EKS secara otomatis menginstal `kube-proxy` pada setiap node hybrid sebagai DaemonSet saat node hybrid Anda bergabung dengan cluster. `kube-proxy`memungkinkan perutean di seluruh layanan yang didukung oleh pod di kluster Amazon EKS. Untuk mengonfigurasi setiap host, `kube-proxy` memerlukan resolusi DNS untuk titik akhir klaster Amazon EKS Anda.

1. Edit `kube-proxy` DaemonSet dengan perintah berikut

   ```
   kubectl -n kube-system edit ds kube-proxy
   ```

   Ini akan membuka `kube-proxy` DaemonSet definisi pada editor Anda yang dikonfigurasi.

1. Tambahkan variabel lingkungan untuk `HTTP_PROXY` dan`HTTPS_PROXY`. Perhatikan variabel `NODE_NAME` lingkungan seharusnya sudah ada dalam konfigurasi Anda. Ganti `proxy-domain` dan `port` dengan nilai untuk lingkungan Anda.

   ```
   containers:
     - command:
       - kube-proxy
       - --v=2
       - --config=/var/lib/kube-proxy-config/config - --hostname-override=$(NODE_NAME)
       env:
       - name: HTTP_PROXY
         value: http://proxy-domain:port
       - name: HTTPS_PROXY
         value: http://proxy-domain:port
       - name: NODE_NAME
         valueFrom:
           fieldRef:
             apiVersion: v1
             fieldPath: spec.nodeName
   ```

# Konfigurasikan Cilium BGP untuk node hybrid
<a name="hybrid-nodes-cilium-bgp"></a>

Topik ini menjelaskan cara mengkonfigurasi Cilium Border Gateway Protocol (BGP) untuk Amazon EKS Hybrid Nodes. Fungsionalitas BGP Cilium disebut [Cilium BGP Control Plane](https://docs.cilium.io/en/stable/network/bgp-control-plane/bgp-control-plane/) dan dapat digunakan untuk mengiklankan pod dan alamat layanan ke jaringan lokal Anda. Untuk metode alternatif untuk membuat pod CIDRs dapat dirutekan di jaringan lokal, lihat. [Pod jarak jauh yang dapat dirutekan CIDRs](hybrid-nodes-concepts-kubernetes.md#hybrid-nodes-concepts-k8s-pod-cidrs)

## Konfigurasikan Cilium BGP
<a name="hybrid-nodes-cilium-bgp-configure"></a>

### Prasyarat
<a name="_prerequisites"></a>
+ Cilium dipasang mengikuti instruksi di. [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md)

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

1. Untuk menggunakan BGP dengan Cilium untuk mengiklankan pod atau alamat layanan dengan jaringan lokal Anda, Cilium harus diinstal dengan. `bgpControlPlane.enabled: true` Jika Anda mengaktifkan BGP untuk penerapan Cilium yang ada, Anda harus memulai ulang operator Cilium untuk menerapkan konfigurasi BGP jika BGP sebelumnya tidak diaktifkan. Anda dapat mengatur `operator.rollOutPods` ke `true` dalam nilai Helm Anda untuk memulai ulang operator Cilium sebagai bagian dari proses Helm. install/upgrade 

   ```
   helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \
     --namespace kube-system \
     --reuse-values \
     --set operator.rollOutPods=true \
     --set bgpControlPlane.enabled=true
   ```

1. Konfirmasikan bahwa operator dan agen Cilium telah dimulai ulang dan sedang berjalan.

   ```
   kubectl -n kube-system get pods --selector=app.kubernetes.io/part-of=cilium
   ```

   ```
   NAME                               READY   STATUS    RESTARTS   AGE
   cilium-grwlc                       1/1     Running   0          4m12s
   cilium-operator-68f7766967-5nnbl   1/1     Running   0          4m20s
   cilium-operator-68f7766967-7spfz   1/1     Running   0          4m20s
   cilium-pnxcv                       1/1     Running   0          6m29s
   cilium-r7qkj                       1/1     Running   0          4m12s
   cilium-wxhfn                       1/1     Running   0          4m1s
   cilium-z7hlb                       1/1     Running   0          6m30s
   ```

1. Buat file yang disebut `cilium-bgp-cluster.yaml` dengan `CiliumBGPClusterConfig` definisi. Anda mungkin perlu mendapatkan informasi berikut dari administrator jaringan Anda.
   + Konfigurasikan `localASN` dengan ASN untuk node yang menjalankan Cilium.
   + Konfigurasikan `peerASN` dengan ASN untuk router lokal Anda.
   + Konfigurasikan `peerAddress` dengan IP router lokal yang akan dilayani oleh setiap node yang menjalankan Cilium.

     ```
     apiVersion: cilium.io/v2alpha1
     kind: CiliumBGPClusterConfig
     metadata:
       name: cilium-bgp
     spec:
       nodeSelector:
         matchExpressions:
         - key: eks.amazonaws.com/compute-type
           operator: In
           values:
           - hybrid
       bgpInstances:
       - name: "rack0"
         localASN: NODES_ASN
         peers:
         - name: "onprem-router"
           peerASN: ONPREM_ROUTER_ASN
           peerAddress: ONPREM_ROUTER_IP
           peerConfigRef:
             name: "cilium-peer"
     ```

1. Terapkan konfigurasi cluster Cilium BGP ke cluster Anda.

   ```
   kubectl apply -f cilium-bgp-cluster.yaml
   ```

1. Buat file bernama `cilium-bgp-peer.yaml` dengan `CiliumBGPPeerConfig` sumber daya yang mendefinisikan konfigurasi rekan BGP. Beberapa rekan dapat berbagi konfigurasi yang sama dan memberikan referensi ke `CiliumBGPPeerConfig` sumber daya bersama. Lihat [konfigurasi BGP Peer](https://docs.cilium.io/en/latest/network/bgp-control-plane/bgp-control-plane-v2/#bgp-peer-configuration) dalam dokumentasi Cilium untuk daftar lengkap opsi konfigurasi.

   Nilai untuk setelan peer Cilium berikut harus sesuai dengan nilai router lokal yang Anda intip.
   + Konfigurasikan `holdTimeSeconds` yang menentukan berapa lama peer BGP menunggu pesan keepalive atau update sebelum mendeklarasikan sesi turun. Defaultnya adalah 90 detik.
   + Konfigurasikan `keepAliveTimeSeconds` yang menentukan apakah peer BGP masih dapat dijangkau dan sesi BGP aktif. Waktu default-nya adalah 30 detik.
   + Konfigurasikan `restartTimeSeconds` yang menentukan waktu pesawat kontrol BGP Cilium diharapkan untuk membangun kembali sesi BGP setelah restart. Periode default-nya adalah 120 detik.

     ```
     apiVersion: cilium.io/v2alpha1
     kind: CiliumBGPPeerConfig
     metadata:
       name: cilium-peer
     spec:
       timers:
         holdTimeSeconds: 90
         keepAliveTimeSeconds: 30
       gracefulRestart:
         enabled: true
         restartTimeSeconds: 120
       families:
         - afi: ipv4
           safi: unicast
           advertisements:
             matchLabels:
               advertise: "bgp"
     ```

1. Terapkan konfigurasi peer Cilium BGP ke cluster Anda.

   ```
   kubectl apply -f cilium-bgp-peer.yaml
   ```

1. Buat file bernama `cilium-bgp-advertisement-pods.yaml` dengan `CiliumBGPAdvertisement` sumber daya untuk mengiklankan pod CIDRs ke jaringan lokal Anda.
   + `CiliumBGPAdvertisement`Sumber daya digunakan untuk menentukan jenis iklan dan atribut yang terkait dengannya. Contoh di bawah ini mengonfigurasi Cilium hanya untuk mengiklankan pod. CIDRs Lihat contoh di [Jenis layanan LoadBalancer](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium-loadbalancer) dan [Penyeimbangan beban dalam cluster silia](hybrid-nodes-load-balancing.md#hybrid-nodes-service-lb-cilium) untuk informasi selengkapnya tentang mengonfigurasi Cilium untuk mengiklankan alamat layanan.
   + Setiap node hibrida yang menjalankan agen Cilium bermitra dengan router berkemampuan BGP hulu. Setiap node mengiklankan rentang pod CIDR yang dimilikinya ketika Cilium disetel ke `PodCIDR` like pada contoh di bawah `advertisementType` ini. Lihat [konfigurasi Iklan BGP](https://docs.cilium.io/en/stable/network/bgp-control-plane/bgp-control-plane-v2/#bgp-advertisements) di dokumentasi Cilium untuk informasi selengkapnya.

     ```
     apiVersion: cilium.io/v2alpha1
     kind: CiliumBGPAdvertisement
     metadata:
       name: bgp-advertisement-pods
       labels:
         advertise: bgp
     spec:
       advertisements:
         - advertisementType: "PodCIDR"
     ```

1. Terapkan konfigurasi Cilium BGP Advertisement ke cluster Anda.

   ```
   kubectl apply -f cilium-bgp-advertisement-pods.yaml
   ```

1. Anda dapat mengonfirmasi bahwa peering BGP bekerja dengan Cilium [CLI](https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/#install-the-cilium-cli) dengan menggunakan perintah. `cilium bgp peers` Anda akan melihat nilai yang benar dalam output untuk lingkungan Anda dan Status Sesi sebagai`established`. Lihat [Panduan Pemecahan Masalah dan Operasi](https://docs.cilium.io/en/latest/network/bgp-control-plane/bgp-control-plane/#troubleshooting-and-operation-guide) di dokumentasi Cilium untuk informasi selengkapnya tentang pemecahan masalah.

   Dalam contoh di bawah ini, ada lima node hybrid yang menjalankan agen Cilium dan setiap node mengiklankan rentang Pod CIDR yang dimilikinya.

   ```
   cilium bgp peers
   ```

   ```
   Node                   Local AS    Peer AS               Peer Address        Session State   Uptime     Family         Received   Advertised
   mi-026d6a261e355fba7   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h18m58s   ipv4/unicast   1          2
   mi-082f73826a163626e   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h19m12s   ipv4/unicast   1          2
   mi-09183e8a3d755abf6   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h18m47s   ipv4/unicast   1          2
   mi-0d78d815980ed202d   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h19m12s   ipv4/unicast   1          2
   mi-0daa253999fe92daa   NODES_ASN
                     ONPREM_ROUTER_ASN
                     ONPREM_ROUTER_IP    established     1h18m58s   ipv4/unicast   1          2
   ```

   ```
   cilium bgp routes
   ```

   ```
   Node                   VRouter       Prefix           NextHop   Age         Attrs
   mi-026d6a261e355fba7   NODES_ASN     10.86.2.0/26     0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-082f73826a163626e   NODES_ASN     10.86.2.192/26   0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-09183e8a3d755abf6   NODES_ASN     10.86.2.64/26    0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-0d78d815980ed202d   NODES_ASN     10.86.2.128/26   0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-0daa253999fe92daa   NODES_ASN     10.86.3.0/26     0.0.0.0   1h16m46s   [{Origin: i} {Nexthop: 0.0.0.0}]
   ```

# Konfigurasikan Ingress Kubernetes untuk node hybrid
<a name="hybrid-nodes-ingress"></a>

Topik ini menjelaskan cara mengonfigurasi Kubernetes Ingress untuk beban kerja yang berjalan di Amazon EKS Hybrid Nodes. [Kubernetes Ingress mengekspos](https://kubernetes.io/docs/concepts/services-networking/ingress/) rute HTTP dan HTTPS dari luar klaster ke layanan di dalam klaster. Untuk memanfaatkan sumber daya Ingress, pengontrol Ingress Kubernetes diperlukan untuk menyiapkan infrastruktur jaringan dan komponen yang melayani lalu lintas jaringan.

 AWS mendukung AWS Application Load Balancer (ALB) dan Cilium for Kubernetes Ingress untuk beban kerja yang berjalan pada EKS Hybrid Nodes. Keputusan untuk menggunakan ALB atau Cilium untuk Ingress didasarkan pada sumber lalu lintas aplikasi. Jika lalu lintas aplikasi berasal dari AWS Region, AWS rekomendasikan untuk menggunakan AWS ALB dan Load AWS Balancer Controller. Jika lalu lintas aplikasi berasal dari lingkungan lokal atau edge lokal, AWS rekomendasikan untuk menggunakan kemampuan Ingress bawaan Cilium, yang dapat digunakan dengan atau tanpa infrastruktur penyeimbang beban di lingkungan Anda.

![\[Masuknya Node Hibrida EKS\]](http://docs.aws.amazon.com/id_id/eks/latest/userguide/images/hybrid-nodes-ingress.png)


## AWS Application Load Balancer
<a name="hybrid-nodes-ingress-alb"></a>

Anda dapat menggunakan [AWS Load Balancer Controller](aws-load-balancer-controller.md) dan Application Load Balancer (ALB) dengan `ip` tipe target untuk beban kerja yang berjalan pada node hybrid. Saat menggunakan tipe target`ip`, ALB meneruskan lalu lintas langsung ke pod, melewati jalur jaringan Layer Service. Agar ALB dapat mencapai target IP pod pada node hibrid, CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal Anda. Selain itu, AWS Load Balancer Controller menggunakan webhook dan memerlukan komunikasi langsung dari bidang kontrol EKS. Untuk informasi selengkapnya, lihat [Konfigurasikan webhook untuk node hybrid](hybrid-nodes-webhooks.md).

### Pertimbangan
<a name="_considerations"></a>
+ Lihat [Rute aplikasi dan lalu lintas HTTP dengan Application Load Balancers](alb-ingress.md) dan [Instal AWS Load Balancer Controller dengan Helm](lbc-helm.md) untuk informasi lebih lanjut tentang AWS Application Load Balancer dan Load AWS Balancer Controller.
+ Lihat [Praktik Terbaik untuk Load Balancing](https://docs.aws.amazon.com/eks/latest/best-practices/load-balacing.html) untuk informasi tentang cara memilih antara AWS Application Load Balancer AWS dan Network Load Balancer.
+ Lihat anotasi [AWS Load Balancer Controller Ingress untuk daftar anotasi](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/) yang dapat dikonfigurasi untuk sumber daya Ingress dengan Application Load Balancer. AWS 

### Prasyarat
<a name="_prerequisites"></a>
+ Cilium dipasang mengikuti instruksi di. [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md)
+ Cilium BGP Control Plane diaktifkan mengikuti instruksi di. [Konfigurasikan Cilium BGP untuk node hybrid](hybrid-nodes-cilium-bgp.md) Jika Anda tidak ingin menggunakan BGP, Anda harus menggunakan metode alternatif untuk membuat pod lokal CIDRs dapat dirutekan di jaringan lokal Anda. Jika Anda tidak membuat pod lokal Anda CIDRs dapat dirutekan, ALB tidak akan dapat mendaftar atau menghubungi target IP pod Anda.
+ Helm diinstal di lingkungan baris perintah Anda, lihat [petunjuk Setup Helm](helm.md) untuk informasi selengkapnya.
+ eksctl diinstal di lingkungan baris perintah Anda, lihat petunjuk instalasi [eksctl](install-kubectl.md#eksctl-install-update) untuk informasi lebih lanjut.

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

1. Unduh kebijakan IAM untuk AWS Load Balancer Controller yang memungkinkannya melakukan panggilan atas nama AWS APIs Anda.

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/docs/install/iam_policy.json
   ```

1. Buat kebijakan IAM menggunakan kebijakan yang diunduh di langkah sebelumnya.

   ```
   aws iam create-policy \
       --policy-name AWSLoadBalancerControllerIAMPolicy \
       --policy-document file://iam_policy.json
   ```

1. Ganti nilai untuk nama cluster (`CLUSTER_NAME`), AWS Region (`AWS_REGION`), dan ID AWS akun (`AWS_ACCOUNT_ID`) dengan pengaturan Anda dan jalankan perintah berikut.

   ```
   eksctl create iamserviceaccount \
       --cluster=CLUSTER_NAME \
       --namespace=kube-system \
       --name=aws-load-balancer-controller \
       --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \
       --override-existing-serviceaccounts \
       --region AWS_REGION \
       --approve
   ```

1. Tambahkan repositori bagan Helm eks-charts dan perbarui repositori Helm lokal Anda untuk memastikan bahwa Anda memiliki bagan terbaru.

   ```
   helm repo add eks https://aws.github.io/eks-charts
   ```

   ```
   helm repo update eks
   ```

1. Instal AWS Load Balancer Controller. Ganti nilai untuk nama cluster (`CLUSTER_NAME`), AWS Region (`AWS_REGION`), VPC ID (`VPC_ID`), dan Load AWS Balancer Controller Helm chart version `AWS_LBC_HELM_VERSION` () dengan pengaturan Anda dan jalankan perintah berikut. Jika Anda menjalankan cluster mode campuran dengan node hybrid dan node di AWS Cloud, Anda dapat menjalankan AWS Load Balancer Controller pada node cloud mengikuti instruksi di. [AWS Pengontrol Load Balancer](hybrid-nodes-webhooks.md#hybrid-nodes-mixed-lbc)
   + Anda dapat menemukan bagan Helm versi terbaru dengan menjalankan`helm search repo eks/aws-load-balancer-controller --versions`.

     ```
     helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
       -n kube-system \
       --version AWS_LBC_HELM_VERSION \
       --set clusterName=CLUSTER_NAME \
       --set region=AWS_REGION \
       --set vpcId=VPC_ID \
       --set serviceAccount.create=false \
       --set serviceAccount.name=aws-load-balancer-controller
     ```

1. Verifikasi bahwa AWS Load Balancer Controller berhasil diinstal.

   ```
   kubectl get -n kube-system deployment aws-load-balancer-controller
   ```

   ```
   NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
   aws-load-balancer-controller   2/2     2            2           84s
   ```

1. Buat contoh aplikasi. Contoh di bawah ini menggunakan contoh aplikasi [microservices Istio Bookinfo](https://istio.io/latest/docs/examples/bookinfo/).

   ```
   kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
   ```

1. Buat file bernama `my-ingress-alb.yaml` dengan isi berikut ini.

   ```
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: my-ingress
     namespace: default
     annotations:
       alb.ingress.kubernetes.io/load-balancer-name: "my-ingress-alb"
       alb.ingress.kubernetes.io/target-type: "ip"
       alb.ingress.kubernetes.io/scheme: "internet-facing"
       alb.ingress.kubernetes.io/healthcheck-path: "/details/1"
   spec:
     ingressClassName: alb
     rules:
     - http:
         paths:
         - backend:
             service:
               name: details
               port:
                 number: 9080
           path: /details
           pathType: Prefix
   ```

1. Terapkan konfigurasi Ingress ke cluster Anda.

   ```
   kubectl apply -f my-ingress-alb.yaml
   ```

1. Penyediaan ALB untuk sumber daya Ingress Anda mungkin memakan waktu beberapa menit. Setelah ALB disediakan, sumber daya Ingress Anda akan memiliki alamat yang ditetapkan untuk itu yang sesuai dengan nama DNS dari penerapan ALB. Alamat akan memiliki format`<alb-name>-<random-string>.<region>.elb.amazonaws.com`.

   ```
   kubectl get ingress my-ingress
   ```

   ```
   NAME         CLASS   HOSTS   ADDRESS                                                     PORTS   AGE
   my-ingress   alb     *       my-ingress-alb-<random-string>.<region>.elb.amazonaws.com   80      23m
   ```

1. Akses Layanan menggunakan alamat ALB.

   ```
   curl -s http//my-ingress-alb-<random-string>.<region>.elb.amazonaws.com:80/details/1 | jq
   ```

   ```
   {
     "id": 1,
     "author": "William Shakespeare",
     "year": 1595,
     "type": "paperback",
     "pages": 200,
     "publisher": "PublisherA",
     "language": "English",
     "ISBN-10": "1234567890",
     "ISBN-13": "123-1234567890"
     "details": "This is the details page"
   }
   ```

## Ikhtisar Cilium Ingress dan Cilium Gateway
<a name="hybrid-nodes-ingress-cilium"></a>

Kemampuan Ingress Cilium dibangun ke dalam arsitektur Cilium dan dapat dikelola dengan Kubernetes Ingress API atau Gateway API. Jika Anda tidak memiliki sumber daya Ingress yang ada, AWS rekomendasikan untuk memulai dengan Gateway API, karena ini adalah cara yang lebih ekspresif dan fleksibel untuk mendefinisikan dan mengelola sumber daya jaringan Kubernetes. [Kubernetes Gateway API](https://gateway-api.sigs.k8s.io/) bertujuan untuk menstandarisasi bagaimana sumber daya jaringan untuk Ingress, Load Balancing, dan Service Mesh didefinisikan dan dikelola dalam klaster Kubernetes.

Saat Anda mengaktifkan fitur Ingress atau Gateway Cilium, operator Cilium merekonsiliasi objek Ingress/Gateway di cluster dan proxy Envoy pada setiap node memproses lalu lintas jaringan Layer 7 (L7). Cilium tidak secara langsung menyediakan infrastruktur Ingress /Gateway seperti load balancer. Jika Anda berencana untuk menggunakan Cilium Ingress /Gateway dengan penyeimbang beban, Anda harus menggunakan perkakas penyeimbang beban, biasanya pengontrol Ingress atau Gateway, untuk menyebarkan dan mengelola infrastruktur penyeimbang beban.

Untuk lalu lintas Ingress /Gateway, Cilium menangani lalu lintas jaringan inti dan penegakan kebijakan L3/L4, dan proxy Utusan terintegrasi memproses lalu lintas jaringan L7. Dengan Cilium Ingress /Gateway, Envoy bertanggung jawab untuk menerapkan aturan routing L7, kebijakan, dan manipulasi permintaan, manajemen lalu lintas tingkat lanjut seperti pemisahan lalu lintas dan pencerminan, dan penghentian dan originasi TLS. Proksi Utusan Cilium digunakan sebagai DaemonSet (`cilium-envoy`) terpisah secara default, yang memungkinkan Utusan dan agen Cilium diperbarui, diskalakan, dan dikelola secara terpisah.

[Untuk informasi lebih lanjut tentang cara kerja Cilium Ingress dan Cilium Gateway, lihat halaman Cilium [Ingress dan Cilium](https://docs.cilium.io/en/stable/network/servicemesh/ingress/) Gateway di dokumentasi Cilium.](https://docs.cilium.io/en/stable/network/servicemesh/gateway-api/gateway-api/)

## Perbandingan Cilium Ingress dan Gateway
<a name="hybrid-nodes-ingress-cilium-comparison"></a>

**Tabel di bawah ini merangkum fitur Cilium Ingress dan Cilium Gateway pada versi Cilium 1.17.x.**


| Fitur | Ingress | Gateway | 
| --- | --- | --- | 
|  Jenis layanan LoadBalancer  |  Ya  |  Ya  | 
|  Jenis layanan NodePort  |  Ya  |  Tidak1   | 
|  Jaringan host  |  Ya  |  Ya  | 
|  Penyeimbang beban bersama  |  Ya  |  Ya  | 
|  Penyeimbang beban khusus  |  Ya  |  Tidak 2   | 
|  Kebijakan jaringan  |  Ya  |  Ya  | 
|  Protokol  |  Lapisan 7 (HTTP (S), gRPC)  |  Lapisan 7 (HTTP (S), gRPC) 3   | 
|  Passthrough TLS  |  Ya  |  Ya  | 
|  Manajemen Lalu Lintas  |  Perutean jalur dan Host  |  Perutean jalur dan Host, pengalihan URL dan penulisan ulang, pemisahan lalu lintas, modifikasi header  | 

 1 [Dukungan Cilium Gateway untuk NodePort layanan direncanakan untuk Cilium versi 1.18.x (\$127273)](https://github.com/cilium/cilium/pull/27273)

 2 [Dukungan Cilium Gateway untuk penyeimbang beban khusus (\$125567)](https://github.com/cilium/cilium/issues/25567)

 3 [Dukungan Cilium Gateway untuk TCP/UDP (\$121929)](https://github.com/cilium/cilium/issues/21929)

## Instal Cilium Gateway
<a name="hybrid-nodes-ingress-cilium-gateway-install"></a>

### Pertimbangan
<a name="_considerations_2"></a>
+ Cilium harus dikonfigurasi dengan `nodePort.enabled` set ke `true` seperti yang ditunjukkan pada contoh di bawah ini. Jika Anda menggunakan fitur pengganti kube-proxy Cilium, Anda tidak perlu menyetel ke. `nodePort.enabled` `true`
+ Cilium harus dikonfigurasi dengan `envoy.enabled` set ke `true` seperti yang ditunjukkan pada contoh di bawah ini.
+ Cilium Gateway dapat digunakan dalam load balancer (default) atau mode jaringan host.
+ Saat menggunakan Cilium Gateway dalam mode penyeimbang beban, `service.beta.kubernetes.io/aws-load-balancer-type: "external"` anotasi harus disetel pada resource Gateway untuk mencegah penyedia AWS cloud lama membuat Classic Load Balancer untuk Layanan jenis LoadBalancer yang dibuat Cilium untuk sumber daya Gateway.
+ Saat menggunakan Cilium Gateway dalam mode jaringan host, mode Service of type LoadBalancer dinonaktifkan. Mode jaringan host berguna untuk lingkungan yang tidak memiliki infrastruktur penyeimbang beban, lihat [Jaringan host](#hybrid-nodes-ingress-cilium-host-network) untuk informasi lebih lanjut.

### Prasyarat
<a name="_prerequisites_2"></a>

1. Helm diinstal di lingkungan baris perintah Anda, lihat instruksi [Setup](helm.md) Helm.

1. Cilium dipasang mengikuti instruksi di. [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md)

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

1. Instal Kubernetes Gateway API Custom Resource Definitions (). CRDs

   ```
   kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yaml
   kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_gateways.yaml
   kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml
   kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_referencegrants.yaml
   kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml
   ```

1. Buat file bernama `cilium-gateway-values.yaml` dengan konten berikut. Contoh di bawah ini mengonfigurasi Cilium Gateway untuk menggunakan mode load balancer default dan menggunakan proxy Envoy terpisah `cilium-envoy` DaemonSet yang dikonfigurasi agar berjalan hanya pada node hybrid.

   ```
   gatewayAPI:
     enabled: true
     # uncomment to use host network mode
     # hostNetwork:
     #   enabled: true
   nodePort:
     enabled: true
   envoy:
     enabled: true
     affinity:
       nodeAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
           nodeSelectorTerms:
           - matchExpressions:
             - key: eks.amazonaws.com/compute-type
               operator: In
               values:
               - hybrid
   ```

1. Terapkan file nilai Helm ke cluster Anda.

   ```
   helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \
     --namespace kube-system \
     --reuse-values \
     --set operator.rollOutPods=true \
     --values cilium-gateway-values.yaml
   ```

1. Konfirmasikan operator Cilium, agen, dan pod Envoy sedang berjalan.

   ```
   kubectl -n kube-system get pods --selector=app.kubernetes.io/part-of=cilium
   ```

   ```
   NAME                               READY   STATUS    RESTARTS   AGE
   cilium-envoy-5pgnd                 1/1     Running   0          6m31s
   cilium-envoy-6fhg4                 1/1     Running   0          6m30s
   cilium-envoy-jskrk                 1/1     Running   0          6m30s
   cilium-envoy-k2xtb                 1/1     Running   0          6m31s
   cilium-envoy-w5s9j                 1/1     Running   0          6m31s
   cilium-grwlc                       1/1     Running   0          4m12s
   cilium-operator-68f7766967-5nnbl   1/1     Running   0          4m20s
   cilium-operator-68f7766967-7spfz   1/1     Running   0          4m20s
   cilium-pnxcv                       1/1     Running   0          6m29s
   cilium-r7qkj                       1/1     Running   0          4m12s
   cilium-wxhfn                       1/1     Running   0          4m1s
   cilium-z7hlb                       1/1     Running   0          6m30s
   ```

## Konfigurasikan Cilium Gateway
<a name="hybrid-nodes-ingress-cilium-gateway-configure"></a>

Cilium Gateway diaktifkan pada objek Gateway dengan menyetel ke. `gatewayClassName` `cilium` Layanan yang dibuat Cilium untuk sumber daya Gateway dapat dikonfigurasi dengan bidang pada objek Gateway. Anotasi umum yang digunakan oleh pengontrol Gateway untuk mengonfigurasi infrastruktur penyeimbang beban dapat dikonfigurasi dengan bidang objek Gateway. `infrastructure` Saat menggunakan LoadBalancer IPAM Cilium (lihat contoh di[Jenis layanan LoadBalancer](#hybrid-nodes-ingress-cilium-loadbalancer)), alamat IP yang akan digunakan untuk Layanan tipe LoadBalancer dapat dikonfigurasi pada bidang objek Gateway. `addresses` Untuk informasi selengkapnya tentang konfigurasi Gateway, lihat spesifikasi [Kubernetes Gateway API.](https://gateway-api.sigs.k8s.io/reference/spec/#gateway)

```
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: my-gateway
spec:
  gatewayClassName: cilium
  infrastructure:
    annotations:
      service.beta.kubernetes.io/...
      service.kuberentes.io/...
  addresses:
  - type: IPAddress
    value: <LoadBalancer IP address>
  listeners:
  ...
```

Spesifikasi Cilium dan Kubernetes Gateway mendukung, Gateway GatewayClass,,, dan sumber daya. HTTPRoute GRPCRoute ReferenceGrant 
+ Lihat [HTTPRoute](https://gateway-api.sigs.k8s.io/api-types/httproute/HTTPRoute)dan [GRPCRoute](https://gateway-api.sigs.k8s.io/api-types/grpcroute/GRPCRoute)spesifikasi untuk daftar bidang yang tersedia.
+ Lihat contoh di [Menyebarkan Gerbang Cilium](#hybrid-nodes-ingress-cilium-gateway-deploy) bagian di bawah ini dan contoh dalam [dokumentasi Cilium](https://docs.cilium.io/en/stable/network/servicemesh/gateway-api/gateway-api/#examples) untuk cara menggunakan dan mengonfigurasi sumber daya ini.

## Menyebarkan Gerbang Cilium
<a name="hybrid-nodes-ingress-cilium-gateway-deploy"></a>

1. Buat contoh aplikasi. Contoh di bawah ini menggunakan contoh aplikasi [microservices Istio Bookinfo](https://istio.io/latest/docs/examples/bookinfo/).

   ```
   kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
   ```

1. Konfirmasikan aplikasi berjalan dengan sukses.

   ```
   kubectl get pods
   ```

   ```
   NAME                              READY   STATUS    RESTARTS   AGE
   details-v1-766844796b-9965p       1/1     Running   0          81s
   productpage-v1-54bb874995-jmc8j   1/1     Running   0          80s
   ratings-v1-5dc79b6bcd-smzxz       1/1     Running   0          80s
   reviews-v1-598b896c9d-vj7gb       1/1     Running   0          80s
   reviews-v2-556d6457d-xbt8v        1/1     Running   0          80s
   reviews-v3-564544b4d6-cpmvq       1/1     Running   0          80s
   ```

1. Buat file bernama `my-gateway.yaml` dengan isi berikut ini. Contoh di bawah ini menggunakan `service.beta.kubernetes.io/aws-load-balancer-type: "external"` anotasi untuk mencegah penyedia AWS cloud lama membuat Classic Load Balancer untuk LoadBalancer jenis Layanan yang dibuat Cilium untuk resource Gateway.

   ```
   ---
   apiVersion: gateway.networking.k8s.io/v1
   kind: Gateway
   metadata:
     name: my-gateway
   spec:
     gatewayClassName: cilium
     infrastructure:
       annotations:
         service.beta.kubernetes.io/aws-load-balancer-type: "external"
     listeners:
     - protocol: HTTP
       port: 80
       name: web-gw
       allowedRoutes:
         namespaces:
           from: Same
   ---
   apiVersion: gateway.networking.k8s.io/v1
   kind: HTTPRoute
   metadata:
     name: http-app-1
   spec:
     parentRefs:
     - name: my-gateway
       namespace: default
     rules:
     - matches:
       - path:
           type: PathPrefix
           value: /details
       backendRefs:
       - name: details
         port: 9080
   ```

1. Terapkan sumber daya Gateway ke cluster Anda.

   ```
   kubectl apply -f my-gateway.yaml
   ```

1. Konfirmasikan sumber daya Gateway dan Layanan terkait telah dibuat. Pada tahap ini, diharapkan bahwa `ADDRESS` bidang sumber daya Gateway tidak diisi dengan alamat IP atau nama host, dan bahwa Layanan tipe LoadBalancer untuk sumber daya Gateway juga tidak memiliki alamat IP atau nama host yang ditetapkan.

   ```
   kubectl get gateway my-gateway
   ```

   ```
   NAME         CLASS    ADDRESS   PROGRAMMED   AGE
   my-gateway   cilium             True         10s
   ```

   ```
   kubectl get svc cilium-gateway-my-gateway
   ```

   ```
   NAME                        TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
   cilium-gateway-my-gateway   LoadBalancer   172.16.227.247   <pending>     80:30912/TCP   24s
   ```

1. Lanjutkan [Jenis layanan LoadBalancer](#hybrid-nodes-ingress-cilium-loadbalancer) untuk mengonfigurasi sumber daya Gateway untuk menggunakan alamat IP yang dialokasikan oleh Cilium Load Balancer IPAM, dan [Jenis layanan NodePort](#hybrid-nodes-ingress-cilium-nodeport) atau [Jaringan host](#hybrid-nodes-ingress-cilium-host-network) untuk mengonfigurasi sumber daya Gateway untuk menggunakan atau meng-host alamat jaringan. NodePort 

## Instal Cilium Ingress
<a name="hybrid-nodes-ingress-cilium-ingress-install"></a>

### Pertimbangan
<a name="_considerations_3"></a>
+ Cilium harus dikonfigurasi dengan `nodePort.enabled` set ke `true` seperti yang ditunjukkan pada contoh di bawah ini. Jika Anda menggunakan fitur pengganti kube-proxy Cilium, Anda tidak perlu menyetel ke. `nodePort.enabled` `true`
+ Cilium harus dikonfigurasi dengan `envoy.enabled` set ke `true` seperti yang ditunjukkan pada contoh di bawah ini.
+ Dengan `ingressController.loadbalancerMode` disetel ke`dedicated`, Cilium membuat Layanan khusus untuk setiap sumber daya Ingress. Dengan `ingressController.loadbalancerMode` disetel ke`shared`, Cilium membuat tipe Layanan bersama LoadBalancer untuk semua sumber daya Ingress di cluster. Saat menggunakan mode penyeimbang `shared` beban, pengaturan untuk Layanan bersama seperti`labels`,, `annotations``type`, dan `loadBalancerIP` dikonfigurasi di `ingressController.service` bagian nilai Helm. Lihat [referensi nilai Cilium Helm](https://github.com/cilium/cilium/blob/v1.17.6/install/kubernetes/cilium/values.yaml#L887) untuk informasi lebih lanjut.
+ Dengan `ingressController.default` disetel ke`true`, Cilium dikonfigurasi sebagai pengontrol Ingress default untuk cluster dan akan membuat entri Ingress bahkan ketika tidak `ingressClassName` ditentukan pada sumber daya Ingress.
+ Cilium Ingress dapat digunakan dalam load balancer (default), port node, atau mode jaringan host. Ketika Cilium diinstal dalam mode jaringan host, Layanan tipe LoadBalancer dan Layanan NodePort mode tipe dinonaktifkan. Untuk informasi selengkapnya, lihat [Jaringan host](#hybrid-nodes-ingress-cilium-host-network).
+ [Selalu atur `ingressController.service.annotations` ke `service.beta.kubernetes.io/aws-load-balancer-type: "external"` dalam nilai Helm untuk mencegah penyedia AWS cloud lama membuat Classic Load Balancer untuk Layanan `cilium-ingress` default yang dibuat oleh bagan Cilium Helm.](https://github.com/cilium/cilium/blob/main/install/kubernetes/cilium/templates/cilium-ingress-service.yaml)

### Prasyarat
<a name="_prerequisites_3"></a>

1. Helm diinstal di lingkungan baris perintah Anda, lihat instruksi [Setup](helm.md) Helm.

1. Cilium dipasang mengikuti instruksi di. [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md)

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

1. Buat file bernama `cilium-ingress-values.yaml` dengan konten berikut. Contoh di bawah ini mengonfigurasi Cilium Ingress untuk menggunakan `dedicated` mode load balancer default dan menggunakan proxy Envoy terpisah `cilium-envoy` DaemonSet yang dikonfigurasi agar berjalan hanya pada node hybrid.

   ```
   ingressController:
     enabled: true
     loadbalancerMode: dedicated
     service:
       annotations:
         service.beta.kubernetes.io/aws-load-balancer-type: "external"
   nodePort:
     enabled: true
   envoy:
     enabled: true
     affinity:
       nodeAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
           nodeSelectorTerms:
           - matchExpressions:
             - key: eks.amazonaws.com/compute-type
               operator: In
               values:
               - hybrid
   ```

1. Terapkan file nilai Helm ke cluster Anda.

   ```
   helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \
     --namespace kube-system \
     --reuse-values \
     --set operator.rollOutPods=true \
     --values cilium-ingress-values.yaml
   ```

1. Konfirmasikan operator Cilium, agen, dan pod Envoy sedang berjalan.

   ```
   kubectl -n kube-system get pods --selector=app.kubernetes.io/part-of=cilium
   ```

   ```
   NAME                               READY   STATUS    RESTARTS   AGE
   cilium-envoy-5pgnd                 1/1     Running   0          6m31s
   cilium-envoy-6fhg4                 1/1     Running   0          6m30s
   cilium-envoy-jskrk                 1/1     Running   0          6m30s
   cilium-envoy-k2xtb                 1/1     Running   0          6m31s
   cilium-envoy-w5s9j                 1/1     Running   0          6m31s
   cilium-grwlc                       1/1     Running   0          4m12s
   cilium-operator-68f7766967-5nnbl   1/1     Running   0          4m20s
   cilium-operator-68f7766967-7spfz   1/1     Running   0          4m20s
   cilium-pnxcv                       1/1     Running   0          6m29s
   cilium-r7qkj                       1/1     Running   0          4m12s
   cilium-wxhfn                       1/1     Running   0          4m1s
   cilium-z7hlb                       1/1     Running   0          6m30s
   ```

## Konfigurasikan Cilium Ingress
<a name="hybrid-nodes-ingress-cilium-ingress-configure"></a>

Cilium Ingress diaktifkan pada objek Ingress dengan menyetel ke. `ingressClassName` `cilium` Layanan yang dibuat Cilium untuk sumber daya Ingress dapat dikonfigurasi dengan anotasi pada objek Ingress saat menggunakan mode penyeimbang `dedicated` beban dan dalam konfigurasi Cilium/Helm saat menggunakan mode penyeimbang beban. `shared` Anotasi ini biasanya digunakan oleh pengontrol Ingress untuk mengonfigurasi infrastruktur penyeimbang beban, atau atribut lain dari Layanan seperti jenis layanan, mode penyeimbang beban, port, dan passthrough TLS. Anotasi kunci dijelaskan di bawah ini. Untuk daftar lengkap anotasi yang didukung, lihat anotasi [Cilium Ingress](https://docs.cilium.io/en/stable/network/servicemesh/ingress/#supported-ingress-annotations) di dokumentasi Cilium.


| Anotasi | Deskripsi | 
| --- | --- | 
|   `ingress.cilium.io/loadbalancer-mode`   |   `dedicated`: Jenis Layanan Khusus LoadBalancer untuk setiap sumber daya Ingress (default).  `shared`: Jenis Layanan Tunggal LoadBalancer untuk semua sumber daya Ingress.  | 
|   `ingress.cilium.io/service-type`   |   `LoadBalancer`: Layanan akan bertipe LoadBalancer (default)  `NodePort`: Layanan akan bertipe NodePort.  | 
|   `service.beta.kubernetes.io/aws-load-balancer-type`   |   `"external"`: Mencegah penyedia AWS cloud lama dari penyediaan Classic Load Balancer untuk Layanan jenis. LoadBalancer  | 
|   `lbipam.cilium.io/ips`   |  Daftar alamat IP yang akan dialokasikan dari LoadBalancer Cilium IPAM  | 

Spesifikasi Cilium dan Kubernetes Ingress mendukung aturan pencocokan Exact, Prefix, dan spesifik implementasi untuk jalur Ingress. Cilium mendukung regex sebagai aturan pencocokan khusus implementasinya. Untuk informasi selengkapnya, lihat [Ingress path types and precedence](https://docs.cilium.io/en/stable/network/servicemesh/ingress/#ingress-path-types-and-precedence) and [Path types example](https://docs.cilium.io/en/stable/network/servicemesh/path-types/) in the Cilium documentation, dan contoh di bagian halaman ini[Menyebarkan Cilium Ingress](#hybrid-nodes-ingress-cilium-ingress-deploy).

Contoh objek Cilium Ingress ditunjukkan di bawah ini.

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    service.beta.kuberentes.io/...
    service.kuberentes.io/...
spec:
  ingressClassName: cilium
  rules:
  ...
```

## Menyebarkan Cilium Ingress
<a name="hybrid-nodes-ingress-cilium-ingress-deploy"></a>

1. Buat contoh aplikasi. Contoh di bawah ini menggunakan contoh aplikasi [microservices Istio Bookinfo](https://istio.io/latest/docs/examples/bookinfo/).

   ```
   kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
   ```

1. Konfirmasikan aplikasi berjalan dengan sukses.

   ```
   kubectl get pods
   ```

   ```
   NAME                              READY   STATUS    RESTARTS   AGE
   details-v1-766844796b-9965p       1/1     Running   0          81s
   productpage-v1-54bb874995-jmc8j   1/1     Running   0          80s
   ratings-v1-5dc79b6bcd-smzxz       1/1     Running   0          80s
   reviews-v1-598b896c9d-vj7gb       1/1     Running   0          80s
   reviews-v2-556d6457d-xbt8v        1/1     Running   0          80s
   reviews-v3-564544b4d6-cpmvq       1/1     Running   0          80s
   ```

1. Buat file bernama `my-ingress.yaml` dengan isi berikut ini. Contoh di bawah ini menggunakan `service.beta.kubernetes.io/aws-load-balancer-type: "external"` anotasi untuk mencegah penyedia AWS cloud lama membuat Classic Load Balancer untuk LoadBalancer jenis Layanan yang dibuat Cilium untuk resource Ingress.

   ```
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: my-ingress
     namespace: default
     annotations:
       service.beta.kubernetes.io/aws-load-balancer-type: "external"
   spec:
     ingressClassName: cilium
     rules:
     - http:
         paths:
         - backend:
             service:
               name: details
               port:
                 number: 9080
           path: /details
           pathType: Prefix
   ```

1. Terapkan sumber daya Ingress ke cluster Anda.

   ```
   kubectl apply -f my-ingress.yaml
   ```

1. Konfirmasikan sumber daya Ingress dan Layanan terkait telah dibuat. Pada tahap ini, diharapkan bahwa `ADDRESS` bidang sumber daya Ingress tidak diisi dengan alamat IP atau nama host, dan bahwa Layanan tipe bersama atau khusus LoadBalancer untuk sumber daya Ingress juga tidak memiliki alamat IP atau nama host yang ditetapkan.

   ```
   kubectl get ingress my-ingress
   ```

   ```
   NAME         CLASS    HOSTS   ADDRESS   PORTS   AGE
   my-ingress   cilium   *                 80      8s
   ```

   Untuk mode penyeimbang beban `shared` 

   ```
   kubectl -n kube-system get svc cilium-ingress
   ```

   ```
   NAME             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
   cilium-ingress   LoadBalancer   172.16.217.48   <pending>     80:32359/TCP,443:31090/TCP   10m
   ```

   Untuk mode penyeimbang beban `dedicated` 

   ```
   kubectl -n default get svc cilium-ingress-my-ingress
   ```

   ```
   NAME                        TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
   cilium-ingress-my-ingress   LoadBalancer   172.16.193.15   <pending>     80:32088/TCP,443:30332/TCP   25s
   ```

1. Lanjutkan [Jenis layanan LoadBalancer](#hybrid-nodes-ingress-cilium-loadbalancer) untuk mengonfigurasi sumber daya Ingress untuk menggunakan alamat IP yang dialokasikan oleh Cilium Load Balancer IPAM, [Jenis layanan NodePort](#hybrid-nodes-ingress-cilium-nodeport) dan [Jaringan host](#hybrid-nodes-ingress-cilium-host-network) atau untuk mengonfigurasi sumber daya Ingress untuk menggunakan atau meng-host alamat jaringan. NodePort 

## Jenis layanan LoadBalancer
<a name="hybrid-nodes-ingress-cilium-loadbalancer"></a>

### Infrastruktur penyeimbang beban yang ada
<a name="_existing_load_balancer_infrastructure"></a>

Secara default, untuk Cilium Ingress dan Cilium Gateway, Cilium membuat tipe Layanan Kubernetes untuk resource Ingress/Gateway. LoadBalancer Atribut Layanan yang dibuat Cilium dapat dikonfigurasi melalui sumber daya Ingress dan Gateway. Saat Anda membuat sumber daya Ingress atau Gateway, alamat IP atau nama host yang terbuka secara eksternal untuk Ingress atau Gateway dialokasikan dari infrastruktur penyeimbang beban, yang biasanya disediakan oleh pengontrol Ingress atau Gateway.

Banyak pengontrol Ingress dan Gateway menggunakan anotasi untuk mendeteksi dan mengkonfigurasi infrastruktur penyeimbang beban. Anotasi untuk pengontrol Ingress dan Gateway ini dikonfigurasi pada sumber daya Ingress atau Gateway seperti yang ditunjukkan pada contoh sebelumnya di atas. Referensikan dokumentasi Ingress atau Gateway controller Anda untuk anotasi yang didukungnya dan lihat dokumentasi [Kubernetes Ingress dan dokumentasi Kubernetes](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) Gateway untuk [daftar kontroler populer.](https://gateway-api.sigs.k8s.io/implementations/)

**penting**  
Cilium Ingress dan Gateway tidak dapat digunakan dengan Load Balancer Controller dan AWS Network AWS Load Balancers () dengan EKS Hybrid Nodes. NLBs Mencoba untuk menggunakan ini bersama-sama menghasilkan target yang tidak terdaftar, karena NLB mencoba untuk langsung terhubung ke Pod IPs yang mendukung Service tipe LoadBalancer ketika NLB diatur ke `ip` (persyaratan untuk menggunakan NLB dengan beban `target-type` kerja yang berjalan pada EKS Hybrid Nodes).

### Tidak ada infrastruktur penyeimbang beban
<a name="_no_load_balancer_infrastructure"></a>

Jika Anda tidak memiliki infrastruktur penyeimbang beban dan pengontrol Ingress/Gateway yang sesuai di lingkungan Anda, sumber daya Ingress /Gateway dan jenis Layanan yang sesuai LoadBalancer dapat dikonfigurasi untuk menggunakan alamat IP yang dialokasikan oleh manajemen alamat IP [Load Balancer Cilium (LB IPAM](https://docs.cilium.io/en/stable/network/lb-ipam/)). Cilium LB IPAM dapat dikonfigurasi dengan rentang alamat IP yang diketahui dari lingkungan lokal Anda, dan dapat menggunakan dukungan Border Gateway Protocol (BGP) bawaan Cilium atau pengumuman L2 untuk mengiklankan alamat IP ke jaringan lokal Anda. LoadBalancer 

Contoh di bawah ini menunjukkan cara mengonfigurasi LB IPAM Cilium dengan alamat IP yang akan digunakan untuk sumber daya Ingress/Gateway Anda, dan cara mengonfigurasi Cilium BGP Control Plane untuk mengiklankan alamat IP dengan jaringan lokal. LoadBalancer Fitur LB IPAM Cilium diaktifkan secara default, tetapi tidak diaktifkan sampai sumber daya dibuat. `CiliumLoadBalancerIPPool`

#### Prasyarat
<a name="_prerequisites_4"></a>
+ Cilium Ingress atau Gateway diinstal mengikuti petunjuk di atau. [Instal Cilium Ingress](#hybrid-nodes-ingress-cilium-ingress-install) [Instal Cilium Gateway](#hybrid-nodes-ingress-cilium-gateway-install)
+ Sumber daya Cilium Ingress atau Gateway dengan contoh aplikasi yang digunakan mengikuti instruksi di atau. [Menyebarkan Cilium Ingress](#hybrid-nodes-ingress-cilium-ingress-deploy) [Menyebarkan Gerbang Cilium](#hybrid-nodes-ingress-cilium-gateway-deploy)
+ Cilium BGP Control Plane diaktifkan mengikuti instruksi di. [Konfigurasikan Cilium BGP untuk node hybrid](hybrid-nodes-cilium-bgp.md) Jika Anda tidak ingin menggunakan BGP, Anda dapat melewati prasyarat ini, tetapi Anda tidak akan dapat mengakses sumber daya Ingress atau Gateway hingga alamat LoadBalancer IP yang dialokasikan oleh Cilium LB IPAM dapat dirutekan di jaringan lokal Anda.

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

1. Secara opsional menambal sumber daya Ingress atau Gateway untuk meminta alamat IP tertentu yang akan digunakan untuk jenis Layanan. LoadBalancer Jika Anda tidak meminta alamat IP tertentu, Cilium akan mengalokasikan alamat IP dari rentang alamat IP yang dikonfigurasi dalam `CiliumLoadBalancerIPPool` sumber daya pada langkah berikutnya. Pada perintah di bawah ini, ganti `LB_IP_ADDRESS` dengan alamat IP untuk meminta Layanan tipe LoadBalancer.

    **Gerbang** 

   ```
   kubectl patch gateway -n default my-gateway --type=merge -p '{
     "spec": {
       "addresses": [{"type": "IPAddress", "value": "LB_IP_ADDRESS"}]
     }
   }'
   ```

    **Masuknya** 

   ```
   kubectl patch ingress my-ingress --type=merge -p '{
     "metadata": {"annotations": {"lbipam.cilium.io/ips": "LB_IP_ADDRESS"}}
   }'
   ```

1. Buat file bernama `cilium-lbip-pool-ingress.yaml` dengan `CiliumLoadBalancerIPPool` sumber daya untuk mengonfigurasi rentang alamat IP Load Balancer untuk sumber daya Ingress /Gateway Anda.
   + Jika Anda menggunakan Cilium Ingress, Cilium secara otomatis menerapkan `cilium.io/ingress: "true"` label ke Layanan yang dibuatnya untuk sumber daya Ingress. Anda dapat menggunakan label ini di `serviceSelector` bidang definisi `CiliumLoadBalancerIPPool` sumber daya untuk memilih Layanan yang memenuhi syarat untuk LB IPAM.
   + Jika Anda menggunakan Cilium Gateway, Anda dapat menggunakan `gateway.networking.k8s.io/gateway-name` label di `serviceSelector` bidang definisi `CiliumLoadBalancerIPPool` sumber daya untuk memilih sumber daya Gateway yang memenuhi syarat untuk LB IPAM.
   + Ganti `LB_IP_CIDR` dengan rentang alamat IP yang akan digunakan untuk alamat IP Load Balancer. Untuk memilih satu alamat IP, gunakan `/32` CIDR. Untuk informasi selengkapnya, lihat [Manajemen Alamat LoadBalancer IP](https://docs.cilium.io/en/stable/network/lb-ipam/) di dokumentasi Cilium.

     ```
     apiVersion: cilium.io/v2alpha1
     kind: CiliumLoadBalancerIPPool
     metadata:
       name: bookinfo-pool
     spec:
       blocks:
       - cidr: "LB_IP_CIDR"
       serviceSelector:
         # if using Cilium Gateway
         matchExpressions:
           - { key: gateway.networking.k8s.io/gateway-name, operator: In, values: [ my-gateway ] }
         # if using Cilium Ingress
         matchLabels:
           cilium.io/ingress: "true"
     ```

1. Terapkan `CiliumLoadBalancerIPPool` sumber daya ke cluster Anda.

   ```
   kubectl apply -f cilium-lbip-pool-ingress.yaml
   ```

1. Konfirmasikan alamat IP dialokasikan dari Cilium LB IPAM untuk sumber daya Ingress /Gateway.

    **Gerbang** 

   ```
   kubectl get gateway my-gateway
   ```

   ```
   NAME         CLASS    ADDRESS        PROGRAMMED   AGE
   my-gateway   cilium   LB_IP_ADDRESS    True         6m41s
   ```

    **Masuknya** 

   ```
   kubectl get ingress my-ingress
   ```

   ```
   NAME         CLASS    HOSTS   ADDRESS        PORTS   AGE
   my-ingress   cilium   *       LB_IP_ADDRESS   80      10m
   ```

1. Buat file bernama `cilium-bgp-advertisement-ingress.yaml` dengan `CiliumBGPAdvertisement` sumber daya untuk mengiklankan alamat LoadBalancer IP untuk sumber daya Ingress /Gateway. Jika Anda tidak menggunakan Cilium BGP, Anda dapat melewati langkah ini. Alamat LoadBalancer IP yang digunakan untuk sumber daya Ingress /Gateway Anda harus dapat dirutekan di jaringan lokal agar Anda dapat melakukan kueri layanan pada langkah berikutnya.

   ```
   apiVersion: cilium.io/v2alpha1
   kind: CiliumBGPAdvertisement
   metadata:
     name: bgp-advertisement-lb-ip
     labels:
       advertise: bgp
   spec:
     advertisements:
       - advertisementType: "Service"
         service:
           addresses:
             - LoadBalancerIP
         selector:
           # if using Cilium Gateway
           matchExpressions:
             - { key: gateway.networking.k8s.io/gateway-name, operator: In, values: [ my-gateway ] }
           # if using Cilium Ingress
           matchLabels:
             cilium.io/ingress: "true"
   ```

1. Terapkan `CiliumBGPAdvertisement` sumber daya ke cluster Anda.

   ```
   kubectl apply -f cilium-bgp-advertisement-ingress.yaml
   ```

1. Akses layanan menggunakan alamat IP yang dialokasikan dari Cilium LB IPAM.

   ```
   curl -s http://LB_IP_ADDRESS:80/details/1 | jq
   ```

   ```
   {
     "id": 1,
     "author": "William Shakespeare",
     "year": 1595,
     "type": "paperback",
     "pages": 200,
     "publisher": "PublisherA",
     "language": "English",
     "ISBN-10": "1234567890",
     "ISBN-13": "123-1234567890"
   }
   ```

## Jenis layanan NodePort
<a name="hybrid-nodes-ingress-cilium-nodeport"></a>

Jika Anda tidak memiliki infrastruktur penyeimbang beban dan pengontrol Ingress yang sesuai di lingkungan Anda, atau jika Anda mengelola sendiri infrastruktur penyeimbang beban atau menggunakan penyeimbang beban berbasis DNS, Anda dapat mengonfigurasi Cilium Ingress untuk membuat Layanan tipe untuk sumber daya Ingress. NodePort Saat menggunakan NodePort dengan Cilium Ingress, Layanan tipe NodePort diekspos pada port pada setiap node dalam rentang port 30000-32767. Dalam mode ini, ketika lalu lintas mencapai node mana pun di cluster NodePort, lalu diteruskan ke pod yang mendukung layanan, yang mungkin berada di node yang sama atau node yang berbeda.

**catatan**  
[Dukungan Cilium Gateway untuk NodePort layanan direncanakan untuk Cilium versi 1.18.x (\$127273)](https://github.com/cilium/cilium/pull/27273)

### Prasyarat
<a name="_prerequisites_5"></a>
+ Cilium Ingress dipasang mengikuti petunjuk di. [Instal Cilium Ingress](#hybrid-nodes-ingress-cilium-ingress-install)
+ Sumber daya Cilium Ingress dengan aplikasi sampel yang digunakan mengikuti instruksi di. [Menyebarkan Cilium Ingress](#hybrid-nodes-ingress-cilium-ingress-deploy)

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

1. Menambal sumber daya Ingress yang ada `my-ingress` untuk mengubahnya dari tipe Layanan LoadBalancer menjadi NodePort.

   ```
   kubectl patch ingress my-ingress --type=merge -p '{
       "metadata": {"annotations": {"ingress.cilium.io/service-type": "NodePort"}}
   }'
   ```

   Jika Anda belum membuat sumber daya Ingress, Anda dapat membuatnya dengan menerapkan definisi Ingress berikut ke cluster Anda. Catatan, definisi Ingress di bawah ini menggunakan contoh aplikasi Istio Bookinfo yang dijelaskan dalam. [Menyebarkan Cilium Ingress](#hybrid-nodes-ingress-cilium-ingress-deploy)

   ```
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: my-ingress
     namespace: default
     annotations:
       service.beta.kubernetes.io/aws-load-balancer-type: "external"
       "ingress.cilium.io/service-type": "NodePort"
   spec:
     ingressClassName: cilium
     rules:
     - http:
         paths:
         - backend:
             service:
               name: details
               port:
                 number: 9080
           path: /details
           pathType: Prefix
   ```

1. Konfirmasikan Layanan untuk sumber daya Ingress telah diperbarui untuk menggunakan jenis NodePort Layanan. Perhatikan Port untuk protokol HTTP di output. Dalam contoh di bawah ini port HTTP ini`32353`, yang akan digunakan dalam langkah berikutnya untuk query Layanan. Manfaat menggunakan Cilium Ingress with Service of type NodePort adalah Anda dapat menerapkan routing berbasis jalur dan host, serta kebijakan jaringan untuk lalu lintas Ingress, yang tidak dapat Anda lakukan untuk jenis Layanan standar tanpa Ingress. NodePort 

   ```
   kubectl -n default get svc cilium-ingress-my-ingress
   ```

   ```
   NAME                        TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
   cilium-ingress-my-ingress   NodePort   172.16.47.153   <none>        80:32353/TCP,443:30253/TCP   27m
   ```

1. Dapatkan alamat IP node Anda di cluster Anda.

   ```
   kubectl get nodes -o wide
   ```

   ```
   NAME                   STATUS   ROLES    AGE   VERSION               INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
   mi-026d6a261e355fba7   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.150   <none>        Ubuntu 22.04.5 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-082f73826a163626e   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.32    <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-09183e8a3d755abf6   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.33    <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-0d78d815980ed202d   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.97    <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-0daa253999fe92daa   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.100   <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   ```

1. Akses Layanan jenis NodePort menggunakan alamat IP node Anda dan yang NodePort ditangkap di atas. Pada contoh di bawah ini alamat IP node yang digunakan adalah `10.80.146.32` dan NodePort is`32353`. Ganti ini dengan nilai-nilai untuk lingkungan Anda.

   ```
   curl -s http://10.80.146.32:32353/details/1 | jq
   ```

   ```
   {
     "id": 1,
     "author": "William Shakespeare",
     "year": 1595,
     "type": "paperback",
     "pages": 200,
     "publisher": "PublisherA",
     "language": "English",
     "ISBN-10": "1234567890",
     "ISBN-13": "123-1234567890"
   }
   ```

## Jaringan host
<a name="hybrid-nodes-ingress-cilium-host-network"></a>

Mirip dengan jenis Layanan NodePort, jika Anda tidak memiliki infrastruktur penyeimbang beban dan pengontrol Ingress atau Gateway, atau jika Anda mengelola sendiri penyeimbang beban Anda dengan penyeimbang beban eksternal, Anda dapat mengonfigurasi Cilium Ingress dan Cilium Gateway untuk mengekspos sumber daya Ingress dan Gateway langsung di jaringan host. Ketika mode jaringan host diaktifkan untuk sumber daya Ingress atau Gateway, Layanan jenis LoadBalancer dan NodePort mode dinonaktifkan secara otomatis, mode jaringan host saling eksklusif dengan mode alternatif ini untuk setiap sumber daya Ingress atau Gateway. Dibandingkan dengan mode Service of type, NodePort mode jaringan host menawarkan fleksibilitas tambahan untuk rentang port yang dapat digunakan (tidak terbatas pada NodePort rentang 30000-32767) dan Anda dapat mengonfigurasi subset node tempat proxy Envoy berjalan di jaringan host.

### Prasyarat
<a name="_prerequisites_6"></a>
+ Cilium Ingress atau Gateway diinstal mengikuti petunjuk di atau. [Instal Cilium Ingress](#hybrid-nodes-ingress-cilium-ingress-install) [Instal Cilium Gateway](#hybrid-nodes-ingress-cilium-gateway-install)

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

#### Gateway
<a name="_gateway"></a>

1. Buat file dengan nama `cilium-gateway-host-network.yaml` dengan konten berikut ini.

   ```
   gatewayAPI:
     enabled: true
     hostNetwork:
       enabled: true
       # uncomment to restrict nodes where Envoy proxies run on the host network
       # nodes:
       #   matchLabels:
       #     role: gateway
   ```

1. Terapkan konfigurasi Cilium Gateway jaringan host ke cluster Anda.

   ```
   helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \
     --namespace kube-system \
     --reuse-values \
     --set operator.rollOutPods=true \
     -f cilium-gateway-host-network.yaml
   ```

   Jika Anda belum membuat sumber daya Gateway, Anda dapat membuatnya dengan menerapkan definisi Gateway berikut ke klaster Anda. Definisi Gateway di bawah ini menggunakan contoh aplikasi Istio Bookinfo yang dijelaskan dalam. [Menyebarkan Gerbang Cilium](#hybrid-nodes-ingress-cilium-gateway-deploy) Pada contoh di bawah ini, resource Gateway dikonfigurasi untuk menggunakan `8111` port untuk pendengar HTTP, yang merupakan port pendengar bersama untuk proxy Envoy yang berjalan di jaringan host. Jika Anda menggunakan port istimewa (lebih rendah dari 1023) untuk sumber daya Gateway, rujuk dokumentasi [Cilium](https://docs.cilium.io/en/stable/network/servicemesh/gateway-api/gateway-api/#bind-to-privileged-port) untuk instruksi.

   ```
   ---
   apiVersion: gateway.networking.k8s.io/v1
   kind: Gateway
   metadata:
     name: my-gateway
   spec:
     gatewayClassName: cilium
     listeners:
     - protocol: HTTP
       port: 8111
       name: web-gw
       allowedRoutes:
         namespaces:
           from: Same
   ---
   apiVersion: gateway.networking.k8s.io/v1
   kind: HTTPRoute
   metadata:
     name: http-app-1
   spec:
     parentRefs:
     - name: my-gateway
       namespace: default
     rules:
     - matches:
       - path:
           type: PathPrefix
           value: /details
       backendRefs:
       - name: details
         port: 9080
   ```

   Anda dapat mengamati Konfigurasi Utusan Cilium yang diterapkan dengan perintah berikut.

   ```
   kubectl get cec cilium-gateway-my-gateway -o yaml
   ```

   Anda bisa mendapatkan port pendengar Utusan untuk `cilium-gateway-my-gateway` Layanan dengan perintah berikut. Dalam contoh ini, port pendengar bersama adalah`8111`.

   ```
   kubectl get cec cilium-gateway-my-gateway -o jsonpath={.spec.services[0].ports[0]}
   ```

1. Dapatkan alamat IP node Anda di cluster Anda.

   ```
   kubectl get nodes -o wide
   ```

   ```
   NAME                   STATUS   ROLES    AGE   VERSION               INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
   mi-026d6a261e355fba7   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.150   <none>        Ubuntu 22.04.5 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-082f73826a163626e   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.32    <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-09183e8a3d755abf6   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.33    <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-0d78d815980ed202d   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.97    <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-0daa253999fe92daa   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.100   <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   ```

1. Akses Layanan menggunakan alamat IP node Anda dan port listener untuk `cilium-gateway-my-gateway` sumber daya. Pada contoh di bawah ini alamat IP node yang digunakan adalah `10.80.146.32` dan port listener adalah`8111`. Ganti ini dengan nilai-nilai untuk lingkungan Anda.

   ```
   curl -s http://10.80.146.32:8111/details/1 | jq
   ```

   ```
   {
     "id": 1,
     "author": "William Shakespeare",
     "year": 1595,
     "type": "paperback",
     "pages": 200,
     "publisher": "PublisherA",
     "language": "English",
     "ISBN-10": "1234567890",
     "ISBN-13": "123-1234567890"
   }
   ```

#### Ingress
<a name="_ingress"></a>

Karena masalah Cilium hulu ([\$134028](https://github.com/cilium/cilium/issues/34028)), Cilium Ingress dalam mode jaringan host memerlukan penggunaan`loadbalancerMode: shared`, yang membuat satu Layanan tipe ClusterIP untuk semua sumber daya Ingress di cluster. Jika Anda menggunakan port istimewa (lebih rendah dari 1023) untuk sumber daya Ingress, rujuk dokumentasi [Cilium](https://docs.cilium.io/en/stable/network/servicemesh/ingress/#bind-to-privileged-port) untuk instruksi.

1. Buat file dengan nama `cilium-ingress-host-network.yaml` dengan konten berikut ini.

   ```
   ingressController:
     enabled: true
     loadbalancerMode: shared
     # This is a workaround for the upstream Cilium issue
     service:
       externalTrafficPolicy: null
       type: ClusterIP
     hostNetwork:
       enabled: true
       # ensure the port does not conflict with other services on the node
       sharedListenerPort: 8111
       # uncomment to restrict nodes where Envoy proxies run on the host network
       # nodes:
       #   matchLabels:
       #     role: ingress
   ```

1. Terapkan konfigurasi Cilium Ingress jaringan host ke cluster Anda.

   ```
   helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \
     --namespace kube-system \
     --reuse-values \
     --set operator.rollOutPods=true \
     -f cilium-ingress-host-network.yaml
   ```

   Jika Anda belum membuat sumber daya Ingress, Anda dapat membuatnya dengan menerapkan definisi Ingress berikut ke cluster Anda. Definisi Ingress di bawah ini menggunakan contoh aplikasi Istio Bookinfo yang dijelaskan dalam. [Menyebarkan Cilium Ingress](#hybrid-nodes-ingress-cilium-ingress-deploy)

   ```
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: my-ingress
     namespace: default
   spec:
     ingressClassName: cilium
     rules:
     - http:
         paths:
         - backend:
             service:
               name: details
               port:
                 number: 9080
           path: /details
           pathType: Prefix
   ```

   Anda dapat mengamati Konfigurasi Utusan Cilium yang diterapkan dengan perintah berikut.

   ```
   kubectl get cec -n kube-system cilium-ingress -o yaml
   ```

   Anda bisa mendapatkan port pendengar Utusan untuk `cilium-ingress` Layanan dengan perintah berikut. Dalam contoh ini, port pendengar bersama adalah`8111`.

   ```
   kubectl get cec -n kube-system cilium-ingress -o jsonpath={.spec.services[0].ports[0]}
   ```

1. Dapatkan alamat IP node Anda di cluster Anda.

   ```
   kubectl get nodes -o wide
   ```

   ```
   NAME                   STATUS   ROLES    AGE   VERSION               INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
   mi-026d6a261e355fba7   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.150   <none>        Ubuntu 22.04.5 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-082f73826a163626e   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.32    <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-09183e8a3d755abf6   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.33    <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-0d78d815980ed202d   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.97    <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   mi-0daa253999fe92daa   Ready    <none>   23h   v1.32.3-eks-473151a   10.80.146.100   <none>        Ubuntu 22.04.4 LTS   5.15.0-142-generic   containerd://1.7.27
   ```

1. Akses Layanan menggunakan alamat IP node Anda dan `sharedListenerPort` untuk `cilium-ingress` sumber daya. Pada contoh di bawah ini alamat IP node yang digunakan adalah `10.80.146.32` dan port listener adalah`8111`. Ganti ini dengan nilai-nilai untuk lingkungan Anda.

   ```
   curl -s http://10.80.146.32:8111/details/1 | jq
   ```

   ```
   {
     "id": 1,
     "author": "William Shakespeare",
     "year": 1595,
     "type": "paperback",
     "pages": 200,
     "publisher": "PublisherA",
     "language": "English",
     "ISBN-10": "1234567890",
     "ISBN-13": "123-1234567890"
   }
   ```

# Konfigurasikan Layanan tipe LoadBalancer untuk node hibrida
<a name="hybrid-nodes-load-balancing"></a>

Topik ini menjelaskan cara mengonfigurasi load balancing Layer 4 (L4) untuk aplikasi yang berjalan di Amazon EKS Hybrid Nodes. Jenis layanan Kubernetes LoadBalancer digunakan untuk mengekspos aplikasi Kubernetes di luar klaster. Layanan jenis LoadBalancer biasanya digunakan dengan infrastruktur penyeimbang beban fisik di cloud atau lingkungan lokal untuk melayani lalu lintas beban kerja. Infrastruktur penyeimbang beban ini biasanya disediakan dengan pengontrol khusus lingkungan.

 AWS mendukung AWS Network Load Balancer (NLB) dan Cilium untuk jenis LoadBalancer Layanan yang berjalan pada EKS Hybrid Nodes. Keputusan untuk menggunakan NLB atau Cilium didasarkan pada sumber lalu lintas aplikasi. Jika lalu lintas aplikasi berasal dari AWS Region, AWS rekomendasikan untuk menggunakan AWS NLB dan Load Balancer AWS Controller. Jika lalu lintas aplikasi berasal dari lingkungan lokal atau edge lokal, AWS rekomendasikan untuk menggunakan kemampuan load balancing bawaan Cilium, yang dapat digunakan dengan atau tanpa infrastruktur penyeimbang beban di lingkungan Anda.

Untuk penyeimbangan beban lalu lintas aplikasi Layer 7 (L7), lihat. [Konfigurasikan Ingress Kubernetes untuk node hybrid](hybrid-nodes-ingress.md) Untuk informasi umum tentang Load Balancing dengan EKS, lihat [Praktik Terbaik untuk Load Balancing](https://docs.aws.amazon.com/eks/latest/best-practices/load-balancing.html).

## AWS Network Load Balancer
<a name="hybrid-nodes-service-lb-nlb"></a>

Anda dapat menggunakan [AWS Load Balancer Controller](aws-load-balancer-controller.md) dan NLB dengan tipe target `ip` untuk beban kerja yang berjalan pada node hybrid. Saat menggunakan tipe target`ip`, NLB meneruskan lalu lintas langsung ke pod, melewati jalur jaringan Layer Service. Agar NLB dapat mencapai target IP pod pada node hibrid, pod lokal Anda CIDRs harus dapat dirutekan di jaringan lokal Anda. Selain itu, AWS Load Balancer Controller menggunakan webhook dan memerlukan komunikasi langsung dari bidang kontrol EKS. Untuk informasi selengkapnya, lihat [Konfigurasikan webhook untuk node hybrid](hybrid-nodes-webhooks.md).
+ Lihat [Rute lalu lintas TCP dan UDP dengan Network Load Balancers](network-load-balancing.md) persyaratan konfigurasi subnet, [Instal AWS Load Balancer Controller dengan Helm](lbc-helm.md) dan [Praktik Terbaik untuk Load Balancing untuk informasi tambahan tentang AWS Network Load Balancer](https://docs.aws.amazon.com/eks/latest/best-practices/load-balancing.html) dan Load Balancer Controller AWS .
+ Lihat konfigurasi [AWS Load Balancer Controller NLB untuk konfigurasi yang](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/nlb/) dapat diterapkan ke Layanan bertipe dengan Network Load Balancer. `LoadBalancer` AWS 

### Prasyarat
<a name="_prerequisites"></a>
+ Cilium dipasang mengikuti instruksi di. [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md)
+ Cilium BGP Control Plane diaktifkan mengikuti instruksi di. [Konfigurasikan Cilium BGP untuk node hybrid](hybrid-nodes-cilium-bgp.md) Jika Anda tidak ingin menggunakan BGP, Anda harus menggunakan metode alternatif untuk membuat pod lokal CIDRs dapat dirutekan di jaringan lokal, lihat untuk informasi selengkapnya. [Pod jarak jauh yang dapat dirutekan CIDRs](hybrid-nodes-concepts-kubernetes.md#hybrid-nodes-concepts-k8s-pod-cidrs)
+ Helm diinstal di lingkungan baris perintah Anda, lihat instruksi [Setup](helm.md) Helm.
+ [eksctl diinstal di lingkungan baris perintah Anda, lihat Menyiapkan instruksi eksctl.](install-kubectl.md#eksctl-install-update)

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

1. Unduh kebijakan IAM untuk AWS Load Balancer Controller yang memungkinkannya melakukan panggilan atas nama AWS APIs Anda.

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/docs/install/iam_policy.json
   ```

1. Buat kebijakan IAM menggunakan kebijakan yang diunduh di langkah sebelumnya.

   ```
   aws iam create-policy \
       --policy-name AWSLoadBalancerControllerIAMPolicy \
       --policy-document file://iam_policy.json
   ```

1. Ganti nilai untuk nama cluster (`CLUSTER_NAME`), AWS Region (`AWS_REGION`), dan ID AWS akun (`AWS_ACCOUNT_ID`) dengan pengaturan Anda dan jalankan perintah berikut.

   ```
   eksctl create iamserviceaccount \
       --cluster=CLUSTER_NAME \
       --namespace=kube-system \
       --name=aws-load-balancer-controller \
       --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \
       --override-existing-serviceaccounts \
       --region AWS_REGION \
       --approve
   ```

1. Tambahkan repositori bagan Helm eks-charts. AWS mempertahankan repositori ini aktif. GitHub

   ```
   helm repo add eks https://aws.github.io/eks-charts
   ```

1. Perbarui repositori Helm lokal Anda untuk memastikan bahwa Anda memiliki bagan terbaru.

   ```
   helm repo update eks
   ```

1. Instal AWS Load Balancer Controller. Ganti nilai untuk nama cluster (`CLUSTER_NAME`), AWS Region (`AWS_REGION`), VPC ID (`VPC_ID`), dan Load AWS Balancer Controller Helm chart version `AWS_LBC_HELM_VERSION` () dengan pengaturan Anda. Anda dapat menemukan bagan Helm versi terbaru dengan menjalankan`helm search repo eks/aws-load-balancer-controller --versions`. Jika Anda menjalankan cluster mode campuran dengan node hybrid dan node di AWS Cloud, Anda dapat menjalankan AWS Load Balancer Controller pada node cloud mengikuti instruksi di. [AWS Pengontrol Load Balancer](hybrid-nodes-webhooks.md#hybrid-nodes-mixed-lbc)

   ```
   helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
     -n kube-system \
     --version AWS_LBC_HELM_VERSION \
     --set clusterName=CLUSTER_NAME \
     --set region=AWS_REGION \
     --set vpcId=VPC_ID \
     --set serviceAccount.create=false \
     --set serviceAccount.name=aws-load-balancer-controller
   ```

1. Verifikasi bahwa AWS Load Balancer Controller berhasil diinstal.

   ```
   kubectl get -n kube-system deployment aws-load-balancer-controller
   ```

   ```
   NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
   aws-load-balancer-controller   2/2     2            2           84s
   ```

1. Tentukan contoh aplikasi dalam file bernama`tcp-sample-app.yaml`. Contoh di bawah ini menggunakan penyebaran NGINX sederhana dengan port TCP.

   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: tcp-sample-app
     namespace: default
   spec:
     replicas: 3
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
           - name: nginx
             image: public.ecr.aws/nginx/nginx:1.23
             ports:
               - name: tcp
                 containerPort: 80
   ```

1. Terapkan penerapan ke cluster Anda.

   ```
   kubectl apply -f tcp-sample-app.yaml
   ```

1. Tentukan jenis Layanan LoadBalancer untuk penyebaran dalam file bernama`tcp-sample-service.yaml`.

   ```
   apiVersion: v1
   kind: Service
   metadata:
     name: tcp-sample-service
     namespace: default
     annotations:
       service.beta.kubernetes.io/aws-load-balancer-type: external
       service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
       service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
   spec:
     ports:
       - port: 80
         targetPort: 80
         protocol: TCP
     type: LoadBalancer
     selector:
       app: nginx
   ```

1. Terapkan konfigurasi Layanan ke klaster Anda.

   ```
   kubectl apply -f tcp-sample-service.yaml
   ```

1. Penyediaan NLB untuk Layanan dapat memakan waktu beberapa menit. Setelah NLB disediakan, Layanan akan memiliki alamat yang ditetapkan untuk itu yang sesuai dengan nama DNS dari penyebaran NLB.

   ```
   kubectl get svc tcp-sample-service
   ```

   ```
   NAME                 TYPE           CLUSTER-IP       EXTERNAL-IP                                                                    PORT(S)        AGE
   tcp-sample-service   LoadBalancer   172.16.115.212   k8s-default-tcpsampl-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.<region>.amazonaws.com   80:30396/TCP   8s
   ```

1. Akses Layanan menggunakan alamat NLB.

   ```
   curl k8s-default-tcpsampl-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.<region>.amazonaws.com
   ```

   Contoh output di bawah ini.

   ```
   <!DOCTYPE html>
   <html>
   <head>
   <title>Welcome to nginx!</title>
   [...]
   ```

1. Bersihkan sumber daya yang Anda buat.

   ```
   kubectl delete -f tcp-sample-service.yaml
   kubectl delete -f tcp-sample-app.yaml
   ```

## Penyeimbangan beban dalam cluster silia
<a name="hybrid-nodes-service-lb-cilium"></a>

Cilium dapat digunakan sebagai penyeimbang beban in-cluster untuk beban kerja yang berjalan di EKS Hybrid Nodes, yang dapat berguna untuk lingkungan yang tidak memiliki infrastruktur penyeimbang beban. Kemampuan load balancing Cilium dibangun di atas kombinasi fitur Cilium termasuk penggantian kube-proxy, Load Balancer IP Address Management (IPAM), dan BGP Control Plane. Tanggung jawab fitur-fitur ini dirinci di bawah ini:
+  **Cilium kube-proxy replacement**: Menangani routing lalu lintas Service ke pod backend.
+  **Cilium Load Balancer** IPAM: Mengelola alamat IP yang dapat ditetapkan ke Layanan jenis. `LoadBalancer`
+  **Cilium BGP Control Plane**: Mengiklankan alamat IP yang dialokasikan oleh Load Balancer IPAM ke jaringan lokal.

Jika Anda tidak menggunakan pengganti kube-proxy Cilium, Anda masih dapat menggunakan Cilium Load Balancer IPAM dan BGP Control Plane untuk mengalokasikan dan menetapkan alamat IP untuk jenis Layanan. LoadBalancer Jika Anda tidak menggunakan pengganti kube-proxy Cilium, load balancing untuk Services ke pod backend ditangani oleh kube-proxy dan aturan iptables secara default di EKS.

### Prasyarat
<a name="_prerequisites_2"></a>
+ Cilium diinstal mengikuti instruksi [Konfigurasikan CNI untuk node hybrid](hybrid-nodes-cni.md) dengan atau tanpa penggantian kube-proxy diaktifkan. Penggantian kube-proxy Cilium memerlukan menjalankan sistem operasi dengan kernel Linux setidaknya terbaru seperti v4.19.57, v5.1.16, atau v5.2.0. Semua versi terbaru dari sistem operasi yang didukung untuk digunakan dengan node hybrid memenuhi kriteria ini, dengan pengecualian Red Hat Enterprise Linux (RHEL) 8.x.
+ Cilium BGP Control Plane diaktifkan mengikuti instruksi di. [Konfigurasikan Cilium BGP untuk node hybrid](hybrid-nodes-cilium-bgp.md) Jika Anda tidak ingin menggunakan BGP, Anda harus menggunakan metode alternatif untuk membuat pod lokal CIDRs dapat dirutekan di jaringan lokal, lihat untuk informasi selengkapnya. [Pod jarak jauh yang dapat dirutekan CIDRs](hybrid-nodes-concepts-kubernetes.md#hybrid-nodes-concepts-k8s-pod-cidrs)
+ Helm diinstal di lingkungan baris perintah Anda, lihat instruksi [Setup](helm.md) Helm.

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

1. Buat file bernama `cilium-lbip-pool-loadbalancer.yaml` dengan `CiliumLoadBalancerIPPool` sumber daya untuk mengonfigurasi rentang alamat IP Load Balancer untuk jenis Layanan Anda. LoadBalancer
   + Ganti `LB_IP_CIDR` dengan rentang alamat IP yang akan digunakan untuk alamat IP Load Balancer. Untuk memilih satu alamat IP, gunakan `/32` CIDR. Untuk informasi selengkapnya, lihat [Manajemen Alamat LoadBalancer IP](https://docs.cilium.io/en/stable/network/lb-ipam/) di dokumentasi Cilium.
   + `serviceSelector`Bidang dikonfigurasi agar sesuai dengan nama Layanan yang akan Anda buat pada langkah berikutnya. Dengan konfigurasi ini, IPs dari pool ini hanya akan dialokasikan ke Layanan dengan nama`tcp-sample-service`.

     ```
     apiVersion: cilium.io/v2alpha1
     kind: CiliumLoadBalancerIPPool
     metadata:
       name: tcp-service-pool
     spec:
       blocks:
       - cidr: "LB_IP_CIDR"
       serviceSelector:
         matchLabels:
           io.kubernetes.service.name: tcp-sample-service
     ```

1. Terapkan `CiliumLoadBalancerIPPool` sumber daya ke cluster Anda.

   ```
   kubectl apply -f cilium-lbip-pool-loadbalancer.yaml
   ```

1. Konfirmasikan setidaknya ada satu alamat IP yang tersedia di kolam renang.

   ```
   kubectl get ciliumloadbalancerippools.cilium.io
   ```

   ```
   NAME               DISABLED   CONFLICTING   IPS AVAILABLE   AGE
   tcp-service-pool   false      False         1               24m
   ```

1. Buat file bernama `cilium-bgp-advertisement-loadbalancer.yaml` dengan `CiliumBGPAdvertisement` sumber daya untuk mengiklankan alamat IP penyeimbang beban untuk Layanan yang akan Anda buat di langkah berikutnya. Jika Anda tidak menggunakan Cilium BGP, Anda dapat melewati langkah ini. Alamat IP penyeimbang beban yang digunakan untuk Layanan Anda harus dapat dirutekan di jaringan lokal agar Anda dapat menanyakan layanan pada langkah terakhir.
   + `advertisementType`Bidang disetel ke `Service` dan `service.addresses` disetel `LoadBalancerIP` untuk hanya mengiklankan jenis `LoadBalancer` Layanan. `LoadBalancerIP`
   + `selector`Bidang dikonfigurasi agar sesuai dengan nama Layanan yang akan Anda buat pada langkah berikutnya. Dengan konfigurasi ini, hanya `LoadBalancerIP` untuk Layanan dengan nama yang `tcp-sample-service` akan diiklankan.

     ```
     apiVersion: cilium.io/v2alpha1
     kind: CiliumBGPAdvertisement
     metadata:
       name: bgp-advertisement-tcp-service
       labels:
         advertise: bgp
     spec:
       advertisements:
         - advertisementType: "Service"
           service:
             addresses:
               - LoadBalancerIP
           selector:
             matchLabels:
               io.kubernetes.service.name: tcp-sample-service
     ```

1. Terapkan `CiliumBGPAdvertisement` sumber daya ke cluster Anda. Jika Anda tidak menggunakan Cilium BGP, Anda dapat melewati langkah ini.

   ```
   kubectl apply -f cilium-bgp-advertisement-loadbalancer.yaml
   ```

1. Tentukan contoh aplikasi dalam file bernama`tcp-sample-app.yaml`. Contoh di bawah ini menggunakan penyebaran NGINX sederhana dengan port TCP.

   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: tcp-sample-app
     namespace: default
   spec:
     replicas: 3
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
           - name: nginx
             image: public.ecr.aws/nginx/nginx:1.23
             ports:
               - name: tcp
                 containerPort: 80
   ```

1. Terapkan penerapan ke cluster Anda.

   ```
   kubectl apply -f tcp-sample-app.yaml
   ```

1. Tentukan jenis Layanan LoadBalancer untuk penyebaran dalam file bernama`tcp-sample-service.yaml`.
   + Anda dapat meminta alamat IP tertentu dari kumpulan IP penyeimbang beban dengan `lbipam.cilium.io/ips` anotasi pada objek Service. Anda dapat menghapus anotasi ini jika Anda tidak ingin meminta alamat IP tertentu untuk Layanan.
   + Kolom `loadBalancerClass` spesifikasi diperlukan untuk mencegah Penyedia AWS Cloud lama membuat Classic Load Balancer untuk Layanan. Dalam contoh di bawah ini dikonfigurasi `io.cilium/bgp-control-plane` untuk menggunakan BGP Control Plane Cilium sebagai kelas penyeimbang beban. Bidang ini dapat dikonfigurasi `io.cilium/l2-announcer` untuk menggunakan [fitur Pengumuman L2](https://docs.cilium.io/en/latest/network/l2-announcements/) Cilium (saat ini dalam versi beta dan tidak didukung secara resmi oleh). AWS

     ```
     apiVersion: v1
     kind: Service
     metadata:
       name: tcp-sample-service
       namespace: default
       annotations:
         lbipam.cilium.io/ips: "LB_IP_ADDRESS"
     spec:
       loadBalancerClass: io.cilium/bgp-control-plane
       ports:
         - port: 80
           targetPort: 80
           protocol: TCP
       type: LoadBalancer
       selector:
         app: nginx
     ```

1. Terapkan Layanan ke cluster Anda. Layanan akan dibuat dengan alamat IP eksternal yang dapat Anda gunakan untuk mengakses aplikasi.

   ```
   kubectl apply -f tcp-sample-service.yaml
   ```

1. Verifikasi bahwa Layanan berhasil dibuat dan memiliki IP yang ditetapkan untuk itu dari yang `CiliumLoadBalancerIPPool` dibuat pada langkah sebelumnya.

   ```
   kubectl get svc tcp-sample-service
   ```

   ```
   NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
   tcp-sample-service   LoadBalancer   172.16.117.76   LB_IP_ADDRESS   80:31129/TCP   14m
   ```

1. Jika Anda menggunakan Cilium dalam mode penggantian kube-proxy, Anda dapat mengonfirmasi Cilium menangani load balancing untuk Service dengan menjalankan perintah berikut. Pada output di bawah ini, `10.86.2.x` alamatnya adalah alamat IP pod dari pod backend untuk Service.

   ```
   kubectl -n kube-system exec ds/cilium -- cilium-dbg service list
   ```

   ```
   ID   Frontend               Service Type   Backend
   ...
   41   LB_IP_ADDRESS:80/TCP   LoadBalancer   1 => 10.86.2.76:80/TCP (active)
                                              2 => 10.86.2.130:80/TCP (active)
                                              3 => 10.86.2.141:80/TCP (active)
   ```

1. Konfirmasikan Cilium mengiklankan alamat IP ke jaringan lokal melalui BGP. Dalam contoh di bawah ini, ada lima node hibrida, masing-masing `LB_IP_ADDRESS` mengiklankan `tcp-sample-service` Layanan ke jaringan lokal.

   ```
   Node                   VRouter      Prefix             NextHop   Age     Attrs
   mi-026d6a261e355fba7   NODES_ASN
                     LB_IP_ADDRESS/32   0.0.0.0   12m3s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-082f73826a163626e   NODES_ASN
                     LB_IP_ADDRESS/32   0.0.0.0   12m3s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-09183e8a3d755abf6   NODES_ASN
                     LB_IP_ADDRESS/32   0.0.0.0   12m3s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-0d78d815980ed202d   NODES_ASN
                     LB_IP_ADDRESS/32   0.0.0.0   12m3s   [{Origin: i} {Nexthop: 0.0.0.0}]
   mi-0daa253999fe92daa   NODES_ASN
                     LB_IP_ADDRESS/32   0.0.0.0   12m3s   [{Origin: i} {Nexthop: 0.0.0.0}]
   ```

1. Akses Layanan menggunakan alamat load balanceRip yang ditetapkan.

   ```
   curl LB_IP_ADDRESS
   ```

   Contoh output di bawah ini.

   ```
   <!DOCTYPE html>
   <html>
   <head>
   <title>Welcome to nginx!</title>
   [...]
   ```

1. Bersihkan sumber daya yang Anda buat.

   ```
   kubectl delete -f tcp-sample-service.yaml
   kubectl delete -f tcp-sample-app.yaml
   kubectl delete -f cilium-lb-ip-pool.yaml
   kubectl delete -f cilium-bgp-advertisement.yaml
   ```

# 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 ([\$19209](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
     ```