Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Stellen Sie eine GRPC-basierte Anwendung auf einem Amazon EKS-Cluster bereit und greifen Sie mit einem Application Load Balancer darauf zu

Fokusmodus
Stellen Sie eine GRPC-basierte Anwendung auf einem Amazon EKS-Cluster bereit und greifen Sie mit einem Application Load Balancer darauf zu - AWS Prescriptive Guidance

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.

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 ist ein Open-Source-RPC-Framework (Remote Procedure Call), das in jeder Umgebung ausgeführt werden kann. Sie können es für Microservice-Integrationen und Client-Server-Kommunikation verwenden. Weitere Informationen zu gRPC finden Sie im AWS-Blogbeitrag Application Load Balancer Balancer-Unterstützung für end-to-end HTTP/2 und 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

Architektur

Das folgende Diagramm zeigt die durch dieses Muster implementierte Architektur.

Architektur für GRPC-basierte Anwendungen auf Amazon EKS

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.

Workflow zum Senden von SSL/TLS-Verkehr an einen gRPC-Server

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 verfügbar.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie ein Amazon-ECR-Repository.

Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die Amazon ECR-Konsole und erstellen Sie dann ein Amazon ECR-Repository. Weitere Informationen finden Sie unter Erstellen eines Repositorys in der Amazon ECR-Dokumentation. Stellen Sie sicher, dass Sie die URL des Amazon ECR-Repositorys aufzeichnen.

Sie können auch ein Amazon ECR-Repository mit AWS CLI erstellen, indem Sie den folgenden Befehl ausführen:

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

Erstellen Sie das Docker-Image.

  1. Klonen Sie das GitHub grpc-traffic-on-alb-to-eks-Repository.

    git clone https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git
  2. Stellen Sie im Stammverzeichnis des Repositorys sicher, dass das Dockerfile vorhanden ist, und führen Sie dann den folgenden Befehl aus, um das Docker-Image zu erstellen: 

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

    Stellen Sie sicher, dass Sie es <amazon_ecr_repository_url> durch die URL des Amazon ECR-Repositorys ersetzen, das Sie zuvor erstellt haben.

DevOps Ingenieur

Senden Sie das Docker-Image an Amazon ECR.

  1. Führen Sie den folgenden Befehl aus, um sich beim Amazon ECR-Repository anzumelden:

    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. Übertragen Sie das Docker-Image in das Amazon ECR-Repository, indem Sie den folgenden Befehl ausführen:

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

    Stellen Sie sicher, dass Sie es <your_aws_account_id> durch Ihre AWS-Konto-ID ersetzen.

DevOps Ingenieur

Erstellen Sie das Docker-Image des gRPC-Servers und übertragen Sie es auf Amazon ECR

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie ein Amazon-ECR-Repository.

Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die Amazon ECR-Konsole und erstellen Sie dann ein Amazon ECR-Repository. Weitere Informationen finden Sie unter Erstellen eines Repositorys in der Amazon ECR-Dokumentation. Stellen Sie sicher, dass Sie die URL des Amazon ECR-Repositorys aufzeichnen.

Sie können auch ein Amazon ECR-Repository mit AWS CLI erstellen, indem Sie den folgenden Befehl ausführen:

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

Erstellen Sie das Docker-Image.

  1. Klonen Sie das GitHub grpc-traffic-on-alb-to-eks-Repository.

    git clone https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git
  2. Stellen Sie im Stammverzeichnis des Repositorys sicher, dass das Dockerfile vorhanden ist, und führen Sie dann den folgenden Befehl aus, um das Docker-Image zu erstellen: 

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

    Stellen Sie sicher, dass Sie es <amazon_ecr_repository_url> durch die URL des Amazon ECR-Repositorys ersetzen, das Sie zuvor erstellt haben.

DevOps Ingenieur

Senden Sie das Docker-Image an Amazon ECR.

  1. Führen Sie den folgenden Befehl aus, um sich beim Amazon ECR-Repository anzumelden:

    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. Übertragen Sie das Docker-Image in das Amazon ECR-Repository, indem Sie den folgenden Befehl ausführen:

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

    Stellen Sie sicher, dass Sie es <your_aws_account_id> durch Ihre AWS-Konto-ID ersetzen.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Ändern Sie die Werte in der Kubernetes-Manifestdatei.

  1. Ändern Sie die grpc-sample.yaml Kubernetes-Manifestdatei im Kubernetes-Ordner des Repositorys gemäß Ihren Anforderungen. Sie müssen die Anmerkungen und den Hostnamen in der Eingangsressource ändern. Ein Beispiel für eine Ingress-Ressource finden Sie im Abschnitt Zusätzliche Informationen. Weitere Informationen zu Eingangsanmerkungen finden Sie unter Eingangsanmerkungen in der Kubernetes-Dokumentation.

  2. Ändern Sie in der Kubernetes-Bereitstellungsressource die Bereitstellungsressourcen in den Uniform Resource Identifier (URI) für das Amazon ECR-Repository, in das Sie das Docker-Image übertragen haben. image Ein Beispiel für eine Bereitstellungsressource finden Sie im Abschnitt Zusätzliche Informationen.

DevOps Ingenieur

Stellen Sie die Kubernetes-Manifestdatei bereit.

Stellen Sie die grpc-sample.yaml Datei im Amazon EKS-Cluster bereit, indem Sie den folgenden kubectl Befehl ausführen: 

kubectl apply -f ./kubernetes/grpc-sample.yaml
DevOps Ingenieur

Stellen Sie die Kubernetes-Manifeste im Amazon EKS-Cluster bereit

AufgabeBeschreibungErforderliche Fähigkeiten

Ändern Sie die Werte in der Kubernetes-Manifestdatei.

  1. Ändern Sie die grpc-sample.yaml Kubernetes-Manifestdatei im Kubernetes-Ordner des Repositorys gemäß Ihren Anforderungen. Sie müssen die Anmerkungen und den Hostnamen in der Eingangsressource ändern. Ein Beispiel für eine Ingress-Ressource finden Sie im Abschnitt Zusätzliche Informationen. Weitere Informationen zu Eingangsanmerkungen finden Sie unter Eingangsanmerkungen in der Kubernetes-Dokumentation.

  2. Ändern Sie in der Kubernetes-Bereitstellungsressource die Bereitstellungsressourcen in den Uniform Resource Identifier (URI) für das Amazon ECR-Repository, in das Sie das Docker-Image übertragen haben. image Ein Beispiel für eine Bereitstellungsressource finden Sie im Abschnitt Zusätzliche Informationen.

DevOps Ingenieur

Stellen Sie die Kubernetes-Manifestdatei bereit.

Stellen Sie die grpc-sample.yaml Datei im Amazon EKS-Cluster bereit, indem Sie den folgenden kubectl Befehl ausführen: 

kubectl apply -f ./kubernetes/grpc-sample.yaml
DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Notieren Sie den FQDN für den Application Load Balancer.

  1. Führen Sie den folgenden kubectl Befehl aus, um die Kubernetes-Eingangsressource zu beschreiben, die den Application Load Balancer verwaltet:

    kubectl get ingress -n grpcserver

    Eine Beispielausgabe finden Sie im Abschnitt Zusätzliche Informationen. In der Ausgabe zeigt das HOSTS Feld den DNS-Hostnamen an, für den die SSL-Zertifikate erstellt wurden.

  2. Notieren Sie den vollqualifizierten Domainnamen (FQDN) des Application Load Balancers aus dem Address Feld der Ausgabe. 

  3. Erstellen Sie einen DNS-Eintrag, der auf den FQDN des Application Load Balancers verweist. Wenn Ihr DNS-Anbieter Amazon Route 53 ist, können Sie einen Aliaseintrag erstellen, der auf den FQDN des Application Load Balancers verweist. Weitere Informationen zu dieser Option finden Sie unter Auswahl zwischen Alias- und Nicht-Aliasdatensätzen in der Route 53 53-Dokumentation.

DevOps Ingenieur

Erstellen Sie den DNS-Eintrag für den FQDN des Application Load Balancers

AufgabeBeschreibungErforderliche Fähigkeiten

Notieren Sie den FQDN für den Application Load Balancer.

  1. Führen Sie den folgenden kubectl Befehl aus, um die Kubernetes-Eingangsressource zu beschreiben, die den Application Load Balancer verwaltet:

    kubectl get ingress -n grpcserver

    Eine Beispielausgabe finden Sie im Abschnitt Zusätzliche Informationen. In der Ausgabe zeigt das HOSTS Feld den DNS-Hostnamen an, für den die SSL-Zertifikate erstellt wurden.

  2. Notieren Sie den vollqualifizierten Domainnamen (FQDN) des Application Load Balancers aus dem Address Feld der Ausgabe. 

  3. Erstellen Sie einen DNS-Eintrag, der auf den FQDN des Application Load Balancers verweist. Wenn Ihr DNS-Anbieter Amazon Route 53 ist, können Sie einen Aliaseintrag erstellen, der auf den FQDN des Application Load Balancers verweist. Weitere Informationen zu dieser Option finden Sie unter Auswahl zwischen Alias- und Nicht-Aliasdatensätzen in der Route 53 53-Dokumentation.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Testen Sie den gRPC-Server.

Verwenden Sie gRPCurl , um den Endpunkt zu testen, indem Sie den folgenden Befehl ausführen:

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

Ersetze es grpc.example.com durch deinen DNS-Namen.

DevOps Ingenieur

Testen Sie den gRPC-Server mit einem gRPC-Client.

Ersetzen Sie im helloworld_client_ssl.py gRPC-Beispielclient den Hostnamen von grpc.example.com durch den Hostnamen, der für den gRPC-Server verwendet wird.  

Das folgende Codebeispiel zeigt die Antwort des gRPC-Servers auf die Anfrage des Clients:

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

Dies zeigt, dass der Client mit dem Server kommunizieren kann und dass die Verbindung erfolgreich ist.

DevOps Ingenieur

Testen der Lösung

AufgabeBeschreibungErforderliche Fähigkeiten

Testen Sie den gRPC-Server.

Verwenden Sie gRPCurl , um den Endpunkt zu testen, indem Sie den folgenden Befehl ausführen:

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

Ersetze es grpc.example.com durch deinen DNS-Namen.

DevOps Ingenieur

Testen Sie den gRPC-Server mit einem gRPC-Client.

Ersetzen Sie im helloworld_client_ssl.py gRPC-Beispielclient den Hostnamen von grpc.example.com durch den Hostnamen, der für den gRPC-Server verwendet wird.  

Das folgende Codebeispiel zeigt die Antwort des gRPC-Servers auf die Anfrage des Clients:

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

Dies zeigt, dass der Client mit dem Server kommunizieren kann und dass die Verbindung erfolgreich ist.

DevOps Ingenieur
AufgabeBeschreibungErforderliche 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 Load Balancers und entfernen Sie dann den Load Balancer, den der Kubernetes-Controller für Ihre Eingangsressource erstellt hat.

Cloud-Administrator

Löschen Sie den Amazon EKS-Cluster.

Löschen Sie den Amazon EKS-Cluster mithilfe voneksctl:

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

Bereinigen

AufgabeBeschreibungErforderliche 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 Load Balancers und entfernen Sie dann den Load Balancer, den der Kubernetes-Controller für Ihre Eingangsressource erstellt hat.

Cloud-Administrator

Löschen Sie den Amazon EKS-Cluster.

Löschen Sie den Amazon EKS-Cluster mithilfe voneksctl:

eksctl delete cluster -f ./eks.yaml
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
DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.