Google Cloud リソースを設定する

このページでは、クラスタの前に作成して構成する必要がある Google Cloud リソースについて説明します。

始める前に

  1. Google Cloud プロジェクト請求先アカウントを作成します。

  2. Google Cloud プロジェクトのオーナーでない場合は、プロジェクト オーナーから以下の Identity and Access Management(IAM)ロールを付与してもらう必要があります。

    ロール 目的
    roles/compute.viewer 必須: bmctl でクラスタ構成ファイルの clusterOperations.location フィールドを検証する場合に必要です。
    roles/iam.serviceAccountAdmin 必須: Google Distributed Cloud に必要なサービス アカウントを作成するために必要です。
    roles/iam.securityAdmin 必須: Google Distributed Cloud に必要なサービス アカウントに IAM ロールを付与するために必要です。
    roles/iam.serviceAccountKeyAdmin 必須: Google Distributed Cloud に必要なサービス アカウント用の JSON 鍵ファイルを作成するために必要です。
    roles/serviceusage.serviceUsageAdmin 必須: Google Distributed Cloud に必要な Google API を有効にするために必要です。
    roles/gkeonprem.admin 省略可: GKE On-Prem API クライアントを使用してクラスタを作成する場合、または GKE On-Prem API で管理されるようにクラスタを構成する場合に必要です。
    roles/gkehub.viewer
    roles/container.viewer
    省略可: Google Cloud コンソールで GKE Enterprise と Google Kubernetes Engine のページにアクセスする場合に必要です。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

API を有効にする

関連する Google Cloud プロジェクトで、いくつかの Google API を有効にする必要があります。Google Distributed Cloud は、クラスタの作成時に API を使用します。また、Google Cloud への接続を維持するために API も必要です。Google Cloud との接続により、Google Distributed Cloud は Cloud Logging や Cloud Monitoring、Cloud Service Mesh、Config Sync、Policy Controller、Config Controller などのフリート機能を使用できます。

bmctl ツールを使用してクラスタを作成する場合は、bmctl create config を実行する際に --enable-apis フラグを指定すると、bmctl が次の gcloud services enable コマンドに列挙されている API を有効にします。GKE On-Prem API クライアントを使用して管理クラスタユーザー クラスタを作成する場合は、クラスタを作成する前に API を有効にする必要があります。

API を有効にするには、次のコマンドを実行します。

  1. Google Cloud CLI にログインします。

    gcloud auth login
    
  2. 次の API を有効にします。

    gcloud services enable --project=PROJECT_ID \
        anthos.googleapis.com \
        anthosaudit.googleapis.com \
        anthosgke.googleapis.com \
        cloudresourcemanager.googleapis.com \
        compute.googleapis.com \
        connectgateway.googleapis.com \
        container.googleapis.com \
        gkeconnect.googleapis.com \
        gkehub.googleapis.com \
        gkeonprem.googleapis.com \
        iam.googleapis.com \
        kubernetesmetadata.googleapis.com \
        logging.googleapis.com \
        monitoring.googleapis.com \
        opsconfigmonitoring.googleapis.com \
        serviceusage.googleapis.com \
        stackdriver.googleapis.com \
        storage.googleapis.com
    

    gkeonprem.googleapis.com を除き、これらの Google API はプロジェクトに必要です。次の 2 つの API は、バージョン 1.29 以降でのみ必要です。

    • compute.googleapis.com
    • kubernetesmetadata.googleapis.com

    クラスタをプロキシの背後にインストールする場合は、これらの API の多くを接続の許可リストに追加する必要があります。許可リストに追加する必要がある API とエンドポイントのリストと、アクセスの理由については、プロキシの背後にインストールするをご覧ください。

  3. プロジェクトで有効になっている API とサービスを表示するには、次のコマンドを実行します。

    gcloud services list --project=PROJECT_ID \
        --enabled
    

サービス アカウントを構成する

Google API を使用するには、関連する Google Cloud プロジェクトで特定の IAM ロールが構成されたサービス アカウントが必要です。特に本番環境では、異なる目的ごとに別のサービス アカウントを作成することをおすすめします。

bmctl ツールを使用してクラスタを作成する場合は、bmctl create config を実行する際に --create-service-accounts フラグを指定することで、bmctl で必要な IAM ロールを持つサービス アカウントが作成できます。GKE On-Prem API クライアントを使用して管理クラスタを作成する場合、デフォルトでは、ブートストラップ クラスタを作成するコマンドを実行すると、bmctl register bootstrap コマンドで必要な IAM のロールを持つサービス アカウントが作成されます。

ユーザー クラスタの作成にもサービス アカウントが必要ですが、サービス アカウントはユーザー クラスタを管理する管理クラスタの作成時に作成され、構成されています。

次の表に、自動的に作成されるサービス アカウントを示します。

サービス アカウント 目的 ロール
anthos-baremetal-gcr Google Distributed Cloud は、このサービス アカウントを使用して Container Registry からコンテナ イメージをダウンロードします。 なし
anthos-baremetal-connect Connect Agent は、このサービス アカウントを使用して、クラスタと Google Cloud 間の接続を維持しますこれにより、クラスタとワークロード管理機能(Google Cloud コンソール、Connect Gateway など)にアクセスして、クラスタを操作できます。 roles/gkehub.connect
anthos-baremetal-register Connect Agent は、このサービス アカウントを使用してフリートにクラスタを登録します。 roles/gkehub.admin
anthos-baremetal-cloud-ops Stackdriver Agent は、このサービス アカウントを使用して、クラスタから Cloud LoggingCloud Monitoring にログと指標をエクスポートします。 roles/logging.logWriter
roles/monitoring.metricWriter
roles/stackdriver.resourceMetadata.writer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/monitoring.dashboardEditor
roles/monitoring.viewer
roles/serviceusage.serviceUsageViewer
roles/kubernetesmetadata.publisher

サービス アカウントを手動で構成する

必要に応じて、クラスタを作成する前にサービス アカウントを手動で作成し、必要なロールで構成して JSON 鍵ファイルをダウンロードできます。bmctl を使用してクラスタを作成する場合は、JSON 鍵ファイルへの参照を適切なクラスタ構成ファイルに追加します。例については、構成ファイルの編集をご覧ください。GKE On-Prem API を使用して管理クラスタを作成する場合は、bmctl register bootstrap を実行してブートストラップ クラスタを作成する際に鍵ファイルを指定できます。

サービス アカウントと鍵ファイルを作成するには:

  1. 管理ワークステーションの baremetal ディレクトリに移動します。

  2. まだログインしていない場合は、Google Cloud CLI にログインします。

    gcloud auth login
    
  3. サービス アカウントを作成します。

    gcloud iam service-accounts create anthos-baremetal-gcr \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create anthos-baremetal-connect \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create anthos-baremetal-register \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create anthos-baremetal-cloud-ops \
        --project=PROJECT_ID
    
  4. サービス アカウントに必要な IAM ロールを付与します。

    gcloud projects add-iam-policy-binding  PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-connect@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/gkehub.connect"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-register@PROJECT_ID.iam.gserviceaccount.com" \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/logging.logWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/stackdriver.resourceMetadata.writer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/opsconfigmonitoring.resourceMetadata.writer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.dashboardEditor"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.viewer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/serviceusage.serviceUsageViewer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/kubernetesmetadata.publisher"
    
  5. サービス アカウントの JSON 鍵ファイルをダウンロードします。

    gcloud iam service-accounts keys create anthos-baremetal-gcr.json \
        --project=PROJECT_ID \
        --iam-account=anthos-baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com
    
    gcloud iam service-accounts keys create connect-agent.json \
        --project=PROJECT_ID \
        --iam-account=anthos-baremetal-connect@PROJECT_ID.iam.gserviceaccount.com
    
    gcloud iam service-accounts keys create connect-register.json \
        --project=PROJECT_ID \
        --iam-account=anthos-baremetal-register@PROJECT_ID.iam.gserviceaccount.com
    
    gcloud iam service-accounts keys create anthos-baremetal-cloud-ops.json \
        --project=PROJECT_ID \
        --iam-account=anthos-baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
    

Cloud Storage バケットにアクセスできるサービス アカウントを構成する

Cloud Storage へのアクセスには、サービス アカウントと鍵ファイルを使用します。このサービス アカウントを使用して、クラスタのスナップショットを Cloud Storage バケットに自動的にアップロードできます。または、GDC の VM ランタイムで使用する Cloud Storage バケットから仮想マシン(VM)イメージをインポートすることもできます。

サービス アカウントと鍵ファイルを作成するには、次の操作を行います。

  1. baremetal ディレクトリ内にいることを確認します。

  2. まだログインしていない場合は、Google Cloud CLI にログインします。

    gcloud auth login
    
  3. Google Cloud プロジェクトで、Cloud Storage API(storage.googleapis.com)がまだ有効になっていない場合は有効にします。

    gcloud services enable --project=PROJECT_ID \
        storage.googleapis.com
    
  4. クラスタが Cloud Storage バケットにアクセスするために使用できるサービス アカウントを作成します。

    gcloud iam service-accounts create SA_NAME \
        --project=PROJECT_ID
    

    SA_NAME は、新しいサービス アカウントの名前に置き換えます。このサービス アカウントの名前は、作成時にプロビジョニングされたメールアドレスに SA_NAME@PROJECT_ID.iam.gserviceaccount.com の形式で表示されます。

  5. 以下の権限を持つカスタムロールを作成します。

    • storage.buckets.create
    • storage.buckets.get
    • storage.buckets.list
    • storage.objects.create
    • resourcemanager.projects.get
    gcloud iam roles create ROLE_ID \
        --permissions=storage.buckets.create,storage.buckets.get,storage.buckets.list,storage.objects.create \
        --project=PROJECT_ID
    

    ROLE_ID は、新しいカスタムロールの名前(snapshotUpload など)に置き換えます。このカスタムロールの完全なパスの形式は projects/PROJECT_ID/roles/ROLE_ID です。

  6. サービス アカウントにポリシー バインディングを追加します。

    gcloud iam service-accounts add-iam-policy-binding SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --member=serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role='projects/PROJECT_ID/roles/ROLE_ID'
    
  7. サービス アカウントの JSON 鍵ファイルをダウンロードします。

    gcloud iam service-accounts keys create OUTPUT_FILE \
        --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com
    

クラスタ スナップショットを作成して Cloud Storage バケットに自動的にアップロードする方法について詳しくは、クラスタの問題の診断に役立つスナップショットを作成するをご覧ください。

Cloud Storage から VM イメージをインポートする方法の詳細については、認証情報を作成して使用し、GDC 上の VM ランタイム用 Cloud Storage からイメージをインポートするをご覧ください。