

 **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 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
   ```