Observer l'application des quotas

Ce document explique comment observer l'application des quotas. Le système de quotas Google Distributed Cloud (GDC) sous air gap protège les services en empêchant les pics d'utilisation imprévus qui pourraient les surcharger. Pour vous aider à comprendre comment les quotas de service sont configurés et appliqués, vous pouvez utiliser le service Library Agent pour observer les comportements de quota, tels que la limitation du débit.

Le service Library Agent expose deux API :

  • GetShelf : récupère les détails d'un rayon spécifique et n'est pas soumis à une limite de fréquence.
  • ListShelves : récupère la liste de toutes les étagères. La limite de débit est de deux requêtes par minute.

Cette page s'adresse aux développeurs du groupe d'opérateurs d'applications, qui sont chargés de surveiller les quotas et les schémas d'utilisation de leur projet. Pour en savoir plus, consultez Audiences pour la documentation GDC sous air gap.

Avant de commencer

Avant d'interagir avec le service Library Agent, assurez-vous de disposer des autorisations appropriées et du point de terminaison du service :

  1. Pour obtenir les autorisations nécessaires pour interagir avec le service Library Agent, demandez à l'administrateur IAM de votre projet de vous accorder le rôle Utilisateur LibraryAgent dans l'espace de noms de votre projet. Par exemple, l'administrateur IAM du projet peut associer le rôle libraryagent-user à votre compte utilisateur dans l'espace de noms de votre projet en appliquant une ressource 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
    

    Remplacez les éléments suivants :

    • PROJECT_NAMESPACE : espace de noms de votre projet, tel que project-123.
    • USER_EMAIL_ADDRESS : adresse e-mail associée à votre identité utilisateur.
  2. Demandez à un administrateur de plate-forme ayant accès au cluster d'administration de l'organisation et disposant du rôle Observateur DNS (dns-monitor-mp) d'obtenir le nom DNS du service Library Agent :

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

    Si vous devez modifier l'enregistrement DNS, l'administrateur principal doit également disposer du rôle Débogueur DNS (dns-debugger-mp).

Respecter les limites de quota

Pour interagir avec les API de l'agent de bibliothèque et observer la limitation du débit, procédez comme suit :

  1. Définissez des variables d'environnement pour le nom DNS et votre jeton d'authentification :

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

    Remplacez LIBRARY_AGENT_DNS_NAME par le nom DNS que vous avez obtenu précédemment.

  2. Appelez l'API GetShelf pour extraire un rayon spécifique par son nom. Cette méthode n'est soumise à aucune limite de fréquence :

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

    Remplacez PROJECT_NAMESPACE par l'espace de noms de votre projet.

    Vous recevez une réponse HTTP 200 OK.

  3. Appelez l'API ListShelves pour lister toutes les étagères d'un établissement qui est reflété dans le nom DNS. Cette méthode est limitée à deux requêtes par minute :

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

    Remplacez PROJECT_NAMESPACE par l'espace de noms de votre projet.

    Si vous ne dépassez pas la limite de deux demandes par minute, vous recevrez une réponse HTTP 200 OK.

  4. Pour observer l'application des quotas, appelez l'API ListShelves de façon répétée jusqu'à ce que vous dépassiez la limite de débit :

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

    Remplacez PROJECT_NAMESPACE par l'espace de noms de votre projet.

    Lorsque vous dépassez la limite, vous recevez une réponse HTTP 429 Too Many Requests indiquant que la requête a été limitée en débit par le système de quota. Le résultat ressemble à ce qui suit :

    * 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
    

    L'application des limites de débit n'est pas toujours précise. Il peut falloir plus de deux requêtes en une minute pour déclencher l'erreur 429.