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.
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
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 é:
Tags consul nomad grpc envoyproxy