GKE Enterprise CLI を使用した新しいクラスタへの Anthos Service Mesh のインストール

このガイドでは、GKE Enterprise コマンドライン インターフェース(CLI)を使用して、新しい Google Cloud GKE クラスタに Anthos Service Mesh 1.5.10-asm.2 をインストールする方法について説明します。

インストールすると、次の機能が有効になります。

このガイドでは、クラスタと同じ Google Cloud プロジェクトにあるフリートにクラスタを登録する方法についても説明します。フリートを使用してクラスタを整理すると、複数のクラスタを簡単に管理できます。フリートにクラスタを登録することで、必要に応じてサービスやその他のインフラストラクチャをグループ化し、一貫したポリシーを適用できます。

現在、GKE Enterprise CLI では、GKE on VMware でのインストールはサポートしていません。Anthos Service Mesh を GKE on VMware にインストールするには、Anthos Service Mesh オンプレミスのインストールをご覧ください。

準備

このガイドは、以下のものがあることを前提としています。

インストールを開始する前に:

要件

  • GKE Enterprise の試用版ライセンスまたはサブスクリプションが必要です。詳細については、GKE Enterprise の料金ガイドをご覧ください。

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

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

  • Anthos Service Mesh を限定公開クラスタにインストールする場合に、自動サイドカー インジェクションを使用するには、ポート 15017 を開くファイアウォール ルールを追加する必要があります。ファイアウォール ルールを追加せず、自動サイドカー インジェクションを有効にすると、ワークロードのデプロイでエラーが発生します。ファイアウォール ルールの追加方法については、特定のユースケースに対するファイアウォール ルールの追加をご覧ください。

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

制限事項

1 つの Google Cloud プロジェクトにインストールできる Anthos Service Mesh は 1 つだけです。1 つのプロジェクトで複数のメッシュ デプロイはサポートされていません。

証明書データ

Mesh CA からの証明書には、アプリケーションのサービスに関する次のデータが含まれます。

  • Google Cloud プロジェクト ID。
  • GKE 名前空間
  • GKE サービス アカウント名

プロジェクトとクラスタのデフォルトの設定

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

    gcloud

    gcloud projects list

    コンソール

    1. Google Cloud コンソールで、[ダッシュボード] ページに移動します。

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

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

  2. プロジェクト ID の環境変数を作成します。

    export PROJECT_ID=YOUR_PROJECT_ID
  3. Google Cloud CLI のデフォルトのプロジェクト ID を設定します。

    gcloud config set project ${PROJECT_ID}
    
  4. クラスタのゾーンまたはリージョンを選択します。

    • シングルゾーン クラスタを作成する場合は、次のコマンドを実行して、使用可能な GCP ゾーンのリストを取得します。

      gcloud compute zones list
      
    • リージョン クラスタを作成する場合は、次のコマンドを実行して、使用可能なリージョンのリストを取得します。

      gcloud compute regions list
      
  5. 次の環境変数を作成します。

    • クラスタ名を設定します。

      export CLUSTER_NAME=YOUR_CLUSTER_NAME

      クラスタ名に使用できるのは、英小文字、数字、- のみです。先頭は英字、末尾は英数字を使用し、40 文字以下にする必要があります。

    • CLUSTER_LOCATION をクラスタのゾーンまたはリージョンに設定します。

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
  6. Google Cloud CLI のデフォルトのゾーンまたはリージョンを設定します。

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

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

      gcloud config set compute/region ${CLUSTER_LOCATION}

リソース構成ファイルの準備

  1. 必要に応じて、Anthos Service Mesh パッケージのリソース構成ファイル用に新しいディレクトリを作成します。複数のクラスタを設定する場合は、クラスタ名をディレクトリ名として使用できます。

  2. Anthos Service Mesh パッケージをダウンロードするディレクトリに変更します。

  3. Anthos Service Mesh パッケージを現在の作業ディレクトリにダウンロードします。

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.5-asm .
    
  4. クラスタ名を設定します。

      kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}

  5. 必要に応じて、kpt セッターを使用してリソース構成ファイルをカスタマイズします。デフォルトでは、これらのセッターは gcloud config のデフォルトを使用します。gcloud config のデフォルトを設定する場合、または値を変更する場合は、次のセッターを実行します。

    • プロジェクト ID を設定します。

      kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    • デフォルトのゾーンまたはリージョンを設定します。

      kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
  6. また、リソース構成ファイルを Cloud Source Repositories などの独自のソース管理システムにチェックインして、ファイルの変更をトラッキングすることもできます。

省略可能な値の設定

GKE Enterprise CLI では、他の値も設定できます。使用可能なセッターのリストを表示するには、次を実行します。

kpt cfg list-setters asm/

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

          NAME                            VALUE                SET BY   DESCRIPTION   COUNT
anthos.servicemesh.hub                    your_anthos_hub                               1
anthos.servicemesh.tag                    your_anthos_tag                               1
gcloud.compute.location                   your_zone_or_region                           8
gcloud.compute.network                    default                                       1
gcloud.compute.subnetwork                 default                                       1
gcloud.container.cluster                  your_cluster_name                             9
gcloud.container.cluster.releaseChannel   REGULAR                                       1
gcloud.container.nodepool.max-nodes       4                                             1
gcloud.core.project                       your_project_ID      kpt                     21
gcloud.project.projectNumber              your_project_number  kpt                      4 

たとえば、リリース チャンネルをデフォルト REGULAR から変更するには、次のコマンドで YOUR_CHANNELSTABLE または RAPID に置き換えます。

kpt cfg set asm gcloud.container.cluster.releaseChannel YOUR_CHANNEL

各チャネルの説明については、利用可能なチャネルをご覧ください。

マシンタイプまたはノード数の変更

GKE Enterprise CLI では、Anthos Service Mesh に必要なノード数とマシンタイプで新しいクラスタを作成します。これらの値は、nodepool.yaml で指定されます。4 つ以上の vCPU が存在する限り、nodepool.yaml のローカルコピーを変更して別のマシンタイプを指定できます。

次のセッターを使用して、システム要件に応じてノード数を増やすことができます。

kpt cfg set asm gcloud.container.nodepool.max-nodes NUMBER_OF_NODES

新しいクラスタへの Anthos Service Mesh のインストール

GKE Enterprise CLI では、Anthos Service Mesh が必要とする以下のオプションがクラスタで有効になります。

  • proj-PROJECT_NUMBER の形式でクラスタに mesh_id ラベルを追加します。ここで PROJECT_NUMBER はクラスタが作成されるプロジェクトのプロジェクト番号です。mesh_id ラベルは、指標を Google Cloud コンソールの Anthos Service Mesh ダッシュボードに表示するために必要です。クラスタに既存のラベルがある場合、GKE Enterprise CLI はそれらのラベルを保持します。

  • Workload Identity を有効にします。

  • Kubernetes Engine Monitoring を有効にします。

  • クラスタをリリース チャンネルの概要に登録します。

次のコマンドを実行して新しいクラスタを作成し、以前カスタマイズした Anthos Service Mesh 構成ファイルを使用して Anthos Service Mesh をインストールします。

gcloud beta anthos apply asm

コントロール プレーン コンポーネントの確認

istio-system のコントロール プレーン Pod が稼働していることを確認します。

kubectl get pod -n istio-system

予想される出力は次のようになります。

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

クラスタの登録

Google Cloud コンソールで統合ユーザー インターフェースにアクセスするには、クラスタをプロジェクトのフリートに登録する必要があります。フリートは、Google Cloud 外のクラスタを含むクラスタとそのワークロードを表示して管理するために統合された方法を提供します。

Google Cloud のサービス アカウントと鍵ファイルを作成する

クラスタを登録するには、サービス アカウントの認証情報を含む JSON ファイルが必要です。最小権限の原則に従い、登録するクラスタごとに個別のサービス アカウントを作成することをおすすめします。

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

  1. サービス アカウントの名前を選択して、その環境変数を作成します。

    export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
    
  2. サービス アカウントを作成します。

    gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
  3. プロジェクトのサービス アカウントをすべて一覧表示して、サービス アカウントが作成されたことを確認します。

    gcloud iam service-accounts list
  4. サービス アカウントに gkehub.connect IAM ロールをバインドします。

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.connect"
  5. JSON ファイルを保存するローカル ファイルパスの環境変数を作成します。ファイル名にサービス アカウント名とプロジェクト ID を使用することをおすすめします(例: /tmp/creds/${SERVICE_ACCOUNT_NAME}-${PROJECT_ID}.json)。

    export SERVICE_ACCOUNT_KEY_PATH=LOCAL_KEY_PATH
  6. サービス アカウントの秘密鍵の JSON ファイルをダウンロードします。

    gcloud iam service-accounts keys create ${SERVICE_ACCOUNT_KEY_PATH} \
       --iam-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

クラスタを登録する

次のコマンドを使用して、MEMBERSHIP_NAME を Hub に登録されているクラスタを一意に識別する名前に置き換えます。

gcloud container hub memberships register MEMBERSHIP_NAME \
    --gke-cluster=${CLUSTER_LOCATION}/${CLUSTER_NAME} \
    --service-account-key-file=${SERVICE_ACCOUNT_KEY_PATH}

次のような出力が返されます。

kubeconfig entry generated for CLUSTER_NAME.
Waiting for membership to be created...done.
Created a new membership [projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME] for the cluster [MEMBERSHIP_NAME]
Generating the Connect Agent manifest...
Deploying the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect]...
Deployed the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect].
Finished registering the cluster [MEMBERSHIP_NAME] with the Hub.

このサービス アカウント キーは、creds-gcp という名前のシークレットとして gke-connect 名前空間に保存されます。

クラスタの登録の詳細については、Connect のドキュメントでクラスタの登録をご覧ください。

サイドカー プロキシの挿入

Anthos Service Mesh は、サイドカー プロキシを使用してネットワークのセキュリティ、信頼性、オブザーバビリティを強化します。Anthos Service Mesh では、これらの機能がアプリケーションのプライマリ コンテナから抽出され、同じ Pod 内の個別のコンテナとして提供される共通のプロセス外プロキシに実装されます。

ワークロードをデプロイする前に、Anthos Service Mesh がトラフィックをモニタリングおよび保護できるように、サイドカー プロキシ インジェクションを構成します。

自動サイドカー インジェクションは、次のように 1 つのコマンドで有効にできます。

kubectl label namespace NAMESPACE istio-injection=enabled --overwrite

ここで、NAMESPACE はアプリケーションのサービスの名前空間の名前です。名前空間を明示的に作成していない場合は default です。

詳細については、サイドカー プロキシの挿入をご覧ください。

Anthos の [サービス メッシュ] ページの表示

サイドカー プロキシが挿入されたクラスタにワークロードをデプロイすると、Google Cloud コンソールの Anthos の [サービス メッシュ] ページで、Anthos Service Mesh が提供するすべてのオブザーバビリティ機能を確認できます。ワークロードをデプロイした後、Google Cloud コンソールにテレメトリー データが表示されるまでに 1~2 分ほどかかることがあります。

Google Cloud コンソールでの Anthos Service Mesh へのアクセスは、Identity and Access Management(IAM)によって制御されます。Anthos Service Mesh ページにアクセスするには、プロジェクト オーナーがユーザーに対して、プロジェクト編集者または閲覧者のロール、または、より限定的なロール(Google Cloud コンソールでの Anthos Service Mesh に対するアクセス制御を参照)を付与する必要があります。

  1. Google Cloud コンソールで、[Anthos Service Mesh] に移動します。

    Anthos の [サービス メッシュ] に移動する

  2. メニューバーのプルダウン リストから Google Cloud プロジェクトを選択します。

  3. 複数のサービス メッシュがある場合は、[サービス メッシュ] プルダウン リストからメッシュを選択します。

詳細については、Google Cloud コンソールでの Anthos Service Mesh の確認をご覧ください。

Anthos Service Mesh ページに加えて、サービスに関連する指標(特定のサービスで受信したリクエストの数など)が Cloud Monitoring に送信され、Metrics Explorer に表示されます。

指標を表示するには:

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

    [Monitoring] に移動

  2. [リソース] > [Metrics Explorer] を選択します。

指標の完全なリストについては、Cloud Monitoring のドキュメントの Istio 指標をご覧ください。

kpt を使用したサンプルのインストール

必要に応じて、kpt を使用して Hipster サンプルをクラスタにインストールできます。

  1. サンプルをダウンロードします。

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/microservices-demo.git/release \
    hipster-demo
    
  2. 自動サイドカー インジェクションを有効にします。

    kubectl label namespace default istio-injection=enabled
    
  3. サンプルをクラスタにデプロイします。

    kubectl apply -f hipster-demo
    
  4. アプリケーションの外部 IP アドレスを検索します。

    kubectl get service frontend-external
    
  5. ブラウザでアプリケーションに移動して、インストールを確認します。

    http://EXTERNAL_IP/

    実行中のサンプルがあるため、Google Cloud コンソールで Anthos Service Mesh のオブザーバビリティ機能を確認できます。トポロジグラフがメッシュに表示されるまで、最長で 10 分かかることがあります。

確認が終わったら、Hipster サンプルを削除します。

kubectl delete -f hipster-demo

次のステップ