Kontingenterzwingung beobachten

In diesem Dokument wird erläutert, wie Sie die Durchsetzung von Kontingenten beobachten können. Das Kontingentsystem von Google Distributed Cloud (GDC) Air-gapped schützt Dienste vor unvorhergesehenen Nutzungsspitzen, die zu einer Überlastung führen könnten. Damit Sie besser nachvollziehen können, wie Dienstkontingente konfiguriert und erzwungen werden, können Sie den Library Agent-Dienst verwenden, um das Kontingentverhalten zu beobachten, z. B. die Ratenbegrenzung.

Der Library Agent-Dienst bietet zwei APIs:

  • GetShelf: Ruft Details zu einem bestimmten Shelf ab und unterliegt keiner Ratenbeschränkung.
  • ListShelves: Ruft eine Liste aller Regale ab und hat ein Ratenlimit von zwei Anfragen pro Minute.

Diese Seite richtet sich an Entwickler in der Gruppe der Anwendungsoperatoren, die für die Überwachung von Kontingenten und Nutzungsmustern für ihr Projekt verantwortlich sind. Weitere Informationen finden Sie unter Dokumentation zu Zielgruppen für GDC mit Air Gap.

Hinweise

Bevor Sie mit dem Library Agent-Dienst interagieren, müssen Sie die richtigen Berechtigungen und den Dienstendpunkt haben:

  1. Bitten Sie Ihren Projekt-IAM-Administrator, Ihnen die Rolle LibraryAgent User in Ihrem Projekt-Namespace zuzuweisen, um die Berechtigungen zu erhalten, die Sie für die Interaktion mit dem Library Agent-Dienst benötigen. Der Projekt-IAM-Administrator kann beispielsweise die Rolle libraryagent-user an Ihr Nutzerkonto in Ihrem Projektnamespace binden, indem er eine RoleBinding-Ressource anwendet:

    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
    

    Ersetzen Sie Folgendes:

    • PROJECT_NAMESPACE: der Namespace Ihres Projekts, z. B. project-123.
    • USER_EMAIL_ADDRESS: die E-Mail-Adresse, die mit Ihrer Nutzeridentität verknüpft ist.
  2. Bitten Sie einen Plattformadministrator, der Zugriff auf den Organisationsadministratorcluster und die Rolle „DNS Monitor“ (dns-monitor-mp) hat, den DNS-Namen für den Library Agent-Dienst abzurufen:

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

    Wenn Sie die DNS-Registrierung bearbeiten müssen, muss die PA auch die Rolle „DNS Debugger“ (dns-debugger-mp) haben.

Kontingentlimits einhalten

So interagieren Sie mit den Library Agent APIs und beobachten die Ratenbegrenzung:

  1. Legen Sie Umgebungsvariablen für den DNS-Namen und Ihr Authentifizierungstoken fest:

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

    Ersetzen Sie LIBRARY_AGENT_DNS_NAME durch den zuvor abgerufenen DNS-Namen.

  2. Rufen Sie die GetShelf API auf, um ein bestimmtes Regal nach Namen abzurufen. Für diese Methode gilt kein Ratenlimit:

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

    Ersetzen Sie PROJECT_NAMESPACE durch den Namespace Ihres Projekts.

    Sie erhalten eine HTTP 200 OK-Antwort.

  3. Rufen Sie die ListShelves API auf, um alle Regale an einem Standort aufzulisten, der im DNS-Namen angegeben ist. Diese Methode ist auf zwei Anfragen pro Minute beschränkt:

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

    Ersetzen Sie PROJECT_NAMESPACE durch den Namespace Ihres Projekts.

    Wenn Sie das Limit von zwei Anfragen pro Minute nicht überschreiten, erhalten Sie eine HTTP 200 OK-Antwort.

  4. Rufen Sie die ListShelves API wiederholt auf, bis Sie das Ratenlimit überschreiten, um die Kontingentdurchsetzung zu beobachten:

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

    Ersetzen Sie PROJECT_NAMESPACE durch den Namespace Ihres Projekts.

    Wenn Sie das Limit überschreiten, erhalten Sie eine HTTP 429 Too Many Requests-Antwort, die angibt, dass die Anfrage vom Kontingentsystem ratenbegrenzt wurde. Die Ausgabe sieht etwa so aus:

    * 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
    

    Die Durchsetzung von Ratenbeschränkungen ist nicht immer präzise. Es kann mehr als zwei Anfragen pro Minute dauern, bis der Fehler 429 ausgelöst wird.