Menerapkan aplikasi berbasis GRPC di cluster Amazon EKS dan mengaksesnya dengan Application Load Balancer - AWS Prescriptive Guidance

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

Kirankumar Chandrashekar dan Huy Nguyen, Amazon Web Services

Ringkasan

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

Prasyarat

Arsitektur

Diagram berikut menunjukkan arsitektur yang diterapkan oleh pola ini.

Arsitektur untuk aplikasi berbasis GRPC di Amazon EKS

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

Alat

Layanan AWS

  • AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.

  • Elastic Load Balancing 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) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal. 

  • Amazon Elastic Kubernetes Service (Amazon EKS) membantu Anda menjalankan Kubernetes di AWS tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.  

Alat

  • eksctl adalah alat CLI sederhana untuk membuat cluster di Amazon EKS.

  • kubectl adalah utilitas baris perintah untuk menjalankan perintah terhadap klaster Kubernetes.

  • AWS Load Balancer Controller membantu Anda mengelola AWS Elastic Load Balancer untuk klaster Kubernetes.

  • g RPCurl 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.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat repositori Amazon ECR.

Masuk ke AWS Management Console, buka konsol Amazon ECR, lalu buat repositori Amazon ECR. Untuk informasi selengkapnya, lihat Membuat repositori di dokumentasi Amazon ECR. Pastikan Anda merekam URL repositori Amazon ECR.

Anda juga dapat membuat repositori Amazon ECR dengan AWS CLI dengan menjalankan perintah berikut:

aws ecr create-repository --repository-name helloworld-grpc
Administrator awan

membuat gambar Docker.

  1. Kloning repositori GitHub grpc-traffic-on-alb-to-eks.

    git clone https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git
  2. Dari direktori root repositori, pastikan bahwa Dockerfile ada dan kemudian jalankan perintah berikut untuk membangun image Docker: 

    docker build -t <amazon_ecr_repository_url>:<Tag> .
    penting

    Pastikan Anda mengganti <amazon_ecr_repository_url> dengan URL repositori Amazon ECR yang Anda buat sebelumnya.

DevOps insinyur

Dorong gambar Docker ke Amazon ECR.

  1. Jalankan perintah berikut untuk masuk ke repositori Amazon ECR:

    aws ecr get-login-password --region us-east-1 --no-cli-auto-prompt | docker login --username AWS --password-stdin <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com
  2. Dorong image Docker ke repositori Amazon ECR dengan menjalankan perintah berikut:

    docker push <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0
    penting

    Pastikan Anda mengganti <your_aws_account_id> dengan ID akun AWS Anda.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Ubah nilai dalam file manifes Kubernetes.

  1. Ubah file grpc-sample.yaml manifes Kubernetes di folder Kubernetes dari repositori sesuai dengan kebutuhan Anda. Anda harus memodifikasi anotasi dan nama host di sumber daya ingress. Untuk sumber daya masuk sampel, lihat bagian Informasi tambahan. Untuk informasi selengkapnya tentang anotasi ingress, lihat anotasi Ingress di dokumentasi Kubernetes.

  2. Di resource deployment Kubernetes, ubah resource deployment menjadi uniform resource identifier (URI) image untuk repositori Amazon ECR tempat Anda mendorong image Docker. Untuk sumber daya penerapan contoh, lihat bagian Informasi tambahan.

DevOps insinyur

Menerapkan file manifes Kubernetes.

Menerapkan grpc-sample.yaml file ke cluster Amazon EKS dengan menjalankan kubectl perintah berikut: 

kubectl apply -f ./kubernetes/grpc-sample.yaml
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Catat FQDN untuk Application Load Balancer.

  1. Jalankan kubectl perintah berikut untuk mendeskripsikan sumber daya ingress Kubernetes yang mengelola Application Load Balancer:

    kubectl get ingress -n grpcserver

    Output sampel disediakan di bagian Informasi tambahan. Dalam output, HOSTS bidang menampilkan nama host DNS tempat sertifikat SSL dibuat.

  2. Catat nama domain (FQDN) Application Load Balancer yang sepenuhnya memenuhi syarat dari Address bidang output. 

  3. Buat catatan DNS yang menunjuk ke FQDN Application Load Balancer. Jika penyedia DNS Anda adalah Amazon Route 53, Anda dapat membuat catatan alias yang menunjuk ke FQDN Application Load Balancer. Untuk informasi selengkapnya tentang opsi ini, lihat Memilih antara catatan alias dan non-alias dalam dokumentasi Route 53.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Uji server gRPC.

Gunakan g RPCurl untuk menguji titik akhir dengan menjalankan perintah berikut:

grpcurl grpc.example.com:443 list grpc.reflection.v1alpha.ServerReflection helloworld.helloworld
catatan

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.  

Contoh kode berikut menunjukkan respon dari server gRPC untuk permintaan klien:

python ./app/helloworld_client_ssl.py message: "Hello to gRPC server from Client" message: "Thanks for talking to gRPC server!! Welcome to hello world. Received message is \"Hello to gRPC server from Client\"" received: true

Ini menunjukkan bahwa klien dapat berbicara dengan server dan koneksi berhasil.

DevOps insinyur
TugasDeskripsiKeterampilan 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 EC2 konsol Amazon, 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 menggunakaneksctl:

eksctl delete cluster -f ./eks.yaml
AWS DevOps

Sumber daya terkait

Informasi tambahan

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