Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Erstellt von Kirankumar Chandrashekar (AWS) und Huy Nguyen (AWS)
Übersicht
Dieses Muster beschreibt, wie Sie eine GRPC-basierte Anwendung auf einem Amazon Elastic Kubernetes Service (Amazon EKS) -Cluster hosten und über einen Application Load Balancer sicher darauf zugreifen.
gRPC
Dieses Muster zeigt Ihnen, wie Sie eine GRPC-basierte Anwendung hosten, die auf Kubernetes-Pods auf Amazon EKS ausgeführt wird. Der gRPC-Client stellt über das HTTP/2-Protokoll mit einer SSL/TLS-verschlüsselten Verbindung eine Verbindung zu einem Application Load Balancer her. Der Application Load Balancer leitet den Datenverkehr an die gRPC-Anwendung weiter, die auf Amazon EKS-Pods ausgeführt wird. Die Anzahl der gRPC-Pods kann mithilfe des Kubernetes Horizontal Pod Autoscaler automatisch auf der Grundlage des Datenverkehrs skaliert werden. Die Zielgruppe des Application Load Balancers führt Integritätsprüfungen an den Amazon EKS-Knoten durch, bewertet, ob das Ziel fehlerfrei ist, und leitet den Datenverkehr nur an fehlerfreie Knoten weiter.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS-Konto.
Docker
, installiert und konfiguriert unter Linux, MacOS oder Windows. AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2, installiert und konfiguriert unter Linux, macOS oder Windows.
eksctl
, installiert und konfiguriert unter Linux, MacOS oder Windows. kubectl
, installiert und konfiguriert für den Zugriff auf Ressourcen in Ihrem Amazon EKS-Cluster. Weitere Informationen finden Sie unter Installation oder Aktualisierung von kubectl in der Amazon EKS-Dokumentation.g RPCurl
, installiert und konfiguriert. Ein neuer oder vorhandener Amazon EKS-Cluster. Weitere Informationen finden Sie unter Erste Schritte mit Amazon EKS.
Ihr Computerterminal ist für den Zugriff auf den Amazon EKS-Cluster konfiguriert. Weitere Informationen finden Sie in der Amazon EKS-Dokumentation unter Konfiguration Ihres Computers für die Kommunikation mit Ihrem Cluster.
AWS Load Balancer Controller, bereitgestellt im Amazon EKS-Cluster.
Ein vorhandener DNS-Hostname mit einem gültigen SSL- oder SSL/TLS-Zertifikat. Sie können ein Zertifikat für Ihre Domain erhalten, indem Sie AWS Certificate Manager (ACM) verwenden oder ein vorhandenes Zertifikat auf ACM hochladen. Weitere Informationen zu diesen beiden Optionen finden Sie unter Anfordern eines öffentlichen Zertifikats und Importieren von Zertifikaten in AWS Certificate Manager in der ACM-Dokumentation.
Architektur
Das folgende Diagramm zeigt die durch dieses Muster implementierte Architektur.

Das folgende Diagramm zeigt einen Workflow, bei dem SSL/TLS-Verkehr von einem gRPC-Client empfangen wird, der auf einen Application Load Balancer auslagert. Der Datenverkehr wird im Klartext an den gRPC-Server weitergeleitet, da er aus einer Virtual Private Cloud (VPC) stammt.

Tools
AWS-Services
AWS Command Line Interface (AWS CLI) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.
Elastic Load Balancing verteilt den eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele. Sie können beispielsweise den Traffic auf Amazon Elastic Compute Cloud (Amazon EC2) -Instances, Container und IP-Adressen in einer oder mehreren Availability Zones verteilen.
Amazon Elastic Container Registry (Amazon ECR) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
Amazon Elastic Kubernetes Service (Amazon EKS) hilft Ihnen dabei, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten zu müssen.
Tools
eksctl
ist ein einfaches CLI-Tool zum Erstellen von Clustern auf Amazon EKS. kubectl
ist ein Befehlszeilenprogramm zum Ausführen von Befehlen für Kubernetes-Cluster. AWS Load Balancer Controller unterstützt Sie bei der Verwaltung von AWS Elastic Load Balancers für einen Kubernetes-Cluster.
g RPCurl
ist ein Befehlszeilentool, mit dem Sie mit gRPC-Diensten interagieren können.
Code-Repository
Der Code für dieses Muster ist im GitHub grpc-traffic-on-alb-to-eks-Repository
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie ein Amazon-ECR-Repository. | Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die Amazon ECR-Konsole Sie können auch ein Amazon ECR-Repository mit AWS CLI erstellen, indem Sie den folgenden Befehl ausführen:
| Cloud-Administrator |
Erstellen Sie das Docker-Image. |
| DevOps Ingenieur |
Senden Sie das Docker-Image an Amazon ECR. |
| DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Ändern Sie die Werte in der Kubernetes-Manifestdatei. |
| DevOps Ingenieur |
Stellen Sie die Kubernetes-Manifestdatei bereit. | Stellen Sie die
| DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Notieren Sie den FQDN für den Application Load Balancer. |
| DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Testen Sie den gRPC-Server. | Verwenden Sie gRPCurl , um den Endpunkt zu testen, indem Sie den folgenden Befehl ausführen:
AnmerkungErsetze es | DevOps Ingenieur |
Testen Sie den gRPC-Server mit einem gRPC-Client. | Ersetzen Sie im Das folgende Codebeispiel zeigt die Antwort des gRPC-Servers auf die Anfrage des Clients:
Dies zeigt, dass der Client mit dem Server kommunizieren kann und dass die Verbindung erfolgreich ist. | DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Entfernen Sie den DNS-Eintrag. | Entfernen Sie den DNS-Eintrag, der auf den zuvor erstellten FQDN des Application Load Balancers verweist. | Cloud-Administrator |
Entfernen Sie den Load Balancer. | Wählen Sie auf der EC2 Amazon-Konsole | Cloud-Administrator |
Löschen Sie den Amazon EKS-Cluster. | Löschen Sie den Amazon EKS-Cluster mithilfe von
| AWS DevOps |
Zugehörige Ressourcen
Zusätzliche Informationen
Beispiel für eine Ingress-Ressource:
---
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
Beispiel für eine Bereitstellungsressource:
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
Beispielausgabe:
NAME CLASS HOSTS Address PORTS AGE
grpcserver <none> <DNS-HostName> <ELB-address> 80 27d