

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Déployez une application basée sur GRPC sur un cluster Amazon EKS et accédez-y à l'aide d'un 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 et Huy Nguyen, Amazon Web Services*

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

Ce modèle décrit comment héberger une application basée sur GRPC sur un cluster Amazon Elastic Kubernetes Service (Amazon EKS) et comment y accéder en toute sécurité via un Application Load Balancer.

[gRPC](https://grpc.io/) est un framework open source d'appel de procédure à distance (RPC) qui peut s'exécuter dans n'importe quel environnement. Vous pouvez l'utiliser pour les intégrations de microservices et les communications client-serveur. Pour plus d'informations sur gRPC, consultez le billet de blog AWS [Application Load Balancer support for end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) and gRPC.

Ce modèle vous montre comment héberger une application basée sur GRPC qui s'exécute sur des pods Kubernetes sur Amazon EKS. Le client gRPC se connecte à un Application Load Balancer via le protocole HTTP/2 avec une connexion cryptée. SSL/TLS L'Application Load Balancer transmet le trafic vers l'application gRPC qui s'exécute sur les pods Amazon EKS. Le nombre de pods gRPC peut être automatiquement redimensionné en fonction du trafic à l'aide du [Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) Horizontal Pod Autoscaler. Le groupe cible de l'équilibreur de charge d'application effectue des contrôles de santé sur les nœuds Amazon EKS, évalue si la cible est saine et transmet le trafic uniquement aux nœuds sains.

## Conditions préalables et limitations
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ [Docker](https://www.docker.com/), installé et configuré sous Linux, macOS ou Windows.
+ [Interface de ligne de commande AWS (AWS CLI) version](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, installée et configurée sous Linux, macOS ou Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), installé et configuré sous Linux, macOS ou Windows.
+ `kubectl`, installé et configuré pour accéder aux ressources de votre cluster Amazon EKS. Pour plus d'informations, consultez la section [Installation ou mise à jour de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dans la documentation Amazon EKS. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), installé et configuré.
+ Un cluster Amazon EKS nouveau ou existant. Pour plus d'informations, consultez [Getting started with Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)
+ Votre terminal informatique est configuré pour accéder au cluster Amazon EKS. Pour plus d'informations, consultez [Configurer votre ordinateur pour communiquer avec votre cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) dans la documentation Amazon EKS.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), provisionné dans le cluster Amazon EKS.
+ Un nom d'hôte DNS existant avec un SSL/TLS certificat ou un certificat SSL valide. Vous pouvez obtenir un certificat pour votre domaine en utilisant AWS Certificate Manager (ACM) ou en téléchargeant un certificat existant sur ACM. Pour plus d'informations sur ces deux options, consultez les sections [Demande d'un certificat public](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) et [Importation de certificats dans AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) dans la documentation ACM.

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

Le schéma suivant montre l'architecture mise en œuvre par ce modèle.

![Architecture pour une application basée sur GRPC sur Amazon EKS](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

Le schéma suivant montre un flux de travail dans lequel SSL/TLS le trafic est reçu d'un client gRPC qui est transféré vers un Application Load Balancer. Le trafic est transféré en texte clair vers le serveur gRPC car il provient d'un cloud privé virtuel (VPC).

![Flux de travail pour envoyer SSL/TLS du trafic vers un serveur gRPC](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


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

**Services AWS**
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) répartit le trafic applicatif ou réseau entrant sur plusieurs cibles. Par exemple, vous pouvez répartir le trafic entre les instances, les conteneurs et les adresses IP Amazon Elastic Compute Cloud (Amazon EC2) dans une ou plusieurs zones de disponibilité.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable. 
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous aide à exécuter Kubernetes sur AWS sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.  

**Outils**
+ [eksctl](https://eksctl.io/) est un outil CLI simple permettant de créer des clusters sur Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) est un utilitaire de ligne de commande permettant d'exécuter des commandes sur des clusters Kubernetes.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) vous aide à gérer les AWS Elastic Load Balancers pour un cluster Kubernetes.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) est un outil en ligne de commande qui vous permet d'interagir avec les services gRPC.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [grpc-traffic-on-alb-to-eks](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git).

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

### Créez et envoyez l'image Docker du serveur gRPC vers Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| créer un référentiel Amazon ECR ; | Connectez-vous à l'AWS Management Console, ouvrez la [console Amazon ECR](https://console.aws.amazon.com/ecr/), puis créez un référentiel Amazon ECR. Pour plus d'informations, consultez [la section Création d'un référentiel](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) dans la documentation Amazon ECR. Assurez-vous d'enregistrer l'URL du référentiel Amazon ECR.<br />Vous pouvez également créer un référentiel Amazon ECR avec l'AWS CLI en exécutant la commande suivante :<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Administrateur du cloud | 
| Développez l’image Docker.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingénieur | 
| Transférez l'image Docker vers Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingénieur | 

### Déployez les manifestes Kubernetes sur le cluster Amazon EKS
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Modifiez les valeurs du fichier manifeste Kubernetes. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingénieur | 
| Déployez le fichier manifeste Kubernetes.  | Déployez le `grpc-sample.yaml` fichier sur le cluster Amazon EKS en exécutant la `kubectl` commande suivante : <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps ingénieur | 

### Créez l'enregistrement DNS pour le FQDN de l'équilibreur de charge d'application
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Enregistrez le nom de domaine complet de l'Application Load Balancer. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingénieur | 

### Tester la solution
<a name="test-the-solution"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez le serveur gRPC.  | Utilisez g RPCurl pour tester le point de terminaison en exécutant la commande suivante :<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>`grpc.example.com`Remplacez-le par votre nom DNS. | DevOps ingénieur | 
| Testez le serveur gRPC à l'aide d'un client gRPC.  | Dans l'`helloworld_client_ssl.py`exemple de client gRPC, remplacez le nom d'hôte de par le nom `grpc.example.com` d'hôte utilisé pour le serveur gRPC.  <br />L'exemple de code suivant montre la réponse du serveur gRPC à la demande du client :<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 />Cela montre que le client peut communiquer avec le serveur et que la connexion est réussie. | DevOps ingénieur | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez l'enregistrement DNS. | Supprimez l'enregistrement DNS qui pointe vers le FQDN de l'équilibreur de charge d'application que vous avez créé précédemment.  | Administrateur du cloud | 
| Retirez l'équilibreur de charge. | Sur la [console Amazon EC2](https://console.aws.amazon.com/ec2/), choisissez **Load Balancers**, puis supprimez l'équilibreur de charge créé par le contrôleur Kubernetes pour votre ressource d'entrée. | Administrateur du cloud | 
| Supprimez le cluster Amazon EKS. | Supprimez le cluster Amazon EKS en utilisant `eksctl` :<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Ressources connexes
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Répartition de charge réseau sur Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Groupes cibles pour vos équilibreurs de charge d'applications](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

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

**Exemple de ressource d'entrée :**

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

**Exemple de ressource de déploiement :**

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

**Exemple de sortie** :

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