Skip to Content
管理者マニュアルKubernetesConnection ManagementCloud ProvidersGoogle CloudからGKEリソースを同期する

Google CloudからGKEリソースを同期する

概要

QueryPieは、Kubernetesクラスターの登録と管理のためのGCP連携をサポートしています。 GCP Project内のGKEクラスターを同期してQueryPieの管理対象クラスターとして登録し、同期したクラスターに対するKubernetes APIアクセス権限をユーザーおよびグループに付与して、ポリシーを設定できます。

このドキュメントでは、GCP Service Account Key JSONをQueryPieに直接登録し、GKE StandardまたはAutopilotクラスターを同期する手順について説明します。

GCPのGKEリソース同期機能は、バージョン11.5.4以降および11.6.1以降で提供されます。

前提条件

  1. 対象のGCP Project IDを確認します。
  2. 同期対象のGKEクラスターがGKE StandardまたはAutopilotとして作成されていることを確認します。
  3. GCPでService Accountの作成、IAMロールの付与、Service Account Keyの作成が可能な管理者権限を用意します。
  4. QueryPieでKAC Cloud Providerを作成して同期できる管理者権限を用意します。
  5. GCP Projectで次のAPIが有効になっていることを確認します。
API用途
container.googleapis.comGKEクラスター一覧、Endpoint、CAの取得、およびKubernetes APIへの接続
iam.googleapis.comService AccountおよびKeyの作成
cloudresourcemanager.googleapis.comProject IAM Bindingの設定

APIが有効になっていない場合は、GCP ConsoleのAPIs & Services > Enabled APIs & servicesメニューで有効にするか、次のコマンドを実行します。

gcloud services enable \ container.googleapis.com \ iam.googleapis.com \ cloudresourcemanager.googleapis.com \ --project=<PROJECT_ID>

GCP Service Accountの作成と権限付与

QueryPieがGCPおよびGKEで認証できるように、QueryPie専用のService Accountを作成します。

gcloud iam service-accounts create querypie-kac-gke \ --display-name="QueryPie KAC GKE" \ --project=<PROJECT_ID> export QUERYPIE_GKE_SA="querypie-kac-gke@<PROJECT_ID>.iam.gserviceaccount.com"

作成したService Accountに、GKEクラスターの同期とKubernetes APIへの接続に必要なIAMロールを付与します。

gcloud projects add-iam-policy-binding <PROJECT_ID> \ --member="serviceAccount:${QUERYPIE_GKE_SA}" \ --role="roles/container.admin"

roles/container.adminには、QueryPie KACのクラスター同期とユーザーおよびグループのimpersonationに必要なcontainer.clusters.impersonate権限が含まれます。

Service Account Key JSONの作成

QueryPie Cloud Provider Credentialに登録するService Account Key JSONファイルを作成します。

gcloud iam service-accounts keys create querypie-kac-gke-key.json \ --iam-account="${QUERYPIE_GKE_SA}" \ --project=<PROJECT_ID>

生成されたJSONファイルはBase64に変換せず、ファイルのJSON全体をQueryPieに入力します。

セキュリティ上の注意:Service Account Key JSONのprivate_keyは長期認証情報です。 元の内容をGit、Wiki、メッセンジャー、チケットなどにアップロードしないでください。QueryPieへの登録に使用した後は、組織のKey保管および削除ポリシーに従って元のファイルを管理してください。 QueryPieにCloud Providerを保存した後は、Service Account JSONを変更したり別のService Accountに置き換えたりできません。Credentialを変更する必要がある場合は、新しいCloud Providerを登録してください。

QueryPieにGCP連携情報を登録する

  1. Administrator > Kubernetes > Connection Management > Cloud Providersメニューに移動します。
  2. 右上の+ Create Providerボタンをクリックします。
  3. Name項目にプロバイダーを識別できる名前を入力します。
  4. Cloud Provider項目でGCPを選択します。
  5. Project ID項目にGKEクラスターが存在するGCP Project IDを入力します。
  6. Credential項目でService Accountを選択します。
  7. Service Account JSON項目にquerypie-kac-gke-key.jsonファイルのJSON全体を入力します。
  8. 必要に応じてSearch FilterまたはAuto Configuration Upon Synchronization > Tagを設定します。
  9. Replication Frequency項目で同期方法を選択します。
    • Manual:同期を実行した時点でのみ手動でリソースを同期します。
    • Scheduling:Cron Expressionに基づく定期スケジュールでリソースを同期します。
  10. Dry Runボタンをクリックし、Credentialとクラスターの取得結果を事前に確認します。
  11. SaveボタンをクリックしてCloud Providerを保存します。

登録したGCP Cloud Providerを同期および管理する

  1. Administrator > Kubernetes > Connection Management > Cloud Providersメニューに移動します。
  2. 登録したGCP Cloud Providerをクリックして詳細画面に移動します。
  3. 右上のSynchronizeボタンをクリックし、GCPからGKEクラスターを同期します。
  4. 表示されるSynchronization Logで同期の進行状況を確認します。
  5. Settings > Systems > Jobsメニューでも同期履歴を確認できます。
  6. Administrator > Kubernetes > Connection Management > Clusters一覧でGKEクラスターが登録されていることを確認します。

QueryPieはprojects/<PROJECT_ID>/locations/-/clusters APIを使用し、Project内のすべてのlocationからGKEクラスターを取得します。 StandardとAutopilotの両方のGKEクラスターを同期できます。

Cloud Providerを一度登録すると、プロバイダー情報の一部は変更できません。

項目変更可否
Name変更可能
Cloud Provider変更不可
Project ID変更不可
Credential変更不可
Service Account JSON変更不可
Vault Secret Store(Credentialで「Vault(GCP)」を選択した場合のみ)変更不可
Roleset Path(Credentialで「Vault(GCP)」を選択した場合のみ)変更不可
Search Filter変更可能
Auto Configuration Upon Synchronization > Tag変更不可
Use Regular Expression Search変更可能
Use Case-sensitive Search変更可能
Replication Frequency変更可能

GKE StandardとAutopilotの違い

項目StandardAutopilot
クラスター同期サポートサポート
カスタムユーザーおよびグループのimpersonationサポートサポート
system:*ユーザーおよびグループのimpersonationサポート未サポート

Autopilotでは、KAC Policyのimpersonationグループとしてsystem:mastersなどのsystem:*グループを使用できません。 カスタムグループを使用する場合は、StandardとAutopilotのどちらでも、対象のGKEクラスターに、そのグループを必要なKubernetes ClusterRoleに接続するClusterRoleBindingを作成する必要があります。

たとえば、QueryPieでquerypie:kac-adminsグループをimpersonationグループとして使用する場合は、対象のGKEクラスターに次のようなClusterRoleBindingを設定できます。

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: querypie-kac-admins subjects: - kind: Group name: querypie:kac-admins apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io

本番環境では、cluster-adminの代わりに、組織のポリシーに沿った最小権限のClusterRoleを使用することを推奨します。

詳細については、次のリンクを参照してください。

Dry Run/Synchronization Logのメッセージ

発生時点メッセージ
Dry RunまたはSynchronizeの同期開始Cluster synchronize started.
新規クラスターの追加完了New Cluster is added: {Cluster Name} (https://{Endpoint}).
既存クラスター情報の更新完了Cluster {Cluster Name} is updated.
既存クラスターの削除完了Cluster {Cluster Name} is removed.
Dry RunまたはSynchronizeの同期成功終了Cluster synchronize succeeded.
重複するクラスター名が確認され同期に失敗Cluster synchronization failed. The cluster name “{Cluster Name}” is already in use by another cluster. To synchronize it, delete the existing cluster.
Dry RunまたはSynchronizeの同期失敗終了Cluster synchronize failed. {additional statement}
クラスターのEndpointを取得できず同期をスキップSkipping cluster {Cluster Name}: endpoint not available (cluster may be provisioning).
クラスターのCA証明書を取得できず同期をスキップSkipping cluster {Cluster Name}: CA certificate not available.
新規クラスターの追加に失敗Failed to add cluster {Cluster Name}: {additional statement}
既存クラスターの更新に失敗Failed to update cluster {Cluster Name}: {additional statement}
既存クラスターの削除に失敗Failed to delete cluster {Cluster Name}: {additional statement}

よくある質問

Q. Service Account JSONはBase64でエンコードして入力する必要がありますか?

A. いいえ。querypie-kac-gke-key.jsonファイルのJSON全体をそのまま入力します。

Q. GKE Autopilotクラスターも同期できますか?

A. はい。 GKE StandardとAutopilotの両方のクラスターを同期できます。 ただし、Autopilotではsystem:mastersなどのsystem:*ユーザーおよびグループのimpersonationを使用できないため、カスタムグループと必要なKubernetes RBAC Bindingを使用することを推奨します。

Q. Cloud Providerの保存後にProject IDやCredentialを変更できますか?

A. いいえ。 Providerを保存した後は、Cloud Provider、Project ID、Credential、Service Account JSONなどの主要な接続情報を変更できません。 別のProjectまたはCredentialを使用する必要がある場合は、Cloud Providerを新しく登録します。

Q. 同期には成功しましたが、ユーザーがクラスターに接続できません。

A. QueryPieにクラスターを登録した後も、ユーザーまたはグループに対するKACアクセス権限とポリシーを別途設定する必要があります。 カスタムimpersonationグループを使用する場合は、対象のGKEクラスターで、そのグループがKubernetes RoleBindingまたはClusterRoleBindingに接続されていることを確認します。

Last updated on