Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Implemente una aplicación basada en gRPC en un clúster de Amazon EKS y acceda a ella con un Equilibrador de carga de aplicación
Kirankumar Chandrashekar y Huy Nguyen, Amazon Web Services
Resumen
Este patrón describe cómo alojar una aplicación basada en gRPC en un clúster de Amazon Elastic Kubernetes Service (Amazon EKS) y cómo acceder a ella de forma segura a través de un Equilibrador de carga de aplicación.
gRPC
Este patrón le muestra cómo alojar una aplicación basada en gRPC que se ejecuta como pods de Kubernetes en Amazon EKS. El cliente gRPC se conecta a un Application Load Balancer a través del protocolo HTTP/2 con una conexión cifrada. SSL/TLS El Equilibrador de carga de aplicación reenvía el tráfico a la aplicación gRPC que se ejecuta en los pods de Amazon EKS. La cantidad de pods de gRPC se puede escalar automáticamente en función del tráfico mediante el escalador automático de pods horizontales de Kubernetes. El grupo de destino del equilibrador de carga de aplicación realiza comprobaciones de estado en los nodos de Amazon EKS, evalúa si el destino está en buen estado y solo reenvía el tráfico a los nodos en buen estado.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa.
Docker
, instalado y configurado en Linux, macOS o Windows. Interfaz de la línea de comandos de AWS (AWS CLI) versión 2, instalada y configurada en Linux, macOS o Windows.
eksctl
instalado y configurado en Linux, macOS o Windows. kubectl, instalado y configurado para acceder a los recursos de su clúster de Amazon EKS. Para más información, consulte Instalar o actualizar kubectl en la documentación de Amazon EKS.g RPCurl
, instalado y configurado. Un clúster existente o nuevo de Amazon EKS. Para obtener más información, consulte Getting started with Amazon EKS.
Su terminal de equipo está configurado para acceder al clúster de Amazon EKS. Para obtener más información, consulte Configuración del equipo para que se comunique con el clúster en la documentación de Amazon EKS.
Controlador del equilibrador de carga de AWS, aprovisionado en el clúster de Amazon EKS.
Un nombre de host DNS existente con un SSL/TLS certificado o SSL válido. Puede obtener un certificado para su dominio mediante AWS Certificate Manager (ACM) o cargando un certificado existente en ACM. Para obtener más información sobre estas dos opciones, consulte Solicitud de un certificado público e Importación de certificados a AWS Certificate Manager en la documentación de ACM.
Arquitectura
En el siguiente diagrama, se muestra la arquitectura implementada por este patrón.

El siguiente diagrama muestra un flujo de trabajo en el que SSL/TLS el tráfico se recibe de un cliente gRPC que se descarga a un Application Load Balancer. El tráfico se reenvía en texto sin formato al servidor gPC porque proviene de una nube privada virtual (VPC).

Tools (Herramientas)
Servicios de AWS
La Interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en el intérprete de comandos de la línea de comandos.
Elastic Load Balancing permite distribuir el tráfico entrante de las aplicaciones o de la red entre varios destinos. Así, por ejemplo, puede distribuir el tráfico a través de instancias de Amazon Elastic Compute Cloud (Amazon EC2), contenedores y direcciones IP de una o varias zonas de disponibilidad.
Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
Amazon Elastic Kubernetes Service (Amazon EKS) lo ayuda a ejecutar Kubernetes en AWS sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes.
Herramientas
eksctl
es una herramienta de CLI sencilla para crear clústeres de Amazon EKS. kubectl
: es una utilidad de línea de comandos para la ejecución de comandos en clústeres de Kubernetes. El controlador del equilibrador de carga de AWS le ayuda a administrar los Elastic Load Balancer de AWS para un clúster de Kubernetes.
g RPCurl
es una herramienta de línea de comandos que te ayuda a interactuar con los servicios de gRPC.
Repositorio de código
El código de este patrón está disponible en el repositorio GitHub grpc-traffic-on-alb-to-eks
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Cree un repositorio de Amazon ECR. | Inicie sesión en la Consola de administración de AWS, abra la consola de Amazon ECR También puede crear un repositorio de Amazon ECR con la CLI de AWS ejecutando el siguiente comando:
| Administrador de la nube |
Cree la imagen de Docker. |
| DevOps ingeniero |
Envíe la imagen de Docker a Amazon ECR. |
| DevOps ingeniero |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Modifique los valores del archivo de manifiesto de Kubernetes. |
| DevOps ingeniero |
Implemente el archivo de manifiesto de Kubernetes. | Para implementar el archivo
| DevOps ingeniero |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Registre el FQDN para el Equilibrador de carga de aplicación. |
| DevOps ingeniero |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Pruebe el servidor gRPC. | Use g RPCurl para probar el punto final ejecutando el siguiente comando:
notaSustituya | DevOps ingeniero |
Pruebe el servidor gRPC con un cliente gRPC. | En el ejemplo de cliente gRPC de El siguiente ejemplo de código muestra la respuesta del servidor gRPC a la solicitud del cliente:
Esto demuestra que el cliente puede hablar con el servidor y que la conexión se ha realizado correctamente. | DevOps ingeniero |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Elimine el registro de DNS. | Elimine el registro DNS que apunta al FQDN del Equilibrador de carga de aplicación que creó anteriormente. | Administrador de la nube |
Elimine el equilibrador de carga. | En la consola Amazon EC2 | Administrador de la nube |
Elimine el clúster de Amazon EKS. | Elimine el clúster de Amazon EKS mediante
| AWS DevOps |
Recursos relacionados
Información adicional
Ejemplo de recurso de ingreso:
--- 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
Ejemplo de recurso de implementación:
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
Resultado de ejemplo:
NAME CLASS HOSTS Address PORTS AGE grpcserver <none> <DNS-HostName> <ELB-address> 80 27d