

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Implementa un'applicazione basata su gRPC su un cluster Amazon EKS e accedi ad essa con 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 e Huy Nguyen, Amazon Web Services*

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

Questo modello descrive come ospitare un'applicazione basata su gRPC su un cluster Amazon Elastic Kubernetes Service (Amazon EKS) e accedervi in modo sicuro tramite un Application Load Balancer.

[gRPC](https://grpc.io/) è un framework RPC (Remote Procedure Call) open source che può essere eseguito in qualsiasi ambiente. Puoi usarlo per integrazioni di microservizi e comunicazioni client-server. Per ulteriori informazioni su gRPC, consulta il post sul blog di AWS [Application Load Balancer support per end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) e gRPC.

Questo modello mostra come ospitare un'applicazione basata su gRPC che viene eseguita su pod Kubernetes su Amazon EKS. Il client gRPC si connette a un Application Load Balancer tramite il protocollo HTTP/2 con una connessione crittografata. SSL/TLS L'Application Load Balancer inoltra il traffico all'applicazione gRPC in esecuzione sui pod Amazon EKS. Il numero di pod gRPC può essere ridimensionato automaticamente in base al traffico utilizzando [Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) Horizontal Pod Autoscaler. Il gruppo target di Application Load Balancer esegue controlli di integrità sui nodi Amazon EKS, valuta se il target è integro e inoltra il traffico solo ai nodi integri.

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

**Prerequisiti**
+ Un account AWS attivo.
+ [Docker](https://www.docker.com/), installato e configurato su Linux, macOS o Windows.
+ [AWS Command Line Interface (AWS CLI) versione](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, installata e configurata su Linux, macOS o Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), installato e configurato su Linux, macOS o Windows.
+ `kubectl`, installato e configurato per accedere alle risorse sul tuo cluster Amazon EKS. Per ulteriori informazioni, consulta [Installazione o aggiornamento di kubectl nella documentazione](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) di Amazon EKS. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), installato e configurato.
+ Un cluster Amazon EKS nuovo o esistente. Per ulteriori informazioni, consulta [Guida introduttiva ad Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)
+ Il terminale del computer è configurato per accedere al cluster Amazon EKS. Per ulteriori informazioni, consulta [Configurare il computer per comunicare con il cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) nella documentazione di Amazon EKS.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), fornito nel cluster Amazon EKS.
+ Un nome host DNS esistente con un certificato o SSL valido. SSL/TLS Puoi ottenere un certificato per il tuo dominio utilizzando AWS Certificate Manager (ACM) o caricando un certificato esistente su ACM. Per ulteriori informazioni su queste due opzioni, consulta [Richiesta di un certificato pubblico](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) e [Importazione di certificati in AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) nella documentazione ACM.

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

Il diagramma seguente mostra l'architettura implementata da questo modello.

![Architettura per applicazioni basate su gRPC su Amazon EKS](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

Il diagramma seguente mostra un flusso di lavoro in cui SSL/TLS il traffico viene ricevuto da un client gRPC che viene trasferito a un Application Load Balancer. Il traffico viene inoltrato in testo semplice al server gRPC perché proviene da un cloud privato virtuale (VPC).

![Flusso di lavoro per l'invio di SSL/TLS traffico a un server gRPC](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


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

**Servizi AWS**
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella shell della riga di comando.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuisce il traffico di applicazioni o di rete in entrata su più destinazioni. Ad esempio, puoi distribuire il traffico tra istanze Amazon Elastic Compute Cloud (Amazon EC2), contenitori e indirizzi IP in una o più zone di disponibilità.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile. 
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) ti aiuta a eseguire Kubernetes su AWS senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.  

**Strumenti**
+ [eksctl](https://eksctl.io/) è un semplice strumento CLI per creare cluster su Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) è un'utilità da riga di comando per eseguire comandi su cluster Kubernetes.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) ti aiuta a gestire AWS Elastic Load Balancers per un cluster Kubernetes.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) è uno strumento da riga di comando che consente di interagire con i servizi gRPC.

**Archivio di codice**

Il codice per questo pattern è disponibile nel repository GitHub [grpc-traffic-on-alb-to-eks](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git).

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

### Crea e invia l'immagine Docker del server gRPC su Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea un repository Amazon ECR. | Accedi alla Console di gestione AWS, apri la [console Amazon ECR](https://console.aws.amazon.com/ecr/) e crea un repository Amazon ECR. Per ulteriori informazioni, consulta [Creazione di un repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) nella documentazione di Amazon ECR. Assicurati di registrare l'URL del repository Amazon ECR.<br />Puoi anche creare un repository Amazon ECR con AWS CLI eseguendo il seguente comando:<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Amministratore cloud | 
| Creazione dell'immagine Docker.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingegnere | 
| Invia l'immagine Docker ad Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingegnere | 

### Implementa i manifest Kubernetes nel cluster Amazon EKS
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Modifica i valori nel file manifest di Kubernetes. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingegnere | 
| Distribuisci il file manifest di Kubernetes.  | Distribuisci il `grpc-sample.yaml` file nel cluster Amazon EKS eseguendo il seguente `kubectl` comando: <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps ingegnere | 

### Crea il record DNS per l'FQDN di Application Load Balancer
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Registra il nome di dominio completo per l'Application Load Balancer. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps ingegnere | 

### Test della soluzione
<a name="test-the-solution"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Prova il server gRPC.  | Usa g RPCurl per testare l'endpoint eseguendo il seguente comando:<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>`grpc.example.com`Sostituiscilo con il tuo nome DNS. | DevOps ingegnere | 
| Prova il server gRPC utilizzando un client gRPC.  | Nel client gRPC di `helloworld_client_ssl.py` esempio, sostituisci il nome host di `grpc.example.com` con il nome host utilizzato per il server gRPC.  <br />Il seguente esempio di codice mostra la risposta del server gRPC alla richiesta del 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 />Ciò dimostra che il client può parlare con il server e che la connessione è riuscita. | DevOps ingegnere | 

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


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Rimuovi il record DNS. | Rimuovi il record DNS che rimanda al nome di dominio completo di Application Load Balancer creato in precedenza.  | Amministratore cloud | 
| Rimuovi il sistema di bilanciamento del carico. | Sulla [console Amazon EC2](https://console.aws.amazon.com/ec2/), scegli **Load Balancers, quindi rimuovi il load balancer** creato dal controller Kubernetes per la tua risorsa in ingresso. | Amministratore cloud | 
| Elimina il cluster Amazon EKS. | Elimina il cluster Amazon EKS utilizzando`eksctl`:<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Risorse correlate
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Bilanciamento del carico di rete su Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Gruppi target per i tuoi Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

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

**Esempio di risorsa di ingresso:**

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

**Esempio di risorsa di implementazione:**

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

**Output di esempio**:

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