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
Creato da Kirankumar Chandrashekar (AWS) e Huy Nguyen (AWS)
Archivio del grpc-traffic-on-alb codice: | Ambiente: PoC o pilota | Tecnologie: contenitori e microservizi; Distribuzione di contenuti; App Web e mobili |
Carico di lavoro: tutti gli altri carichi di lavoro | Servizi AWS: Amazon EKS; Elastic Load Balancing (ELB) |
Riepilogo
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
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 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
Prerequisiti
Un account AWS attivo.
Docker
, installato e configurato su Linux, macOS o Windows. AWS Command Line Interface (AWS CLI) versione 2, installata e configurata su Linux, macOS o Windows.
eksctl
, 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 di Amazon EKS.grpCurl
, installato e configurato. Un cluster Amazon EKS nuovo o esistente. Per ulteriori informazioni, consulta Guida introduttiva ad Amazon EKS.
Il terminale del computer è configurato per accedere al cluster Amazon EKS. Per ulteriori informazioni, consulta Configurare il computer per comunicare con il cluster nella documentazione di Amazon EKS.
AWS Load Balancer Controller, fornito nel cluster Amazon EKS.
Un nome host DNS esistente con un certificato SSL o SSL/TLS valido. 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 e Importazione di certificati in AWS Certificate Manager nella documentazione ACM.
Architettura
Il diagramma seguente mostra l'architettura implementata da questo modello.
Il diagramma seguente mostra un flusso di lavoro in cui il traffico SSL/TLS viene ricevuto da un client gRPC che esegue l'offload su un Application Load Balancer. Il traffico viene inoltrato in testo semplice al server gRPC perché proviene da un cloud privato virtuale (VPC).
Strumenti
Servizi AWS
AWS Command Line Interface (AWS CLI) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella shell della riga di comando.
Elastic Load Balancing 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) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
Amazon Elastic Kubernetes Service (Amazon 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
è un semplice strumento CLI per la creazione di cluster su Amazon EKS. kubectl
è un'utilità da riga di comando per eseguire comandi su cluster Kubernetes. AWS Load Balancer Controller ti aiuta a gestire AWS Elastic Load Balancers per un cluster Kubernetes.
grpCURL
è uno strumento da riga di comando che consente di interagire con i servizi gRPC.
Deposito di codice
Il codice per questo pattern è disponibile nel repository GitHub grpc-traffic-on-alb-to-eks
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea un repository Amazon ECR. | Accedi alla Console di gestione AWS, apri la console Amazon ECR Puoi anche creare un repository Amazon ECR con AWS CLI eseguendo il seguente comando:
| Amministratore cloud |
Creazione dell'immagine Docker. |
| DevOps ingegnere |
Invia l'immagine Docker ad Amazon ECR. |
| DevOps ingegnere |
Attività | Descrizione | Competenze richieste |
---|---|---|
Modifica i valori nel file manifest di Kubernetes. |
| DevOps ingegnere |
Distribuisci il file manifest di Kubernetes. | Distribuisci il
| DevOps ingegnere |
Attività | Descrizione | Competenze richieste |
---|---|---|
Registra il nome di dominio completo per l'Application Load Balancer. |
| DevOps ingegnere |
Attività | Descrizione | Competenze richieste |
---|---|---|
Prova il server gRPC. | Usa grpCurl per testare l'endpoint eseguendo il seguente comando:
Nota: sostituiscilo | DevOps ingegnere |
Prova il server gRPC utilizzando un client gRPC. | Nel client gRPC di Il seguente esempio di codice mostra la risposta del server gRPC alla richiesta del client:
Ciò dimostra che il client può parlare con il server e che la connessione è riuscita. | DevOps ingegnere |
Attività | Descrizione | 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 | Amministratore cloud |
Elimina il cluster Amazon EKS. | Elimina il cluster Amazon EKS utilizzando
| AWS DevOps |
Risorse correlate
Informazioni aggiuntive
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> alb.ingress.kubernetes.io/healthcheck-protocol: HTTP 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