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.

Proxies Envoy com recursos HTTPRoute e Mesh
Proxies Envoy comHTTPRoute eMesh recursos (clique para ampliar)

Verifique se você seguiu os pré-requisitos nos seguintes guias:

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.

  1. Crie a especificação de recurso Mesh e salve-a em um arquivo chamado mesh.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.

  1. 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.

  1. Crie o modelo de instância com um serviço HTTP helloworld na porta 80.

    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"
    
  2. 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
    
  3. Crie uma verificação de integridade.

    gcloud compute health-checks create http http-helloworld-health-check
    
  4. 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
    
  5. 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
    
  6. 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.

  1. Crie a especificação HTTPRoute e salve-a em um arquivo chamado http_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"
    
  2. Crie o recurso HTTPRoute usando a especificação no arquivo http_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.

  1. 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
    
  2. 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
    
  3. Faça login na VM.

    gcloud compute ssh td-vm-client
    
  4. 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.