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
Criado por Kirankumar Chandrashekar (AWS) e Huy Nguyen (AWS)
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
Esse padrão mostra como hospedar um aplicativo baseado em gRPC executado 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-alvo do Application Load Balancer realiza verificações de saúde nos nós do Amazon EKS, avalia se o destino está íntegro e encaminha o tráfego somente 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 Amazon EKS novo ou existente. Para obter mais informações, consulte Introdução ao Amazon EKS.
Seu terminal de computador configurado para acessar o cluster Amazon EKS. Para obter mais informações, consulte Configurar seu 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 certificado SSL ou SSL/TLS 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 a seguir mostra a arquitetura implementada por esse padrão.

O diagrama a seguir mostra um fluxo de trabalho em que o tráfego SSL/TLS é 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, você pode 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
eksctl
é uma ferramenta CLI simples 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 | Descrição | Habilidades necessárias |
---|---|---|
Crie um repositório do Amazon ECR. | Faça login no AWS Management Console, 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 | Descrição | Habilidades necessárias |
---|---|---|
Modifique os valores no arquivo de manifesto do Kubernetes. |
| DevOps engenheiro |
Implemente o arquivo manifesto do Kubernetes. | Implante o
| DevOps engenheiro |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Registre o FQDN do Application Load Balancer |
| DevOps engenheiro |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Teste o servidor gRPC. | Use g RPCurl para testar o endpoint executando o seguinte comando:
nota
| DevOps engenheiro |
Teste o servidor gRPC usando um cliente gRPC. | No 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 | Descrição | Habilidades necessárias |
---|---|---|
Remova o registro DNS. | Remova o registro DNS que aponta para o FQDN do Application Load Balancer que você criou anteriormente. | Administrador de nuvem |
Remova o balanceador de carga. | No EC2 console da Amazon | Administrador de nuvem |
Exclua o cluster Amazon EKS. | Exclua o cluster Amazon EKS usando
| 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