Cloud Service Mesh の Gateway API の設定を準備する

このページでは、ゲートウェイに必要なカスタム リソース定義をクラスタにインストールする方法について説明します。

制限事項

  • 同じフリート内での gateway config-api クラスタと istio config-api クラスタの混在はサポートされていません。
  • マルチクラスタ サービス ディスカバリとロード バランシングは、gateway config-api クラスタではサポートされていません。
  • 既存の --management automatic フラグを使用してクラスタがオンボーディングされると、クラスタは istio 構成 API の使用を開始し、gateway API に変更できなくなります。
  • FQDN のみがサポートされます。略称はサポートされていません。

前提条件

このガイドは、Google Cloud プロジェクトを作成し、kubectl をインストールしていることを前提としています。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Enable the APIs

GKE クラスタの作成と登録

gcloud

GKE クラスタを作成します。

gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--enable-ip-alias \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--release-channel=regular \
--project=PROJECT_ID \
--gateway-api=standard \
--workload-pool=PROJECT_ID.svc.id.goog \
--workload-metadata=GKE_METADATA

ここで

  • CLUSTER_NAME はクラスタの名前
  • LOCATION は、クラスタの場所
  • PROJECT_ID は、クラスタのプロジェクト ID

Console

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. [Standard] セクションで [構成] をクリックします。

  4. [クラスタの基本] セクションで、次の操作を行います。

    1. クラスタの名前を [名前] に入力します。
    2. [ロケーション タイプ] で、クラスタの Compute Engine リージョンを選択します。
  5. ナビゲーション パネルの [ノードプール] セクションで [default-pool] をクリックし、[セキュリティ] を選択します。

  6. [アクセス スコープ] リストで、[各 API にアクセス権を設定] を選択し、[Cloud Platform] を [有効] に設定します。

  7. ナビゲーション パネルの [クラスタ] セクションで、[ネットワーキング] をクリックします。

  8. [クラスタ ネットワーキング] リストで、[Gateway API を有効にする] を選択します。

  9. ナビゲーション パネルの [クラスタ] セクションで、[セキュリティ] をクリックします。

  10. [セキュリティ] リストで、[Workload Identity を有効にする] を選択します。

  11. [作成] をクリックします。

クラスタの作成後、

  1. クラスタをフリートに登録します。

    gcloud container fleet memberships register CLUSTER_NAME \
    --gke-cluster LOCATION/CLUSTER_NAME \
    --project=PROJECT_ID
    
  2. クラスタがフリートに登録されていることを確認します。

    gcloud container fleet memberships list --project=PROJECT_ID
    

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

    NAME            EXTERNAL_ID                             LOCATION
    my-cluster      91980bb9-593c-4b36-9170-96445c9edd39    us-west1
    

権限を設定する

次のコマンドは、認証されたすべてのユーザーに権限を付与しますが、Workload Identity Federation for GKE を使用して、特定のアカウントにのみ権限を付与できます。

  1. trafficdirector.client ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \
        --role "roles/trafficdirector.client"
    
  2. container.developer ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role "roles/container.developer"
    

    ここで、PROJECT_NUMBER はプロジェクト番号です。

  3. compute.networkAdmin ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role "roles/compute.networkAdmin"
    

    ここで、PROJECT_NUMBER はプロジェクト番号です。

Cloud Service Mesh を有効にする

  1. メッシュ機能を有効にします。

    gcloud container fleet mesh enable --project PROJECT_ID
    
  2. Gateway API を使用するようにメッシュを更新します。

    gcloud alpha container fleet mesh update \
    --config-api gateway \
    --memberships CLUSTER_NAME \
    --project PROJECT_ID
    
  3. Cloud Service Mesh リソースのステータスを記述して、更新を確認します。

    gcloud alpha container fleet mesh describe
    

デフォルトで Gateway API を使用するようにフリートの新しいメンバーシップを設定する(省略可)

または、クラスタの作成時にフリートに登録される新しい GKE クラスタのフリートレベルのデフォルト設定を作成して、Gateway API で自動的に構成することもできます。

  1. Gateway API を使用するように指定する YAML ファイルを作成します。

    echo "configapi: gateway" > mesh.yaml
    
  2. メッシュを更新します。

    gcloud alpha container fleet mesh update --project FLEET_PROJECT_ID \
        --fleet-default-member-config mesh.yaml
    
  3. クラスタを作成してフリートに登録する操作を 1 ステップで行うには、デフォルト構成を使用します。

    gcloud container clusters create CLUSTER_NAME \
        --project PROJECT_ID \
        --fleet-project FLEET_PROJECT_ID \
        --location=LOCATION \
    
  4. GKE 用 Workload Identity 連携を有効にして、ノードで GKE メタデータ サーバーを実行します。

カスタム リソース定義をインストールする

クラスタの kubeconfig エントリを生成します。

gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID

ここで

  • CLUSTER_NAME はクラスタの名前
  • LOCATION は、クラスタの場所
  • PROJECT_ID は、クラスタのプロジェクト ID

GRPCRoute カスタム リソース定義(CRD)をインストールします。

curl https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.1.0/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml \
| kubectl apply -f -

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

customresourcedefinition.apiextensions.k8s.io/grpcroutes.gateway.networking.k8s.io created

次のステップ