Visão geral

O Cloud Service Mesh oferece recursos de rede de serviços aos aplicativos, incluindo gerenciamento avançado de tráfego, observabilidade e segurança. No entanto, configurar e operar uma malha de serviço é uma tarefa complexa. Esta página descreve como configurar o Cloud Service Mesh com as APIs do Kubernetes Gateway. Essas APIs foram projetadas para simplificar e melhorar a experiência geral de configuração da malha.

As APIs do Kubernetes Gateway para malha permitem configurar o Cloud Service Mesh para implantações de proxy gRPC e Envoy sem proxy. O modelo de API Gateway para malha oferece vários benefícios importantes:

  • As APIs Gateway fornecem uma interface única e consistente para gerenciar o tráfego de entrada (norte-sul) e de malha de serviço (leste-oeste) no cluster do Kubernetes.
  • As malhas de serviço permitem padrões avançados de roteamento de tráfego. As APIs Gateway permitem projetar e gerenciar regras de roteamento complexas.
  • Com as APIs Gateway, os desenvolvedores podem se concentrar na definição de regras e políticas de roteamento de alto nível para o microsserviço sem precisar de conhecimento detalhado da implementação da malha de serviço subjacente.
  • A API foi projetada para ser extensível, permitindo melhorias futuras e suporte para novos protocolos e casos de uso.
  • As APIs Gateway têm forte apoio da comunidade e são compatíveis com um ecossistema crescente de provedores e ferramentas de malha de serviço.

O trabalho da iniciativa GAMMA para oferecer suporte a casos de uso de malha de serviço faz parte do canal padrão desde a versão 1.1.0 e é considerado GA.

A especificação propõe que um proprietário do aplicativo configure regras de tráfego para um serviço de malha configurando um Route resource (às vezes chamado de xRoute) com um recurso Service do Kubernetes como parentRef. A abordagem depende das funções "front-end" e "back-end" do Kubernetes Service, conforme definido em GEP-1324: Service Mesh in Gateway API, em que a função "front-end" é usada como parentRef e a função "back-end" de Service é usada como backendRef. A implementação em conformidade usa o nome Service para corresponder ao tráfego e aos endpoints backendRef para os endereços IP canônicos.

API Gateway para malha

A API Gateway, um projeto do Kubernetes, se concentra no roteamento das camadas 4 e 7 no Kubernetes. Ela sucede as APIs Entrada, Load Balancing e Service Mesh. Projetada para ser versátil, descritiva e centrada em papéis, as configurações estão principalmente na camada de roteamento. Recursos específicos do protocolo, como HTTPRoute e GRPCRoute, permitem roteamento avançado de entrada e malha.

A iniciativa GAMMA (API Gateway para malha de serviço) define como a API Gateway também pode ser usada para tráfego entre serviços ou leste/oeste no mesmo cluster. O GAMMA tem como objetivo estabelecer como usar a API Gateway para configurar uma malha de serviço com modificações mínimas na API Gateway, mantendo a natureza orientada a papéis. O GAMMA também enfatiza a importância de promover a consistência entre várias implementações de malha de serviço da API Gateway, independentemente da tecnologia ou proxy subjacente.

O GAMMA aproveita os pontos de extensibilidade atuais na especificação da API Gateway, sem exigir mudanças na API ou novos recursos. Isso é feito estendendo as definições de recursos de rota (GRPCRoute ou HTTPRoute na API Gateway) para sinalizar o caso de uso da malha de serviço, especificamente associando os recursos de rota aos recursos de serviço, conforme descrito em API Gateway para malha de serviço.

O exemplo a seguir ilustra o caso de uso da malha no uso de HTTPRoute:

apiVersion:  gateway.networking.k8s.io
kind: HTTPRoute
metadata:
  name: echo-route
spec:
  parentRefs:
  - kind: Service
    group: ""
    name: echo-service
  rules:
  - backendRefs:
    - name: echo-v1
      port: 80
      weight: 9
  - backendRefs:
    - name: echo-v2
      port: 80
      weight: 1

Diagrama do HTTPRoute

A HTTPRoute faz referência a um Service como parentRef, o que indica que a rota HTTPRoute está configurada para o caso de uso da malha de serviço. No exemplo anterior, o serviço echo-service é especificado como parentRef, o que significa que a HTTPRoute está anexada ao front-end do echo-service. Qualquer tráfego enviado ao echo-service por um cliente é roteado de acordo com a rota HTTPRoute.

GRPCRoute é outro recurso da API Kubernetes Gateway, usado para rotear o tráfego gRPC para serviços do Kubernetes. Os usuários optam por usar GRPCRoute em vez de HTTPRoute quando querem rotear especificamente o tráfego gRPC e aproveitar os recursos personalizados para gRPC, como o método gRPC e a correspondência de serviço.

O exemplo a seguir ilustra o uso de GRPCRoute:

apiVersion:  gateway.networking.k8s.io
kind: GRPCRoute
metadata:
  name: echo-route
spec:
  parentRefs:
  - kind: Service
    group: ""
    name: echo-service
  rules:
   - matches:
    - method:
        service:echo_basic.grpcecho.GrpcEcho
        method: Echo
    backendRefs:
    - name: grpc-infra-backend-v1
      port: 8080
  - matches:
    - method:
        service:echo_basic.grpcecho.GrpcEcho
        method: EchoTwo
    backendRefs:
    - name: grpc-infra-backend-v2
      port: 8080

Diagrama de GRPCRoute

Assim como o exemplo HTTPRoute, essa GRPCRoute é configurada para casos de uso de malha de serviço. Qualquer tráfego enviado para xds:///echo-service.default.svc.cluster.local:8080 por um cliente gRPC sem proxy é roteado de acordo com a rota GRPCRoute. As regras de rota neste exemplo correspondem a um método gRPC e roteiam o tráfego para um backendRef específico. As GRPCRoutes também podem ser usadas para rotear solicitações de clientes com proxy com injeções de arquivo secundário, como o Envoy, quando o prefixo xds:/// é descartado.

Diagrama de malha de cluster único

A seguir