Cloud Service Mesh(マネージド)の VPC Service Controls

Cloud Service Mesh(マネージド)は、新しいコントロール プレーンの一般提供(GA)機能として VPC Service Controls をサポートしています。

コントロール プレーンが VPC Service Controls GA をサポートしているかどうかを確認するには、メンバーシップのメッシュ機能の状態が VPCSC_GA_SUPPORTED 条件に設定されているかどうかを確認します。

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

出力は次のようになります。

(...)
membershipStates:
  projects/FLEET_PROJECT_NUMBER/locations/MEMBERSHIP_LOCATION/memberships/MEMBERSHIP_ID:
    servicemesh:
      conditions:
      - code: VPCSC_GA_SUPPORTED
        details: This control plane supports VPC Service Controls GA.
        documentationLink: http://cloud.google.com/service-mesh/docs/managed/VPC Service Controls
        severity: INFO
(...)

VPCSC_GA_SUPPORTED 条件を報告しない既存のコントロール プレーンがあり、VPC Service Controls を使用する場合は、サポートにお問い合わせください。

始める前に

VPC Service Controls の組織ポリシーとサービス境界は、組織レベルで構成されます。VPC Service Controls の管理に必要なロールが付与されていることを確認してください。

VPC Service Controls のサービス境界を設定する

以下の手順に沿ってサービス境界を作成または更新します。

  1. サービス境界にクラスタ プロジェクトとフリート プロジェクトを追加します。サービス メッシュを複数の VPC Service Controls 境界に分散させることはできません。

  2. 制限付きサービスをサービス境界に追加します。

    サービス境界の許可されたサービスのリストと制限付きサービスのリストに特定のサービスを追加する必要があります。そうすることで、Cloud Service Mesh クラスタがそれらのサービスにアクセスできます。これらのサービスへのアクセスは、クラスタの Virtual Private Cloud(VPC)ネットワーク内でも制限されます。

    これらのサービスを追加しないと、Cloud Service Mesh でエラーが発生するか、Cloud Service Mesh が適切に機能しない場合があります。たとえば、Mesh Configuration API をサービス境界に追加しない場合、インストールは失敗し、ワークロードは Envoy の構成をマネージド コントロール プレーンから受信しません。

    コンソール

    1. サービス境界の更新の手順に沿って境界を編集します。
    2. [VPC サービス境界の編集] ページをクリックします。
    3. [制限付きサービス] の [保護するサービス] で、[サービスを追加] をクリックします。
    4. [制限するサービスの指定] ダイアログで [サービスをフィルタ] をクリックし、「Mesh Configuration API」と入力します。
    5. サービスのチェックボックスをオンにします。
    6. [Mesh Configuration API を追加] をクリックします。
    7. 手順 c~f を繰り返して、以下を追加します。
      • Cloud Service Mesh Certificate Authority API
      • GKE Hub API
      • Cloud IAM API
      • Cloud Monitoring API
      • Cloud Trace API
      • Cloud Monitoring API
      • Google Cloud Resource Manager API
      • Google Compute Engine API
      • Google Container Registry API
      • Artifact Registry API
      • Google Cloud Storage API
      • Cloud Logging API
      • Security Token Service API
    8. [保存] をクリックします。

    gcloud

    制限付きサービスのリストを更新するには、update コマンドを使用して、追加するサービスをカンマ区切りリストとして指定します。

    gcloud access-context-manager perimeters update PERIMETER_NAME \
      --add-restricted-services=meshconfig.googleapis.com,meshca.googleapis.com,gkehub.googleapis.com,iam.googleapis.com,monitoring.googleapis.com,cloudtrace.googleapis.com,monitoring.googleapis.com,cloudresourcemanager.googleapis.com,compute.googleapis.com,containerregistry.googleapis.com,artifactregistry.googleapis.com,storage.googleapis.com,logging.googleapis.com,sts.googleapis.com \
      --policy=POLICY_NAME

    ここで

    • PERIMETER_NAME は、更新するサービス境界の名前です。

    • POLICY_NAME は組織のアクセス ポリシーの名前です。例: 330193482019

  3. [VPC のアクセス可能なサービス] をクリックして「すべての制限付きサービス」に設定し、上記の手順で制限したサービスに VPC Service Controls 境界内から引き続きアクセスできるようにします。

  4. Cloud Service Mesh を境界ネットワークからインストールしない限り、asmcli コマンドを実行する ID にサービス境界へのアクセスを許可する上り(内向き)ルールを追加します。

    詳細については、サービス境界の更新をご覧ください。

VPC Service Controls の境界にマネージド Cloud Service Mesh をインストールする

マネージド Cloud Service Mesh を構成するの手順に沿って操作します。続いて、コントロール プレーンが正常にプロビジョニングされていることを確認し、VPC Service Controls 関連のエラーがないことを確かめます。

トラブルシューティング

最新の GKE 1.22 イメージでクラスタを作成できない

VPC Service Controls の制限された環境で最新の 1.22 イメージを使用してクラスタを作成できないという既知の問題があります。この問題を回避するには、次のように、まずデフォルトの GKE チャンネル イメージでこのクラスタを作成してから、イメージをアップグレードします。

gcloud container clusters create CLUSTER \
  --region REGION \
  --release-channel=rapid \
  --workload-pool=PROJECT_ID.svc.id.goog \
  --project PROJECT_ID
gcloud container clusters upgrade CLUSTER \
  --region REGION \
  --master --cluster-version 1.22 \
  --project PROJECT_ID

コンテナがコンテナ イメージをダウンロードできない

これは、イメージがサービス境界の外側にある場合に発生することがあります。ダウンロードするイメージを境界内にあるバケットに移動するか、境界を更新して下り(外向き)ルールを追加します。通常、下り(外向き)ルールでは、選択した ID に Container Registry APIArtifact Registry APICloud Storage API へのアクセスを許可できます。

ControlPlaneRevision CRD のステータス フィールドに VPC Service Controls のエラーが表示される

次のコマンドを実行してエラーの詳細情報を取得します。

gcloud logging read --project=PROJECT_ID \
'protoPayload.metadata.@type=type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata'

ここで

  • PROJECT_ID は、エラーが発生したプロジェクトのプロジェクト ID です。