

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menerapkan aplikasi berbasis GRPC di cluster Amazon EKS dan mengaksesnya dengan Application Load Balancer
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer"></a>

*Kirankumar Chandrashekar dan Huy Nguyen, Amazon Web Services*

## Ringkasan
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-summary"></a>

Pola ini menjelaskan cara meng-host aplikasi berbasis GRPC di cluster Amazon Elastic Kubernetes Service (Amazon EKS) dan mengaksesnya dengan aman melalui Application Load Balancer.

[gRPC](https://grpc.io/) adalah kerangka kerja panggilan prosedur jarak jauh sumber terbuka (RPC) yang dapat berjalan di lingkungan apa pun. Anda dapat menggunakannya untuk integrasi layanan mikro dan komunikasi client-server. Untuk informasi selengkapnya tentang gRPC, lihat postingan blog AWS [dukungan Application Load Balancer untuk end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) dan gRPC.

Pola ini menunjukkan cara meng-host aplikasi berbasis GRPC yang berjalan pada pod Kubernetes di Amazon EKS. Klien gRPC terhubung ke Application Load Balancer melalui protokol HTTP/2 dengan koneksi terenkripsi. SSL/TLS Application Load Balancer meneruskan lalu lintas ke aplikasi gRPC yang berjalan pada pod Amazon EKS. Jumlah pod gRPC dapat secara otomatis diskalakan berdasarkan traffic dengan menggunakan [Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) Horizontal Pod Autoscaler. Kelompok target Application Load Balancer melakukan pemeriksaan kesehatan pada node Amazon EKS, mengevaluasi apakah targetnya sehat, dan meneruskan lalu lintas hanya ke node yang sehat.

## Prasyarat dan batasan
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif.
+ [Docker](https://www.docker.com/), diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ [AWS Command Line Interface (AWS CLI) versi](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ `kubectl`, diinstal dan dikonfigurasi untuk mengakses sumber daya di kluster Amazon EKS Anda. Untuk informasi selengkapnya, lihat [Menginstal atau memperbarui kubectl di dokumentasi](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) Amazon EKS. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), diinstal dan dikonfigurasi.
+ Cluster Amazon EKS baru atau yang sudah ada. Untuk informasi selengkapnya, lihat [Memulai Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)
+ Terminal komputer Anda dikonfigurasi untuk mengakses kluster Amazon EKS. Untuk informasi selengkapnya, lihat [Mengonfigurasi komputer untuk berkomunikasi dengan klaster Anda](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) di dokumentasi Amazon EKS.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), disediakan di klaster Amazon EKS.
+ Nama host DNS yang ada dengan SSL atau SSL/TLS sertifikat yang valid. Anda dapat memperoleh sertifikat untuk domain Anda dengan menggunakan AWS Certificate Manager (ACM) atau mengunggah sertifikat yang sudah ada ke ACM. Untuk informasi selengkapnya tentang kedua opsi ini, lihat [Meminta sertifikat publik dan Mengimpor sertifikat](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) [ke AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) dalam dokumentasi ACM.

## Arsitektur
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-architecture"></a>

Diagram berikut menunjukkan arsitektur yang diterapkan oleh pola ini.

![Arsitektur untuk aplikasi berbasis GRPC di Amazon EKS](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

Diagram berikut menunjukkan alur kerja di mana SSL/TLS lalu lintas diterima dari klien gRPC yang diturunkan ke Application Load Balancer. Lalu lintas diteruskan dalam plaintext ke server gRPC karena berasal dari virtual private cloud (VPC).

![Alur kerja untuk mengirim SSL/TLS lalu lintas ke server gRPC](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


## Alat
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-tools"></a>

**Layanan AWS**
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Misalnya, Anda dapat mendistribusikan lalu lintas di seluruh instans, container, dan alamat IP Amazon Elastic Compute Cloud (Amazon EC2) di satu atau beberapa Availability Zone.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal. 
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) membantu Anda menjalankan Kubernetes di AWS tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.  

**Alat**
+ [eksctl](https://eksctl.io/) adalah alat CLI sederhana untuk membuat cluster di Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) adalah utilitas baris perintah untuk menjalankan perintah terhadap klaster Kubernetes.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) membantu Anda mengelola AWS Elastic Load Balancer untuk klaster Kubernetes.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) adalah alat baris perintah yang membantu Anda berinteraksi dengan layanan gRPC.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [grpc-traffic-on-alb-to-eks](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git).

## Epik
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-epics"></a>

### Buat dan dorong image Docker server gRPC ke Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Amazon ECR. | Masuk ke AWS Management Console, buka [konsol Amazon ECR](https://console.aws.amazon.com/ecr/), lalu buat repositori Amazon ECR. Untuk informasi selengkapnya, lihat [Membuat repositori](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) di dokumentasi Amazon ECR. Pastikan Anda merekam URL repositori Amazon ECR.<br />Anda juga dapat membuat repositori Amazon ECR dengan AWS CLI dengan menjalankan perintah berikut:<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Administrator awan | 
| membuat gambar Docker.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps insinyur | 
| Dorong gambar Docker ke Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps insinyur | 

### Menerapkan manifes Kubernetes ke cluster Amazon EKS
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ubah nilai dalam file manifes Kubernetes. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps insinyur | 
| Menerapkan file manifes Kubernetes.  | Menerapkan `grpc-sample.yaml` file ke cluster Amazon EKS dengan menjalankan `kubectl` perintah berikut: <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps insinyur | 

### Buat catatan DNS untuk FQDN Application Load Balancer
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Catat FQDN untuk Application Load Balancer. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps insinyur | 

### Pengujian solusi
<a name="test-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji server gRPC.  | Gunakan g RPCurl untuk menguji titik akhir dengan menjalankan perintah berikut:<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>Ganti `grpc.example.com` dengan nama DNS Anda. | DevOps insinyur | 
| Uji server gRPC menggunakan klien gRPC.  | Dalam `helloworld_client_ssl.py` contoh klien gRPC, ganti nama host dari `grpc.example.com` dengan nama host yang digunakan untuk server gRPC.  <br />Contoh kode berikut menunjukkan respons dari server gRPC untuk permintaan klien:<pre>python ./app/helloworld_client_ssl.py<br />message: "Hello to gRPC server from Client"<br /><br />message: "Thanks for talking to gRPC server!! Welcome to hello world. Received message is \"Hello to gRPC server from Client\""<br />received: true</pre><br />Ini menunjukkan bahwa klien dapat berbicara dengan server dan koneksi berhasil. | DevOps insinyur | 

### Bersihkan
<a name="clean-up"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus catatan DNS. | Hapus catatan DNS yang menunjuk ke FQDN Application Load Balancer yang Anda buat sebelumnya.  | Administrator awan | 
| Lepaskan penyeimbang beban. | Di [konsol Amazon EC2](https://console.aws.amazon.com/ec2/), pilih **Load Balancers, lalu hapus load balancer** yang dibuat oleh controller Kubernetes untuk resource ingress Anda. | Administrator awan | 
| Hapus kluster Amazon EKS. | Hapus kluster Amazon EKS dengan menggunakan`eksctl`:<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Sumber daya terkait
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Penyeimbangan beban jaringan di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Grup sasaran untuk Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

## Informasi tambahan
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-additional"></a>

**Sumber daya masuknya sampel:**

```
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/backend-protocol-version: "GRPC"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<AWS-Region>:<AccountId>:certificate/<certificate_ID>
  labels:
    app: grpcserver
    environment: dev
  name: grpcserver
  namespace: grpcserver
spec:
  ingressClassName: alb
  rules:
  - host: grpc.example.com # <----- replace this as per your host name for which the SSL certtficate is available in ACM
    http:
      paths:
      - backend:
          service:
            name: grpcserver
            port:
              number: 9000
        path: /
        pathType: Prefix
```

**Sumber daya penyebaran sampel:**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcserver
  namespace: grpcserver
spec:
  selector:
    matchLabels:
      app: grpcserver
  replicas: 1
  template:
    metadata:
      labels:
        app: grpcserver
    spec:
      containers:
      - name: grpc-demo
        image: <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0   #<------- Change to the URI that the Docker image is pushed to
        imagePullPolicy: Always
        ports:
        - name: grpc-api
          containerPort: 9000
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      restartPolicy: Always
```

**Keluaran sampel:**

```
NAME             CLASS           HOSTS                          Address                PORTS          AGE
 grpcserver      <none>      <DNS-HostName>                  <ELB-address>              80            27d
```