Observar la aplicación de las cuotas

En este documento se explica cómo observar la aplicación de las cuotas. El sistema de cuotas de Google Distributed Cloud (GDC) con air gap protege los servicios evitando picos de uso imprevistos que podrían sobrecargarlos. Para ayudarte a entender cómo se configuran y se aplican las cuotas de servicio, puedes usar el servicio Library Agent para observar los comportamientos de las cuotas, como la limitación de la frecuencia.

El servicio Library Agent expone dos APIs:

  • GetShelf recupera los detalles de un estante específico y no tiene límite de frecuencia.
  • ListShelves obtiene una lista de todas las estanterías y tiene un límite de dos solicitudes por minuto.

Esta página está dirigida a los desarrolladores del grupo de operadores de aplicaciones, que son responsables de monitorizar las cuotas y los patrones de uso de su proyecto. Para obtener más información, consulta Audiencias de la documentación aislada de GDC.

Antes de empezar

Antes de interactuar con el servicio Library Agent, asegúrate de que tienes los permisos correctos y el endpoint del servicio:

  1. Para obtener los permisos que necesitas para interactuar con el servicio Library Agent, pide al administrador de gestión de identidades y accesos de tu proyecto que te conceda el rol Usuario de Library Agent en el espacio de nombres de tu proyecto. Por ejemplo, el administrador de gestión de identidades y accesos de proyectos puede vincular el rol libraryagent-user a tu cuenta de usuario en el espacio de nombres de tu proyecto aplicando un recurso RoleBinding:

    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: libraryagent-user-binding
      namespace: PROJECT_NAMESPACE
    subjects:
    - kind: User
      name: USER_EMAIL_ADDRESS
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: libraryagent-user
      apiGroup: rbac.authorization.k8s.io
    EOF
    

    Haz los cambios siguientes:

    • PROJECT_NAMESPACE: el espacio de nombres de tu proyecto, como project-123.
    • USER_EMAIL_ADDRESS: la dirección de correo asociada a tu identidad de usuario.
  2. Pide a un administrador de la plataforma que tenga acceso al clúster de administrador de la organización y que tenga el rol de monitor de DNS (dns-monitor-mp) que obtenga el nombre de DNS del servicio LibraryAgent:

    kubectl get dnsregistration.network.private.gdc.goog -n libraryagent-system libraryagent -o jsonpath='{.status.fqdn}'
    

    Si necesitas editar el registro DNS, el PA también debe tener el rol de depurador de DNS (dns-debugger-mp).

Respetar los límites de cuota

Para interactuar con las APIs del agente de biblioteca y observar la limitación de frecuencia, sigue estos pasos:

  1. Define las variables de entorno para el nombre DNS y tu token de autenticación:

    export DNS_NAME=LIBRARY_AGENT_DNS_NAME
    export TOKEN="$($HOME/gdcloud auth print-identity-token --audiences=https://$DNS_NAME)"
    

    Sustituye LIBRARY_AGENT_DNS_NAME por el nombre de DNS que has obtenido antes.

  2. Llama a la API GetShelf para obtener un estante específico por su nombre. Este método no tiene límite de frecuencia:

    curl -v -X GET \
    -H "Authorization: Bearer ${TOKEN?}" \
    --insecure \
    https://$DNS_NAME/v1alpha1/projects/PROJECT_NAMESPACE/shelves/Shelf1
    

    Sustituye PROJECT_NAMESPACE por el espacio de nombres de tu proyecto.

    Recibes una respuesta HTTP 200 OK.

  3. Llama a la API ListShelves para obtener una lista de todos los estantes de una ubicación que se refleje en el nombre de DNS. Este método tiene un límite de dos solicitudes por minuto:

    curl -v -X GET \
    -H "Authorization: Bearer ${TOKEN?}" \
    --insecure \
    https://$DNS_NAME/v1alpha1/projects/PROJECT_NAMESPACE/shelves
    

    Sustituye PROJECT_NAMESPACE por el espacio de nombres de tu proyecto.

    Si no superas el límite de dos solicitudes por minuto, recibirás una respuesta HTTP 200 OK.

  4. Para observar la aplicación de la cuota, llama a la API ListShelves repetidamente hasta que superes el límite de frecuencia:

    curl -v -X GET \
    -H "Authorization: Bearer ${TOKEN?}" \
    --insecure \
    https://$DNS_NAME/v1alpha1/projects/PROJECT_NAMESPACE/shelves
    

    Sustituye PROJECT_NAMESPACE por el espacio de nombres de tu proyecto.

    Si supera el límite, recibirá una HTTP 429 Too Many Requests respuesta que indica que el sistema de cuotas ha limitado la frecuencia de la solicitud. El resultado debería ser similar al siguiente:

    * Request completely sent off
    < HTTP/2 429
    < x-envoy-ratelimited: true
    < date: Thu, 24 Apr 2025 18:37:16 GMT
    < server: istio-envoy
    < x-envoy-upstream-service-time: 46
    <
    * Connection #0 to host libraryagent.org-1.zone1.google.gdch.test left intact
    

    La aplicación de los límites de frecuencia no siempre es precisa. Puede que se necesiten más de dos solicitudes en un minuto para activar el error 429.