Configurar servicios TCP

En esta guía se explica cómo configurar Cloud Service Mesh para usar servicios TCP y recursos TCPRoute.

Cloud Service Mesh con servicios TCP y TCPRoute es similar a la configuración del proxy sidecar de Envoy con servicios HTTP. Las excepciones son que el servicio de backend proporciona un servicio TCP y el enrutamiento se basa en parámetros TCP/IP en lugar de en el protocolo HTTP.

Recurso Mesh con recurso TCPRoute
Recurso Mesh con recurso TCPRoute (haz clic en la imagen para ampliarla)

Antes de empezar

Asegúrate de completar las tareas descritas en el artículo Preparar la configuración con Envoy y cargas de trabajo sin proxy.

Configurar el recurso Mesh

  1. En un archivo llamado mesh.yaml, cree la especificación de recursos mesh.

    name: sidecar-mesh
    
  2. Usa el archivo mesh.yaml para crear el recurso mesh.

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

Configurar el servidor TCP

Esta parte de la guía no es específica de las nuevas APIs y utiliza los recursos de servicio backend, comprobación de estado y MIG.

Para hacer una demostración, crea un servicio de backend con VMs autoescaladas mediante grupos de instancias gestionados que sirvan un servicio TCP de prueba en el puerto 10000.

  1. Crea una plantilla de instancia de VM de Compute Engine con un servicio de prueba en el puerto 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. Crea un grupo de instancias gestionadas basado en la plantilla.

    gcloud compute instance-groups managed create tcp-td-mig-us-east1 \
      --zone=ZONE \
      --size=1 \
      --template=tcp-td-vm-template
    
  3. Define el puerto 10000 en los puertos con nombre del grupo de instancias gestionado que has creado.

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

  4. Crea una comprobación del estado.

    gcloud compute health-checks create tcp tcp-helloworld-health-check --port 10000
    
  5. Crea una regla de cortafuegos para permitir las conexiones de comprobación del estado entrantes a las instancias de tu red.

    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. Crea un servicio de backend global con un esquema de balanceo de carga INTERNAL_SELF_MANAGED y asocia la comprobación de estado al servicio de backend. En el ejemplo se usa el grupo de instancias gestionado que ejecuta el servicio TCP de muestra que has creado 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. Añade el grupo de instancias gestionado al servicio de backend.

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

Configurar el enrutamiento con TCPRoute

En esta sección, configurará el enrutamiento.

  1. En un archivo llamado tcp_route.yaml, crea la especificación TcpRoute.

    Puedes usar $PROJECT_ID o $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. Con la especificación tcp_route.yaml, crea el recurso TcpRoute.

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

Crear un cliente TCP con un sidecar de Envoy

  1. Crea una plantilla de instancia y, a continuación, una VM con Envoy que esté conectada a Cloud Service Mesh.

    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. Inicia sesión en la VM que has creado.

    gcloud compute ssh td-vm-client
    
  3. Verifica la conectividad con los servicios de prueba que has creado con la utilidad netcat.

    echo 'Hi TCP Service' | nc 10.0.0.1 10000
    

El servicio de prueba debe devolver la frase Hello from TCP service. También deberías ver el texto que escribas devuelto por el servicio netcat que se ejecuta en la máquina virtual remota.

Siguientes pasos

  • Para obtener información sobre cómo enumerar los recursos de ruta asociados a un recurso Mesh o Gateway, consulta Enumerar recursos de Route.