

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.

# Stellen Sie eine GRPC-basierte Anwendung auf einem Amazon EKS-Cluster bereit und greifen Sie mit einem Application Load Balancer darauf zu
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer"></a>

*Kirankumar Chandrashekar und Huy Nguyen, Amazon Web Services*

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

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](https://grpc.io/) 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](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) 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 verschlüsselten Verbindung eine Verbindung zu einem SSL/TLS 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](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) 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
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto.
+ [Docker](https://www.docker.com/), installiert und konfiguriert unter Linux, MacOS oder Windows.
+ [AWS-Befehlszeilenschnittstelle (AWS CLI) Version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), installiert und konfiguriert unter Linux, macOS oder Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), 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](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) in der Amazon EKS-Dokumentation. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), installiert und konfiguriert.
+ Ein neuer oder vorhandener Amazon EKS-Cluster. Weitere Informationen finden Sie unter [Erste Schritte mit Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)
+ 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](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl).
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), 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](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) [in AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) in der ACM-Dokumentation.

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

Das folgende Diagramm zeigt die durch dieses Muster implementierte Architektur.

![Architektur für GRPC-basierte Anwendungen auf Amazon EKS](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

Das folgende Diagramm zeigt einen Workflow, bei dem SSL/TLS Datenverkehr 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 Datenverkehr an einen gRPC-Server](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


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

**AWS-Services**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) verteilt den eingehenden Anwendungs- oder Netzwerkverkehr auf mehrere Ziele. Sie können beispielsweise den Datenverkehr 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)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist. 
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) hilft Ihnen, Kubernetes auf AWS auszuführen, ohne Ihre eigene Kubernetes-Steuerebene oder Knoten installieren oder verwalten zu müssen.  

**Tools**
+ [eksctl](https://eksctl.io/) ist ein einfaches CLI-Tool zum Erstellen von Clustern auf Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) ist ein Befehlszeilenprogramm zum Ausführen von Befehlen für Kubernetes-Cluster.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) unterstützt Sie bei der Verwaltung von AWS Elastic Load Balancers für einen Kubernetes-Cluster.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) 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](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git) verfügbar.

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

### Erstellen Sie das Docker-Image des gRPC-Servers und übertragen Sie es auf Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie ein Amazon-ECR-Repository. | Melden Sie sich bei der AWS-Managementkonsole an, öffnen Sie die [Amazon ECR-Konsole](https://console.aws.amazon.com/ecr/) und erstellen Sie dann ein Amazon ECR-Repository. Weitere Informationen finden Sie unter [Erstellen eines Repositorys](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) in der Amazon ECR-Dokumentation. Stellen Sie sicher, dass Sie die URL des Amazon ECR-Repositorys aufzeichnen.<br />Sie können auch ein Amazon ECR-Repository mit AWS CLI erstellen, indem Sie den folgenden Befehl ausführen:<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Cloud-Administrator | 
| Erstellen Sie das Docker-Image.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps Ingenieur | 
| Senden Sie das Docker-Image an Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps Ingenieur | 

### Stellen Sie die Kubernetes-Manifeste im Amazon EKS-Cluster bereit
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Ändern Sie die Werte in der Kubernetes-Manifestdatei. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | 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: <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps Ingenieur | 

### Erstellen Sie den DNS-Eintrag für den FQDN des Application Load Balancers
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Notieren Sie den FQDN für den Application Load Balancer. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps Ingenieur | 

### Testen der Lösung
<a name="test-the-solution"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Testen Sie den gRPC-Server.  | Verwenden Sie gRPCurl , um den Endpunkt zu testen, indem Sie den folgenden Befehl ausführen:<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>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.  <br />Das folgende Codebeispiel zeigt die Antwort des gRPC-Servers auf die Anfrage des Clients:<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 />Dies zeigt, dass der Client mit dem Server kommunizieren kann und dass die Verbindung erfolgreich ist. | DevOps Ingenieur | 

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


| Aufgabe | Description | 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 [Amazon EC2 EC2-Konsole](https://console.aws.amazon.com/ec2/) **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 von`eksctl`:<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Zugehörige Ressourcen
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Network Load Balancing in Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Zielgruppen für Ihre Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

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

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