割り当ての適用を観察する

このドキュメントでは、割り当ての適用をモニタリングする方法について説明します。Google Distributed Cloud(GDC)のエアギャップ割り当てシステムは、サービスの過負荷を引き起こす可能性のある予期しない使用量の急増を防ぐことでサービスを保護します。サービス割り当ての構成と適用方法を理解するために、Library Agent サービスを使用して、レート制限などの割り当て動作をモニタリングできます。

Library Agent サービスは、次の 2 つの API を公開します。

  • GetShelf: 特定のシェルフの詳細を取得します。レート制限はありません。
  • ListShelves: すべてのシェルフのリストを取得します。レート制限は 1 分あたり 2 件のリクエストです。

このページは、プロジェクトの割り当てと使用パターンをモニタリングするアプリケーション オペレーター グループ内のデベロッパーを対象としています。詳細については、GDC エアギャップの対象読者のドキュメントをご覧ください。

始める前に

ライブラリ エージェント サービスを操作する前に、正しい権限とサービス エンドポイントがあることを確認してください。

  1. Library Agent サービスを操作するために必要な権限を取得するには、プロジェクトの IAM 管理者に、プロジェクトの Namespace で LibraryAgent ユーザー ロールを付与するよう依頼してください。たとえば、プロジェクト IAM 管理者は、RoleBinding リソースを適用して、プロジェクト Namespace のユーザー アカウントに libraryagent-user ロールをバインドできます。

    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
    

    次のように置き換えます。

    • PROJECT_NAMESPACE: プロジェクトの Namespace(project-123 など)。
    • USER_EMAIL_ADDRESS: ユーザー ID に関連付けられているメールアドレス。
  2. 組織管理者クラスタにアクセスでき、DNS モニター(dns-monitor-mp)ロールを持つプラットフォーム管理者に、Library Agent サービスの DNS 名を取得するよう依頼します。

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

    DNS 登録の編集が必要な場合は、PA に DNS デバッガ(dns-debugger-mp)ロールも必要です。

割り当て上限を遵守する

Library Agent API を操作してレート制限を確認する手順は次のとおりです。

  1. DNS 名と認証トークンの環境変数を設定します。

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

    LIBRARY_AGENT_DNS_NAME は、前に取得した DNS 名に置き換えます。

  2. GetShelf API を呼び出して、名前で特定のシェルフを取得します。このメソッドにはレート制限はありません。

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

    PROJECT_NAMESPACE は、プロジェクトの Namespace に置き換えます。

    HTTP 200 OK レスポンスが返されます。

  3. ListShelves API を呼び出して、DNS 名に反映されているロケーション内のすべてのシェルフを一覧表示します。このメソッドは、1 分あたり 2 件のリクエストにレート制限されています。

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

    PROJECT_NAMESPACE は、プロジェクトの Namespace に置き換えます。

    1 分あたり 2 件のリクエストの上限内であれば、HTTP 200 OK レスポンスが返されます。

  4. 割り当ての適用を観察するには、レート上限を超えるまで ListShelves API を繰り返し呼び出します。

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

    PROJECT_NAMESPACE は、プロジェクトの Namespace に置き換えます。

    上限を超えると、リクエストが割り当てシステムによってレート制限されたことを示す HTTP 429 Too Many Requests レスポンスが返されます。出力は次のようになります。

    * 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
    

    レート制限の適用は必ずしも正確ではありません。1 分間に 3 回以上のリクエストで 429 エラーがトリガーされることがあります。