Como configurar o roteamento dinâmico de solicitações de gRPC com o enviado, nômade e cônsul

1

Usamos nômade para implantar nossos aplicativos, que fornecem gRPC endpoints - como tarefas. As tarefas são então registradas no Cônsul , usando Sub-rotina de serviço do nomad .

O roteamento para nossos aplicativos é obtido com o proxy de envoy . Estamos executando instâncias centrais de envio carregadas em IP 10.1.2.2 .

A decisão para qual endpoint / tarefa rotear está atualmente baseada no cabeçalho host e todas as tarefas são registradas como um serviço em <$JOB>.our.cloud . Isso leva a dois problemas.

  1. Ao acessar o serviço, o nome DNS deve ser registrado para o IP do balanceador de carga, o que leva a /etc/hosts de entradas como

    10.1.2.2 serviceA.our.cloud serviceB.our.cloud serviceC.our.cloud
    

    Esse problema é parcialmente mitigado usando dnsmasq , mas ainda é um pouco chato quando adicionamos novos serviços

  2. Não é possível ter vários serviços em execução ao mesmo tempo que fornecem o mesmo serviço gRPC. Se nós, por exemplo decidir testar uma nova implementação de um serviço, precisamos executá-lo no mesmo job sob o mesmo nome e todos os serviços definidos em um arquivo de serviço gRPC precisam ser implementados.

Uma possível solução que estamos discutindo é usar a regra tags do service para adicionar tags que definem os serviços gRPC fornecidos, por exemplo:

service {
  tags = ["grpc-my.company.firstpackage/ServiceA", "grpc-my.company.secondpackage/ServiceB"]
}

Mas isso é desencorajado pelo Cônsul :

Dots are not supported because Consul internally uses them to delimit service tags.

Agora estávamos pensando em fazer isso com tags como grpc-my-company-firstpackage__ServiceA , ... Isso parece realmente nojento: - (

Então minha pergunta é:

  • Alguém já fez algo assim?
  • Em caso afirmativo, quais são as recomendações sobre como rotear para serviços gRPC que são descobertos automaticamente com o Consul?
  • Alguém tem outras idéias ou insights sobre isso?
  • Como isso é realizado em, e. istio ?
por DaDaDom 14.02.2018 / 16:47

0 respostas