バージョン 1.9

GKE に Anthos Service Mesh をインストールするためのセットアップ

このページでは、同じプロジェクトに存在するクラスタで構成されるメッシュの Cloud プロジェクトと Google Kubernetes Engine(GKE)クラスタにおける、Anthos Service Mesh のインストール要件とセットアップについて説明します。Google が提供するスクリプト install_asm を使用する場合は、--enable_all フラグまたはより詳細な有効化フラグを指定した場合に、このスクリプトによってプロジェクトとクラスタを構成できます。install_asm を変更せずにご自分でセットアップする場合は、このページの手順に沿って進めてください。以前のバージョンの Anthos Service Mesh がすでにインストールされている場合は、最新の Anthos Service Mesh バージョンに install_asm を使用してアップグレードする前に、プロジェクトまたはクラスタを変更する必要はありません。

始める前に

このガイドでは、次のものが用意されていることを前提としています。

要件

  • GKE クラスタは次の要件を満たす必要があります。

    • 4 つ以上の vCPU を備えたマシンタイプ(e2-standard-4 など)。クラスタのマシンタイプに 4 つ以上の vCPU がない場合は、異なるマシンタイプへのワークロードの移行の説明に従ってマシンタイプを変更します。

    • ノードの最小数は、マシンタイプによって異なります。Anthos Service Mesh には、8 つ以上の vCPU が必要です。4 つの vCPU を持つマシンタイプの場合、クラスタには少なくとも 2 つのノードが必要です。8 つの vCPU を持つマシンタイプの場合、クラスタに必要なノードは 1 つだけです。ノードを追加する必要がある場合は、クラスタのサイズ変更をご覧ください。

    • Anthos Service Mesh をインストールする前にクラスタを作成するには、Workload Identity を有効にします。Workload Identity は、Google API を呼び出すためのおすすめの方法です。Workload Identity を有効にすると、Workload Identity の制限事項で説明されているように、ワークロードから Google API への呼び出し方法が変わります。

    • クラスタをリリース チャンネルに登録します。この操作は省略できますが、行うことをおすすめします。Regular リリース チャンネルに登録することをおすすめします。他のチャネルは Anthos Service Mesh 1.9.2 でサポートされていない GKE バージョンをベースにしていることがあります。詳細については、サポートされている環境をご覧ください。静的 GKE バージョンがある場合は、既存のクラスタをリリース チャンネルに登録するの手順に従ってください。

  • サービス メッシュに含めるには、サービスポートに名前を付ける必要があります。名前には、name: protocol[-suffix] の構文でポートのプロトコルを含める必要があります。角かっこは、ダッシュで始まるオプションの接尾辞です。詳細については、サービスポートの命名をご覧ください。

  • 限定公開クラスタに Anthos Service Mesh をインストールする場合は、ファイアウォールでポート 15017 を開き、自動サイドカー インジェクションで使用される Webhook が適切に機能する必要があります。詳細については、限定公開クラスタのポートを開くをご覧ください。

  • 組織にサービス境界を作成した場合は、Mesh CA サービスを境界に追加する必要があります。詳細については、サービス境界へのメッシュ CA の追加をご覧ください。

  • 1 つの Google Cloud プロジェクトに関連付けることができるメッシュは 1 つのみです。

install_asm を実行すると、クラスタが必要とされる最小限のマシンタイプとノード数を満たしていることが確認されます。

プロジェクトの設定

  1. クラスタが作成されたプロジェクトのプロジェクト ID とプロジェクト番号を取得します。

    gcloud

    次のコマンドを実行します。

    gcloud projects list
    

    Console

    1. Cloud Console で [ダッシュボード] ページに移動します。

      [ダッシュボード] ページに移動する

    2. ページの上部にあるプルダウン リストをクリックします。表示された [選択元] ウィンドウで、プロジェクトを選択します。

      プロジェクト ID とプロジェクト番号が、プロジェクト ダッシュボードの [プロジェクト情報] カードに表示されます。

  2. 次の環境変数を作成します。

    • プロジェクト ID を使用してワークロード プールを設定します。

      export WORKLOAD_POOL=PROJECT_ID.svc.id.goog
      
    • プロジェクト番号を使用して、メッシュ ID を設定します。

      export MESH_ID="proj-PROJECT_NUMBER"
      
  3. 必要な Identity and Access Management(IAM)のロールを設定します。ご自身がプロジェクト オーナーである場合は、インストールを完了するために必要なすべての権限が付与されます。ご自身がプロジェクト オーナーでない場合は、次の特定の IAM ロールの付与について他の担当者に依頼する必要があります。次のコマンドの PROJECT_ID は、前の手順のプロジェクト ID に置き換え、GCP_EMAIL_ADDRESS は Google Cloud へのログインに使用するアカウントに置き換えます。

    ROLES=(
    'roles/servicemanagement.admin' \
    'roles/serviceusage.serviceUsageAdmin' \
    'roles/meshconfig.admin' \
    'roles/compute.admin' \
    'roles/container.admin' \
    'roles/resourcemanager.projectIamAdmin' \
    'roles/iam.serviceAccountAdmin' \
    'roles/iam.serviceAccountKeyAdmin' \
    'roles/gkehub.admin')
    for role in "${ROLES[@]}"
    do
      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "user:GCP_EMAIL_ADDRESS" \
        --role="$role"
    done
    

    install_asm の実行時に --enable_all フラグまたは --enable_gcp_iam_roles フラグを指定すると、必要な IAM ロールが自動的に設定されます。

  4. 次の Google API を有効にします。

    gcloud services enable \
        --project=${PROJECT_ID} \
        container.googleapis.com \
        compute.googleapis.com \
        monitoring.googleapis.com \
        logging.googleapis.com \
        cloudtrace.googleapis.com \
        meshca.googleapis.com \
        meshtelemetry.googleapis.com \
        meshconfig.googleapis.com \
        iamcredentials.googleapis.com \
        gkeconnect.googleapis.com \
        gkehub.googleapis.com \
        cloudresourcemanager.googleapis.com \
        stackdriver.googleapis.com

    API の有効化に数分かかることがあります。API が有効になると、次のような出力が表示されます。

    Operation "operations/acf.601db672-88e6-4f98-8ceb-aa3b5725533c" finished
    successfully.
    

    install_asm の実行時に --enable_all フラグまたは --enable_apis フラグを指定すると、必要な API が自動的に有効にされます。

クラスタの設定

--enable_all フラグ、またはより詳細な有効化フラグのいずれかを指定すると、install_asm スクリプトによってクラスタが設定されます

  1. gcloud コマンドライン ツールのデフォルトのゾーンまたはリージョンを設定します。ここでデフォルトを設定しない場合、このページの gcloud container clusters コマンドに --zone オプションまたは --region オプションを指定してください。

    • シングルゾーン クラスタがある場合は、デフォルト ゾーンを設定します。

      gcloud config set compute/zone CLUSTER_LOCATION
      
    • リージョン クラスタがある場合は、デフォルト リージョンを設定します。

      gcloud config set compute/region CLUSTER_LOCATION
      
  2. クラスタに mesh_id ラベルを設定します。クラスタの既存のラベルを残す場合は、mesh_id ラベルの追加時にそれらのラベルを含める必要があります。

    1. クラスタに既存のラベルがあるかどうかを確認するには:

      gcloud container clusters describe CLUSTER_NAME \
          --project PROJECT_ID
      

      出力で resourceLabels フィールドを探します。ラベルは、resourceLabels フィールドごとに別々の行に格納されます。次に例を示します。

      resourceLabels:
        csm: ''
        env: dev
        release: stable

      利便性を考えて、環境変数にラベルを追加することもできます。以下の例の YOUR_EXISTING_LABELS は、クラスタに存在するラベルのカンマ区切りのリスト(KEY=VALUE 形式、たとえば env=dev,release=stable)で置き換えます。

      export EXISTING_LABELS="YOUR_EXISTING_LABELS"
      
    2. mesh_id ラベルを設定します。

      • クラスタの既存のラベルを残す場合は、mesh_id と既存のラベルでクラスタを更新します。

        gcloud container clusters update CLUSTER_NAME \
            --project PROJECT_ID \
            --update-labels=mesh_id${MESH_ID},${EXISTING_LABELS}
        
      • クラスタに既存のラベルがない場合は、mesh_id ラベルだけでクラスタを更新します。

        gcloud container clusters update CLUSTER_NAME \
            --project=PROJECT_ID \
            --update-labels=mesh_id=${MESH_ID}
        
  3. Workload Identity を有効にします。

    gcloud container clusters update CLUSTER_NAME \
        --project=PROJECT_ID \
        --workload-pool=${WORKLOAD_POOL}
    

    Workload Identity の有効化には、最長で 10~15 分ほどかかることがあります。

  4. GKE で Cloud Monitoring と Cloud Logging を有効にします。

    gcloud container clusters update CLUSTER_NAME \
        --project=PROJECT_ID \
        --enable-stackdriver-kubernetes
    

次のステップ

これで、プロジェクトと GKE クラスタについて、新規インストールまたは Istio からの移行の準備が完了しました。install_asm を使用して Anthos Service Mesh をインストールする場合は、このスクリプトは istioctl install を呼び出す前にプロジェクトとクラスタを検証し、インストールの失敗を回避します。

始める前に、次のことを行います。