Configura la integración con el Directorio de servicios

En esta guía, se da por sentado que tienes una implementación de Cloud Service Mesh en ejecución y que registraste al menos un servicio con el Directorio de servicios. Las instrucciones de configuración se aplican si usas Envoy o gRPC sin proxy.

Para usar el Directorio de servicios y Cloud Service Mesh, el primer paso es publicar tu servicio en el Directorio de servicios. Consulta la información sobre cómo publicar un servicio en el Directorio de servicios o la documentación del Directorio de servicios para obtener información general.

Después de registrar el servicio en el Directorio de servicios, puedes crear una vinculación del servicio mediante los recursos de la API de Cloud Service Mesh. Debes crear un servicio de backend dedicado a la integración con el Directorio de servicios, ya que un servicio de backend que hace referencia a vinculaciones de servicios no puede tener backends ni una verificación de estado asociada.

Requisitos de la regla de host y la regla de reenvío de Cloud Service Mesh con las APIs de balanceo de cargas

Cuando configuras Cloud Service Mesh para usarlo con el Directorio de servicios Si usas las APIs de balanceo de cargas más antiguas, sigue estos lineamientos:

  1. Asegúrate de que la regla de reenvío de Cloud Service Mesh use la dirección IP virtual (VIP) 0.0.0.0.
  2. Si tienes una zona privada, asegúrate de que la regla de host del mapa de URL coincida con el nombre de DNS que el Directorio de servicios configura en tu zona privada de Cloud DNS.

Si no sigues estos lineamientos, las solicitudes salientes de tus aplicaciones y es probable que fallen.

Configura el extremo de la API de network-services

Antes de crear y usar un servicio de backend, asegúrate de que el extremo de la API de network-services esté configurado para que se haga referencia de forma correcta a los recursos de vinculación del servicio en los recursos network-services. Configura el extremo de la API de network-services con el siguiente comando.

export CLOUDSDK_API_ENDPOINT_OVERRIDES_NETWORKSERVICES="https://networkservices.googleapis.com/"

Requisitos de roles y permisos

Asegúrate de tener los siguientes permisos y roles antes de crear la implementación de Cloud Service Mesh.

Roles y permisos de vinculación del servicio

En esta sección, no se analizan los permisos de propietario, editor y visualizador a nivel de proyecto. Se describen los permisos y roles necesarios para crear, leer, actualizar y borrar recursos.

Acción Permiso Funciones
Crear una vinculación del servicio. networkservices.serviceBindings.create Administrador de red
Obtener una vinculación del servicio. networkservices.serviceBindings.get Administrador de red, visualizador de red
Enumerar las vinculaciones del servicio en un proyecto de Google Cloud. networkservices.serviceBindings.list Administrador de red, visualizador de red
Actualizar las vinculaciones del servicio. networkservices.serviceBindings.update Administrador de red
Borrar las vinculaciones del servicio. networkservices.serviceBindings.delete Administrador de red

Permisos de servicio del Directorio de servicios

El administrador del Directorio de servicios debe otorgar el permiso servicedirectory.services.bind a la cuenta de servicio que intenta conectar la vinculación del servicio al servicio del Directorio de servicios. Esto permite que la cuenta de servicio use un servicio del Directorio de servicios, lo que significa que la cuenta puede hacer referencia a un servicio del Directorio de servicios en una vinculación del servicio.

Aplicación de permisos

Las verificaciones de permisos de IAM se realizan cuando configuras Cloud Service Mesh. Debes tener los permisos necesarios para crear vinculaciones de servicios y asociar vinculaciones de servicios con servicios específicos del Directorio de servicios. Si se aplican los permisos correctos, puedes configurar los clientes de la malla para que aprendan acerca de un servicio del Directorio de servicios y le envíen tráfico.

Debido a que estas verificaciones se realizan en el momento de la configuración, quitar el permiso de vinculación en un servicio del Directorio de servicios existente no interrumpe los flujos de tráfico. Después de que se establece una vinculación del servicio, quitar un permiso no afecta la capacidad de un cliente de la malla de obtener información sobre un servicio del Directorio de servicios y enviarle tráfico.

Para evitar que un cliente de la malla se comunique con un servicio del Directorio de servicios, puedes usar otros mecanismos:

  1. Restringir el acceso al servicio del Directorio de servicios. Por ejemplo: puedes usar reglas de firewall.
  2. Borrar el servicio del Directorio de servicios.
  3. Actualiza la configuración de la malla de servicios de Cloud; por ejemplo, quitando la vinculación del servicio desde el servicio de backend.

Prácticas recomendadas

Usa el Directorio de servicios para el descubrimiento de servicios

En el siguiente diagrama, se proporciona una descripción general del estado final de este procedimiento de configuración, incluida la configuración, cómo interactúan los diferentes sistemas y cómo se resuelve una solicitud a los extremos de un servicio. En este ejemplo, se supone que ya tienes un servicio registrado en el Directorio de servicios.

Detalles de configuración a fin de usar el Directorio de servicios para el descubrimiento de servicios.
Detalles de configuración a fin de usar el Directorio de servicios para el descubrimiento de servicios (haz clic para ampliar)

Para hacer que un servicio del Directorio de servicios esté disponible para Cloud Service Mesh, sigue estos pasos.

  1. Crea un nuevo servicio de backend en Cloud Service Mesh y no lo crees backends para el servicio de backend.
  2. Crea una vinculación del servicio global para el servicio del Directorio de servicios.
  3. Vincula el servicio del Directorio de servicios a este servicio de backend. De forma opcional, configura campos y políticas adicionales en el servicio de backend.

  4. Crea una configuración de enrutamiento nueva o actualiza una existente para que las solicitudes de los clientes se puedan enrutar al servicio de backend nuevo.

No puedes establecer una verificación de estado en un servicio de backend que haga referencia a una vinculación del servicio. El servicio de backend tampoco puede tener backends.

Crea la integración

Usa las siguientes instrucciones para integrar Cloud Service Mesh Directorio de servicios.

Crear un servicio de backend

Usa las siguientes instrucciones para crear un servicio de backend en la implementación de Cloud Service Mesh.

  1. Crea un servicio de backend para usarlo con los servicios del Directorio de servicios.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Crea una vinculación del servicio que haga referencia a un servicio de Directorio de servicios.

    gcloud beta network-services service-bindings create my-sd-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service
    
  3. Vincula el servicio con el servicio de backend.

    gcloud beta compute backend-services update td-sd-demo-service \
     --global \
     --service-bindings my-sd-binding
    

Después de crear el servicio de backend y vincular uno o más servicios del Directorio de servicios, Cloud Service Mesh comienza a realizar un seguimiento de los extremos asociados con el servicio del Directorio de servicios. Los extremos son pares IP:puerto distintos. Para que este servicio se pueda enrutar, debes configurar el enrutamiento.

Configura el enrutamiento

Usa las siguientes instrucciones para actualizar la configuración de enrutamiento.

APIs de enrutamiento de servicios

En el siguiente ejemplo, se supone que tienes un recurso Mesh llamado sidecar- mesh. Creas un recurso HTTPRoute con los nombres de host configurados en myservice.example.com y el destino configurado en el servicio de backend td-sd-demo-service que creaste en la sección anterior.

  1. Crea la especificación HTTPRoute y guárdala en un archivo llamado httproute.yaml.

    name: td-sd-demo-route
    hostnames:
    ‐ myservice.example.com
    meshes:
    ‐ projects/PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    ‐ action:
      destinations:
      ‐ serviceName: "projects/PROJECT_NUMBER/locations/global/backendServices/td-sd-demo-service"
    
  2. Importa la especificación HTTPRoute.

    gcloud network-services httproutes import td-sd-demo-route \
      --source=httproute.yaml \
      --location=global
    

Cargar APIs de balanceo

En el siguiente ejemplo, se supone que ya tienes una configuración de enrutamiento básica, incluido un mapa de URL que se llama my-url-map.

  • Primero, crea un comparador de rutas de acceso para este mapa de URL. El comparador de rutas de acceso es simple. Cuando se usa, se resuelve en td-sd-demo-service, que creaste en el paso anterior.
  • A continuación, debes agregar una regla de host al mapa de URL. Esta regla de host hace que el comparador de rutas de acceso se use si una solicitud especifica el nombre de host myservice.example.com.
  1. Crea un comparador de rutas de acceso simple que apunte a tu servicio de backend.

    gcloud compute url-maps add-path-matcher my-url-map \
     --global \
     --default-service td-sd-demo-service \
     --path-matcher-name my-path-matcher
    
  2. Asigna el servicio de backend a una regla de host nueva en el mapa de URL existente.

    gcloud compute url-maps add-host-rule my-url-map \
     --global \
     --path-matcher-name=my-path-matcher \
     --hosts=myservice.example.com
    

Conecta el mismo servicio desde varias regiones

Cloud Service Mesh te permite vincular varios servicios del Directorio de servicios al mismo servicio de backend. Por ejemplo, puedes tener dos servicios del Directorio de servicios, cada uno idéntico, pero con extremos en diferentes regiones o zonas de Google Cloud. En otras palabras, un solo servicio de backend global podría tener dos vinculaciones de servicios globales, una que apunte a un servicio en us-east1 y la otra que apunte a un servicio en us-west1.

  1. Crea un servicio de backend para el servicio importado del Directorio de servicios.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Crea una vinculación del servicio al servicio del Directorio de servicios en us-east1.

    gcloud beta network-services service-bindings create us-east1-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  3. Crea una vinculación del servicio al servicio del Directorio de servicios en us-west1.

    gcloud beta network-services service-bindings create us-west1-binding \
     --location global
     --service-directory-region us-west1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  4. Vincula los servicios us-east1 y us-west1 con el servicio de backend.

    gcloud compute backend-services update td-sd-demo-service \
      --global \
      --service-bindings us-east1-binding,us-west1-binding
    

Aplica políticas avanzadas de administración de tráfico

En la sección anterior, usaste Cloud Service Mesh para configurar las políticas de enrutamiento en un servicio existente del Directorio de servicios. Puedes aplicar este patrón a situaciones de administración de tráfico más avanzadas.

Considera la siguiente situación. Tienes un servicio de prueba existente fuera de la malla de servicios de Cloud. El servicio de prueba es un backend para un balanceador de cargas de aplicaciones interno. Quieres volver a reproducir algo de tráfico de producción. que se originan en la malla de servicios de Cloud hacia este servicio externo. Cloud Service Mesh puede hacer esto con RequestMirrorPolicy, que puede enviar tráfico a otro servicio de backend cuando se procesa la solicitud. Este proceso también se denomina duplicación de una solicitud y te permite examinar el tráfico sin afectar tus servicios de producción.

Puedes permitir que los clientes de Envoy vean el tráfico a un servicio de prueba de forma manual agregar o quitar el extremo del servicio de prueba a la malla de Cloud Service Mesh Sin embargo, el proceso es más simple cuando usas la integración del Directorio de servicios.

Usa el Directorio de servicios para el descubrimiento de servicios con duplicación.
Usa el Directorio de servicios para el descubrimiento de servicios con duplicación (haz clic para ampliar)

En este ejemplo, se empieza por apuntar un servicio de backend a la El registro en el Directorio de servicios para el servicio de prueba de pagos Luego, debes agregar una política de duplicación de solicitudes al servicio en Cloud Service Mesh.

  1. Crea un servicio de backend para la política de duplicación de solicitudes.

    gcloud compute backend-services create payments-test-bes \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Crea una vinculación del servicio que haga referencia a un servicio de Directorio de servicios.

    gcloud beta network-services service-bindings create my-sd-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  3. Vincula el servicio del Directorio de servicios al servicio de backend de prueba.

    gcloud beta compute backend-services update payments-test-bes \
     --global \
     --service-bindings my-sd-binding
    
  4. Edita el mapa de URL para duplicar las solicitudes en el servicio de prueba.

    gcloud compute url-maps edit my-url-map \
      --region=global
    
  5. Después de cargar la configuración del mapa de URL en un editor, agrega la política de duplicación de solicitudes para duplicar las solicitudes al servicio del Directorio de servicios existente.

    defaultService: my-project/global/default-service
       hostRules:
        - hosts:
          - '*'
          pathMatcher: path-matcher-one
       pathMatchers:
        - defaultService: my-project/global/default-service
         name: path-matcher-one
         pathRules:
          - paths:
            - /payments/
            service: my-project/global/default-service
            requestMirrorPolicy:
              backendService: myproject/global/payments-test-bes
    

Quita una vinculación del servicio de un servicio de backend

Para quitar una vinculación del servicio de backend, pasa una lista nueva de vinculaciones del servicio al comando gcloud compute backend-services update. La lista nueva no debe incluir la vinculación del servicio que deseas borrar:

  • Para quitar todas las vinculaciones del servicio, configura la marca --no-service-bindings.
  • Para quitar una o más vinculaciones de servicios, pasa una lista nueva de vinculaciones de servicios que omitan las vinculaciones de servicios que deseas quitar a la marca --service-bindings.

Agrega o quita vinculaciones de servicios

El comando bind-service agrega una vinculación del servicio al conjunto de vinculaciones de servicios existentes en el servicio de backend.

gcloud compute backend-services bind-service BACKEND_SERVICE_NAME \
  --service-binding-name SERVICE_BINDING_URL \
  --global

El comando unbind-service quita una vinculación del servicio del conjunto de vinculaciones de servicios existentes en el servicio de backend.

gcloud compute backend-services unbind-service BACKEND_SERVICE_NAME \
  --service-binding-name SERVICE_BINDING_URL \
  --global

Los comandos bind-service y unbind-service son construcciones de Google Cloud CLI. No son construcciones a nivel de API.

¿Qué sigue?