Configurar serviços TCP

O Traffic Director com serviços TCP e TCPRoute é semelhante à configuração do proxy sidecar do Envoy com serviços HTTP. As exceções são que o serviço de back-end fornece um serviço TCP e o roteamento é baseado em parâmetros TCP/IP, e não no protocolo HTTP.

Recurso Mesh com recurso TCPRoute
Mesh recurso comTCPRoute recurso (clique para ampliar)

Antes de começar

Verifique se a implantação atende aos pré-requisitos descritos nos guias a seguir:

Configurar o recurso Mesh

  1. Em um arquivo chamado mesh.yaml, crie a especificação de recurso mesh.

    name: sidecar-mesh
    
  2. Use o arquivo mesh.yaml para criar o recurso mesh.

    gcloud network-services meshes import sidecar-mesh \
      --source=mesh.yaml \
      --location=global
    

Configurar o servidor TCP

Esta parte do guia não é específica das novas APIs e usa recursos atuais de serviço de back-end, verificação de integridade e MIG.

Para fins de demonstração, crie um serviço de back-end com VMs com escalonamento automático usando grupos de instâncias gerenciadas que atendam a um serviço TCP de teste na porta 10000.

  1. Crie um modelo de instância de VM do Compute Engine com um serviço de teste na porta 10000.

    gcloud compute instance-templates create tcp-td-vm-template \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=allow-health-checks \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install netcat -y
    while true;
      do echo 'Hello from TCP service' | nc -l -s 0.0.0.0 -p 10000;
    done &"
    
  2. Crie o grupo gerenciado de instâncias com base no modelo.

    gcloud compute instance-groups managed create tcp-td-mig-us-east1 \
      --zone=ZONE \
      --size=1 \
      --template=tcp-td-vm-template
    
  3. Defina as portas nomeadas no grupo gerenciado de instâncias criado como porta 10.000.

    gcloud compute instance-groups set-named-ports tcp-td-mig-us-east1 
    --zone=ZONE
    --named-ports=tcp:10000

  4. Crie uma verificação de integridade.

    gcloud compute health-checks create tcp tcp-helloworld-health-check --port 10000
    
  5. 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 tcp-vm-allow-health-checks \
       --network default \
       --action allow \
       --direction INGRESS \
       --source-ranges=35.191.0.0/16,130.211.0.0/22 \
       --target-tags allow-health-checks \
       --rules tcp:10000
    
  6. Crie um serviço de back-end global com um esquema de balanceamento de carga de INTERNAL_SELF_MANAGED e anexe a verificação de integridade ao serviço de back-end. No exemplo, usamos o grupo de instâncias gerenciadas que executa o serviço TCP de amostra criado anteriormente.

    gcloud compute backend-services create tcp-helloworld-service \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --protocol=TCP \
        --health-checks tcp-helloworld-health-check
    
  7. Adicione o grupo de instâncias gerenciadas ao serviço de back-end.

    gcloud compute backend-services add-backend tcp-helloworld-service \
      --instance-group tcp-td-mig-us-east1 \
      --instance-group-zone=ZONE \
      --global
    

Configure o roteamento com TCPRoute

Nesta seção, você configura o roteamento.

  1. Em um arquivo chamado tcp_route.yaml, crie a especificação TcpRoute.

    É possível usar $PROJECT_ID ou $PROJECT_NUMBER.

    name: helloworld-tcp-route
    meshes:
    - projects/$PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    - action:
        destinations:
        - serviceName: projects/$PROJECT_NUMBER/locations/global/backendServices/tcp-helloworld-service
      matches:
      - address: '10.0.0.1/32'
        port: '10000'
    
  2. Usando a especificação tcp_route.yaml, crie o recurso TcpRoute.

    gcloud network-services tcp-routes import helloworld-tcp-route \
      --source=tcp-route.yaml \
      --location=global
    

Criar um cliente TCP com um sidecar do Envoy

  1. Crie um modelo de instância e uma VM com o Envoy conectado ao Traffic Director.

    gcloud beta compute instance-templates create td-vm-client-template \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --service-proxy=enabled,mesh=sidecar-mesh \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install netcat -y"
    
    gcloud compute instances create td-vm-client \
      --zone=ZONE \
      --source-instance-template td-vm-client-template
    
  2. Faça login na VM criada.

    gcloud compute ssh td-vm-client
    
  3. Verifique a conectividade com os serviços de teste criados usando o utilitário netcat.

    echo 'Hi TCP Service' | nc 10.0.0.1 10000
    

O serviço de teste retornará a frase Hello from TCP service. Você também verá todo o texto digitado pelo serviço netcat em execução na VM remota.