Observe a aplicação de quotas

Este documento explica como observar a aplicação de quotas. O sistema de quotas com lacunas de ar do Google Distributed Cloud (GDC) protege os serviços impedindo picos inesperados na utilização que possam sobrecarregar os serviços. Para ajudar a compreender como as quotas de serviço são configuradas e aplicadas, pode usar o serviço Library Agent para observar os comportamentos das quotas, como a limitação de taxa.

O serviço Library Agent expõe duas APIs:

  • GetShelf: obtém detalhes de uma prateleira específica e não tem limite de taxa.
  • ListShelves: obtém uma lista de todas as prateleiras e tem um limite de taxa de dois pedidos por minuto.

Esta página destina-se aos programadores do grupo de operadores de aplicações, que são responsáveis por monitorizar as quotas e os padrões de utilização do respetivo projeto. Para mais informações, consulte a documentação sobre públicos-alvo para GDC com isolamento de ar.

Antes de começar

Antes de interagir com o serviço Library Agent, certifique-se de que tem as autorizações corretas e o ponto final do serviço:

  1. Para receber as autorizações necessárias para interagir com o serviço Library Agent, peça ao administrador de IAM do projeto que lhe conceda a função Utilizador do LibraryAgent no espaço de nomes do seu projeto. Por exemplo, o administrador de IAM do projeto pode associar a função libraryagent-user à sua conta de utilizador no espaço de nomes do projeto aplicando um 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
    

    Substitua o seguinte:

    • PROJECT_NAMESPACE: o espaço de nomes do seu projeto, como project-123.
    • USER_EMAIL_ADDRESS: o endereço de email associado à sua identidade de utilizador.
  2. Peça a um administrador da plataforma que tenha acesso ao cluster de administrador da organização e que tenha a função de monitor DNS (dns-monitor-mp) para obter o nome DNS do serviço do agente da biblioteca:

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

    Se precisar de editar o registo de DNS, o PA também tem de ter a função de depurador de DNS (dns-debugger-mp).

Respeite os limites de quotas

Para interagir com as APIs Library Agent e observar a limitação de taxa, siga estes passos:

  1. Defina variáveis de ambiente para o nome DNS e o token de autenticação:

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

    Substitua LIBRARY_AGENT_DNS_NAME pelo nome DNS que obteve anteriormente.

  2. Chame a API GetShelf para obter uma prateleira específica pelo nome. Este método não tem limite de taxa:

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

    Substitua PROJECT_NAMESPACE pelo espaço de nomes do seu projeto.

    Recebe uma resposta HTTP 200 OK.

  3. Chame a API ListShelves para listar todas as prateleiras numa localização que se reflita no nome DNS. Este método está limitado a duas solicitações por minuto:

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

    Substitua PROJECT_NAMESPACE pelo espaço de nomes do seu projeto.

    Se estiver dentro do limite de dois pedidos por minuto, recebe uma resposta HTTP 200 OK.

  4. Para observar a aplicação da quota, chame a API ListShelves repetidamente até exceder o limite de velocidade:

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

    Substitua PROJECT_NAMESPACE pelo espaço de nomes do seu projeto.

    Quando excede o limite, recebe uma HTTP 429 Too Many Requests resposta a indicar que o pedido foi limitado pela taxa do sistema de quotas. O resultado é semelhante ao seguinte:

    * 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
    

    A aplicação do limite de taxa nem sempre é precisa. Podem ser necessárias mais de duas solicitações num minuto para acionar o erro 429.