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 configures Cloud Service Mesh para usarlo con el Directorio de servicios y uses las APIs de balanceo de cargas anteriores, sigue estos lineamientos:
- Asegúrate de que la regla de reenvío de Cloud Service Mesh use la dirección IP virtual (VIP)
0.0.0.0
. - 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, es probable que fallen las solicitudes salientes de tus aplicaciones.
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:
- Restringir el acceso al servicio del Directorio de servicios. Por ejemplo, puedes usar reglas de firewall.
- Borrar el servicio del Directorio de servicios.
- Para actualizar la configuración de Cloud Service Mesh, por ejemplo, quita la vinculación del servicio del servicio de backend.
Prácticas recomendadas
- Si bien el Directorio de servicios permite el registro de extremos mediante la API del Directorio de servicios, recomendamos usar integraciones que se registren automáticamente en el Directorio de servicios cuando estén disponibles. Si deseas obtener más información sobre estas integraciones, consulta Descripción general del Directorio de servicios para GKE y Descripción general del Directorio de servicios y Cloud Load Balancing.
- Te recomendamos que uses el mismo espacio de nombres y el mismo servicio para un servicio lógico en particular, incluso cuando ese servicio se implemente en diferentes regiones.
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.
Para hacer que un servicio del Directorio de servicios esté disponible para Cloud Service Mesh, sigue estos pasos.
- Crea un servicio de backend nuevo en Cloud Service Mesh y no crees backends para el servicio de backend.
- Crea una vinculación del servicio global para el servicio del Directorio de servicios.
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.
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 en el 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.
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
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
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.
Crea la especificación
HTTPRoute
y guárdala en un archivo llamadohttproute.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"
Importa la especificación
HTTPRoute
.gcloud network-services httproutes import td-sd-demo-route \ --source=httproute.yaml \ --location=global
APIs de balanceo de cargas
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
.
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
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
.
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
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 \
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 \
Vincula los servicios
us-east1
yus-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 políticas de enrutamiento en un servicio del Directorio de servicios existente. 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 que está fuera de la malla de Cloud Service Mesh. El servicio de prueba es un backend para un balanceador de cargas de aplicaciones interno. Deseas repetir parte del tráfico de producción que se origina en la malla de Cloud Service Mesh a este servicio externo.
Cloud Service Mesh puede hacerlo mediante 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 habilitar a los clientes de Envoy para actualizar el tráfico a un servicio de prueba si agregas el extremo del servicio de prueba a la malla de Cloud Service Mesh o lo quitas manualmente. Sin embargo, el proceso es más simple cuando usas la integración del Directorio de servicios.
En este ejemplo, primero debes apuntar un servicio de backend al registro del 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.
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
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 \
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
Edita el mapa de URL para duplicar las solicitudes al servicio de prueba.
gcloud compute url-maps edit my-url-map \ --region=global
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?
- Para obtener información sobre la observabilidad con esta integración, consulta Observabilidad y depuración con el Directorio de servicios.