As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Implemente um aplicativo baseado em gRPC em um cluster Amazon EKS e acesse-o com um Application Load Balancer
Kirankumar Chandrashekar e Huy Nguyen, Amazon Web Services
Resumo
Esse padrão descreve como hospedar um aplicativo baseado em gRPC em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) e acessá-lo com segurança por meio de um Application Load Balancer.
gRPC
Este padrão demonstra como hospedar uma aplicação baseada em gRPC que é executada em pods do Kubernetes no Amazon EKS. O cliente gRPC se conecta a um Application Load Balancer por meio do protocolo HTTP/2 com uma conexão criptografada. SSL/TLS O Application Load Balancer encaminha o tráfego para o aplicativo gRPC que é executado nos pods do Amazon EKS. O número de pods gRPC pode ser escalado automaticamente com base no tráfego usando o autoescalador horizontal de pods do Kubernetes. O grupo de destino do Application Load Balancer realiza verificações de integridade nos nós do Amazon EKS, avalia se o destino está íntegro e encaminha o tráfego apenas para nós íntegros.
Pré-requisitos e limitações
Pré-requisitos
Uma conta AWS ativa
Docker
, instalado e configurado no Linux, macOS ou Windows AWS Command Line Interface (AWS CLI) versão 2, instalado e configurado no Linux, macOS ou Windows.
eksctl
, instalado e configurado no Linux, macOS ou Windows. kubectl, instalado e configurado para acessar recursos em seu cluster Amazon EKS. Para obter mais informações, consulte Instalação ou atualização do kubectl na documentação do Amazon EKS.g RPCurl
, instalado e configurado. Um cluster do Amazon EKS, novo ou existente. Para obter mais informações, consulte Conceitos básicos do Amazon EKS.
Seu terminal de computador configurado para acessar o cluster do Amazon EKS. Para obter mais informações, consulte Configurar o computador para se comunicar com seu cluster na documentação do Amazon EKS.
Controlador do AWS Load Balancer, provisionado no cluster Amazon EKS.
Um nome de host DNS existente com um SSL ou SSL/TLS certificado válido. É possível obter um certificado para seu domínio usando o AWS Certificate Manager (ACM) ou fazendo upload de um certificado existente para o ACM. Para obter mais informações sobre essas duas opções, consulte Solicitação de um certificado público e Importação de certificados para o AWS Certificate Manager na documentação do ACM.
Arquitetura
O diagrama apresentado a seguir ilustra a arquitetura implementada por este padrão.

O diagrama a seguir mostra um fluxo de trabalho em que o SSL/TLS tráfego é recebido de um cliente gRPC que é transferido para um Application Load Balancer. O tráfego é encaminhado em texto simples para o servidor gRPC porque é proveniente de uma nuvem privada virtual (VPC).

Ferramentas
Serviços da AWS
O AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
O Elastic Load Balancing (ELB) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, é possível distribuir o tráfego entre instâncias, contêineres e endereços IP do Amazon Elastic Compute Cloud (Amazon EC2) em uma ou mais Zonas de disponibilidade.
O Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
O Amazon Elastic Kubernetes Service (Amazon EKS) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.
Ferramentas
O eksctl
é uma ferramenta simples de CLI para criar clusters no Amazon EKS. O Kubectl
: é um utilitário de linha de comando para executar comandos em clusters do Kubernetes. O AWS Load Balancer Controller ajuda a gerenciar AWS Elastic Load Balancers para um cluster do Kubernetes.
g RPCurl
é uma ferramenta de linha de comando que ajuda você a interagir com os serviços gRPC.
Repositório de código
O código desse padrão está disponível no repositório GitHub grpc-traffic-on-alb-to-eks
Épicos
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Crie um repositório do Amazon ECR. | Faça login no Console de Gerenciamento da AWS, abra o console do Amazon ECR Você também pode criar um repositório Amazon ECR com a AWS CLI executando o seguinte comando:
| Administrador de nuvem |
Crie a imagem do Docker. |
| DevOps engenheiro |
Envie a imagem do Docker para o Amazon ECR. |
| DevOps engenheiro |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Modifique os valores no arquivo de manifesto do Kubernetes. |
| DevOps engenheiro |
Implemente o arquivo manifesto do Kubernetes. | Implante o arquivo
| DevOps engenheiro |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Registre o FQDN do Application Load Balancer |
| DevOps engenheiro |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Teste o servidor gRPC. | Use g RPCurl para testar o endpoint executando o seguinte comando:
notaSubstitua | DevOps engenheiro |
Teste o servidor gRPC usando um cliente gRPC. | No cliente gRPC de amostra O exemplo de código a seguir mostra a resposta do servidor gRPC para a solicitação do cliente:
Isso mostra que o cliente pode conversar com o servidor e que a conexão foi bem-sucedida. | DevOps engenheiro |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Remova o registro de DNS. | Remova o registro de DNS que direciona para o FQDN do Application Load Balancer que você criou anteriormente. | Administrador de nuvem |
Remova o balanceador de carga. | No console do Amazon EC2 | Administrador de nuvem |
Exclua o cluster do Amazon EKS. | Exclua o cluster do Amazon EKS usando o
| AWS DevOps |
Recursos relacionados
Mais informações
Exemplo de recurso de entrada:
--- 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
Exemplo de recurso de implantação:
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
Exemplo de saída:
NAME CLASS HOSTS Address PORTS AGE grpcserver <none> <DNS-HostName> <ELB-address> 80 27d