Configuração do Traffic Director para proxies Envoy com serviços HTTP
Neste guia, demonstramos como configurar o Traffic Director com uma malha de serviço
baseada em proxy Envoy, serviços HTTP e recursos Mesh
e HTTPRoute
.
HTTPRoute
eMesh
recursos (clique para ampliar)Verifique se você seguiu os pré-requisitos nos seguintes guias:
- Preparar a configuração do Traffic Director com o Envoy
- Guias de configuração do roteamento de serviços do Traffic Director
Configurar o recurso Mesh
Os proxies do Envoy em execução como arquivos secundários recebem a configuração de roteamento de serviço
do Traffic Director. O nome Mesh
é a chave que o proxy secundário usa para solicitar a configuração associada ao recurso Mesh
.
O Traffic Director fornece a configuração de roteamento ao proxy. O proxy secundário
direciona o tráfego para o serviço de back-end correto, dependendo de parâmetros de solicitação, como nome do host, cabeçalhos e outros configurados nos
recursos Route
.
Crie a especificação de recurso
Mesh
e salve-a em um arquivo chamadomesh.yaml
.name: sidecar-mesh interception_port: 15001
A porta de interceptação assumirá 15001
como padrão se você não especificá-la no arquivo mesh.yaml
.
Crie o recurso
Mesh
usando a especificação mesh.yaml.gcloud alpha network-services meshes import sidecar-mesh \ --source=mesh.yaml \ --location=global
Depois que o recurso Mesh
é criado, o Traffic Director está pronto para disponibilizar a
configuração, mas como ainda não há serviços definidos, a configuração
está vazia. A próxima etapa é definir seus serviços e anexos.
Configurar o servidor HTTP
Para fins de demonstração, crie um serviço de back-end com VMs com escalonamento automático usando grupos de instâncias gerenciadas como back-ends. As VMs exibem uma frase hello world
usando o protocolo HTTP na porta 80
.
Crie o modelo de instância com um serviço HTTP
helloworld
na porta80
.gcloud compute instance-templates create td-httpd-vm-template \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --tags=http-td-server \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata=startup-script="#! /bin/bash sudo apt-get update -y sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype <html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
Crie o grupo gerenciado de instâncias com base no modelo.
gcloud compute instance-groups managed create http-td-mig-us-east1 \ --zone=${ZONE} \ --size=2 \ --template=td-httpd-vm-template
Crie uma verificação de integridade.
gcloud compute health-checks create http http-helloworld-health-check
Crie uma regra de firewall para permitir conexões de verificação de integridade de entrada com instâncias na sua rede.
gcloud compute firewall-rules create http-vm-allow-health-checks \ --network=default \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=35.191.0.0/16,209.85.152.0/22,209.85.204.0/22 \ --target-tags=http-td-server \ --rules=tcp:80
Crie um serviço de back-end global com um esquema de balanceamento de carga de
INTERNAL_SELF_MANAGED
e adicione a verificação de integridade.gcloud compute backend-services create http-helloworld-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks http-helloworld-health-check
Adicione o grupo de instâncias gerenciadas ao serviço de back-end. No exemplo a seguir, usamos o grupo de instâncias gerenciadas criado anteriormente. As VMs no grupo de instâncias gerenciadas executam o serviço HTTP de amostra que você criou.
gcloud compute backend-services add-backend http-helloworld-service \ --instance-group=http-td-mig-us-east1 \ --instance-group-zone=${ZONE} \ --global
Configure o roteamento com HTTPRoute
O recurso e os serviços do Mesh
estão configurados. Conecte-os a um recurso HTTPRoute que associa um nome de host a um serviço de back-end.
Crie a especificação
HTTPRoute
e salve-a em um arquivo chamadohttp_route.yaml
.name: helloworld-http-route hostnames: - helloworld-gce meshes: - projects/$PROJECT_NUMBER/locations/global/meshes/sidecar-mesh rules: - action: destinations: - serviceName: "projects/$PROJECT_NUMBER/locations/global/backendServices/http-helloworld-service"
Crie o recurso
HTTPRoute
usando a especificação no arquivohttp_route.yaml
.gcloud alpha network-services http-routes import helloworld-http-route \ --source=http_route.yaml \ --location=global
O Traffic Director agora está configurado para balancear a carga do tráfego dos serviços especificados no recurso HTTPRoute nas VMs no grupo de instâncias gerenciadas.
Criar um cliente HTTP com um arquivo secundário do Envoy
É possível verificar a implantação criando uma VM cliente com um proxy sidecar do Envoy
que solicita a configuração do Traffic Director criada
anteriormente. O parâmetro mesh
no comando gcloud
se refere ao recurso Mesh
que você já criou.
Crie um modelo de instância.
gcloud beta compute instance-templates create td-vm-client-template \ --image-family=debian-10 \ --image-project=debian-cloud \ --service-proxy=enabled,mesh=sidecar-mesh
Crie uma VM com um proxy Envoy conectado ao Traffic Director.
gcloud compute instances create td-vm-client \ --zone=${ZONE} \ --source-instance-template td-vm-client-template
Faça login na VM.
gcloud compute ssh td-vm-client
Execute o comando
curl
para verificar a conectividade HTTP com os serviços de teste.curl -H "Host: helloworld-gce" http://10.0.0.1/
O comando retornará uma resposta de uma das VMs no grupo de instâncias gerenciadas com o nome do host impresso no console.