このガイドでは、GKE Enterprise コマンドライン インターフェース(CLI)を使用して、既存の Google Cloud GKE クラスタに Anthos Service Mesh バージョン 1.5.10-asm.2 をクリーン インストールする方法を説明します。この GKE Enterprise CLI のベータ版では、次の制限事項に注意してください。
- アップグレードはサポートされていません。以前のバージョンの Anthos Service Mesh がクラスタにインストールされている場合は、GKE での Anthos Service Mesh のアップグレードをご覧ください。
- GKE on VMware には、インストールできません。Anthos Service Mesh を既存の GKE on VMware クラスタにインストールするには、Anthos Service Mesh オンプレミスのインストールをご覧ください。
インストールすると、次の機能が有効になります。
- メッシュ テレメトリー。
- メッシュ セキュリティ。Anthos Service Mesh 認証局(Mesh CA)を含む。
- サポートされている機能に記載されているサポート対象のデフォルトの機能。
このガイドでは、クラスタと同じ Google Cloud プロジェクトにあるフリートにクラスタを登録する方法についても説明します。フリートを使用してクラスタを整理すると、複数のクラスタを簡単に管理できます。フリートにクラスタを登録することで、必要に応じてサービスやその他のインフラストラクチャをグループ化し、一貫したポリシーを適用できます。
始める前に
インストールを開始する前に:
- 環境を設定します。
- GKE Enterprise CLI をインストールします。
- 次の要件と制限事項をご確認ください。
要件
GKE Enterprise の試用版ライセンスまたはサブスクリプションが必要です。詳細については、GKE Enterprise の料金ガイドをご覧ください。
GKE クラスタは次の要件を満たす必要があります。
- 少なくとも 4 つのノード。
- 最小のマシンタイプが 4 つの vCPU を備えた
e2-standard-4
。 - 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 サービス アカウント名
プロジェクトとクラスタのデフォルトの設定
クラスタが作成されたプロジェクトのプロジェクト ID を取得します。
gcloud
gcloud projects list
コンソール
Google Cloud コンソールで、[ダッシュボード] ページに移動します。
ページ上部の [選択元] プルダウン リストをクリックします。表示された [選択元] ウィンドウで、プロジェクトを選択します。プロジェクト ID は、プロジェクト ダッシュボードの [プロジェクト情報] カードに表示されます。
プロジェクト ID の環境変数を作成します。
export PROJECT_ID=
YOUR_PROJECT_ID
Google Cloud CLI のデフォルトのプロジェクト ID を設定します。
gcloud config set project ${PROJECT_ID}
次の環境変数を作成します。
クラスタ名を設定します。
export CLUSTER_NAME=YOUR_CLUSTER_NAME
CLUSTER_LOCATION
をクラスタのゾーンまたはリージョンに設定します。export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
Google Cloud CLI のデフォルトのゾーンまたはリージョンを設定します。
シングルゾーン クラスタがある場合は、デフォルト ゾーンを設定します。
gcloud config set compute/zone ${CLUSTER_LOCATION}
リージョン クラスタがある場合は、デフォルト リージョンを設定します。
gcloud config set compute/region ${CLUSTER_LOCATION}
リソース構成ファイルの準備
GKE Enterprise CLI と kustomize
を使用して、Config Connector リソース ファイルのエクスポートとパッチ適用を行います。このファイルは、Anthos Service Mesh に必要なオプションで既存のクラスタを更新する際に使用します。Config Connector リソースは Google Cloud リソースの Kubernetes 表現です。
リソース構成ファイルをエクスポートする
既存のクラスタ用のリソース構成ファイルを出力するには、gcloud beta anthos export
コマンドを使用します。
Anthos Service Mesh リソース用のディレクトリを作成します。便宜上、次の手順では ASM_RESOURCES として作成したディレクトリを参照します。
ASM_RESOURCES ディレクトリに移動します。
asm-patch
パッケージを現在の作業ディレクトリにダウンロードします。kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm-patch@release-1.5-asm .
このコマンドで、
asm-patch/
というサブディレクトリが作成されます。BASE_DIR
という環境変数にディレクトリ名を追加します。既存のクラスタに対してgcloud beta anthos export
コマンドを実行すると、GKE Enterprise CLI はBASE_DIR
で指定された名前のディレクトリを作成し、Config Connector リソース ファイルをこのディレクトリに出力します。export BASE_DIR=YOUR_BASE_DIR
複数のクラスタを設定する場合は、クラスタ名をディレクトリ名として使用することをおすすめします。たとえば、2 つのクラスタのリソース構成ファイルを準備する場合、
cluster-1
とcluster-2
にgcloud beta anthos export
コマンドを実行すると、ディレクトリ構造は次のようになります。この図では、
cluster-1
とcluster-2
はcluster-1
とcluster-2
という名前のクラスタの Config Connector リソース構成ファイルが含まれているディレクトリです。Config Connector リソース構成ファイルをエクスポートします。
gcloud beta anthos export ${CLUSTER_NAME} --output-directory ${BASE_DIR}
export
コマンドは、現在のgcloud config
設定に合わせて、クラスタのリソース構成ファイルにプロジェクト ID とクラスタゾーン / リージョンを追加します。現在のgcloud config
設定と一致しないクラスタのリソース構成ファイルをエクスポートする場合は、次のコマンドライン オプションを指定できます。-p PROJECT_ID
-l YOUR_ZONE_OR_REGION
詳細は、
gcloud beta anthos export --help
をご覧ください。
リソース構成ファイルにパッチを適用する
GKE Enterprise の kpt
セッターと kustomize
を使用して、リソース構成ファイルを更新します。
asm-patch
パッケージ内の使用可能な構成セッターをリストで表示します。kpt cfg list-setters asm-patch/
出力は次のようになります。
NAME VALUE SET BY DESCRIPTION COUNT base-dir base 1 gcloud.compute.location your_zone_or_region 1 gcloud.container.cluster your_cluster_name 3 gcloud.core.project your_project_id kpt 11 gcloud.project.projectNumber your_project_number kpt 1
${BASE_DIR}
ディレクトリとasm-patch
ディレクトリの間の相対パスを設定します。kpt cfg set asm-patch/ base-dir ../${BASE_DIR}
クラスタ名を設定します。
kpt cfg set asm-patch/ gcloud.container.cluster ${CLUSTER_NAME}
gcloud config
のデフォルトを設定していない場合、または値を変更する場合は、次のセッターを実行します。kpt cfg set asm-patch/ gcloud.compute.location ${CLUSTER_LOCATION}
kpt cfg set asm-patch/ gcloud.core.project ${PROJECT_ID}
Anthos Service Mesh パッチをクラスタのリソース構成ファイルに適用します。
pushd ${BASE_DIR} && kustomize create --autodetect \ --namespace ${PROJECT_ID} && popd
pushd asm-patch && kustomize build -o ../${BASE_DIR}/all.yaml && popd
最終的なリソース構成を検証します。
kpt fn source ${BASE_DIR} | kpt fn run --image gcr.io/kustomize-functions/validate-asm:v0.1.0
エラーが発生した場合は、修正してリソース構成を再度検証します。
また、リソース構成ファイルを Cloud Source Repositories などの独自のソース管理システムにチェックインして、ファイルの変更をトラッキングすることもできます。
クラスタの更新と 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 をインストールします。
gcloud beta anthos apply ${BASE_DIR}
このコマンドは、必要なオプションを使用してクラスタを更新し、Anthos Service Mesh をデプロイします。このプロセスが完了するまでに約 30 分かかります。
コントロール プレーン コンポーネントの確認
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 ファイルが必要です。最小権限の原則に従い、登録するクラスタごとに個別のサービス アカウントを作成することをおすすめします。
サービス アカウントとキーファイルを作成するには:
サービス アカウントの名前を選択して、その環境変数を作成します。
export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
サービス アカウントを作成します。
gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
プロジェクトのサービス アカウントをすべて一覧表示して、サービス アカウントが作成されたことを確認します。
gcloud iam service-accounts list
サービス アカウントに 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"
JSON ファイルを保存するローカル ファイルパスの環境変数を作成します。ファイル名にサービス アカウント名とプロジェクト ID を使用することをおすすめします(例:
/tmp/creds/${SERVICE_ACCOUNT_NAME}-${PROJECT_ID}.json
)。export SERVICE_ACCOUNT_KEY_PATH=LOCAL_KEY_PATH
サービス アカウントの秘密鍵の 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 のインストール前にクラスタで実行されていたワークロードの場合、現在の Anthos Service Mesh バージョンを使用するように、サイドカー プロキシを挿入または更新する必要があります。新しいワークロードをデプロイする前に、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 に対するアクセス制御を参照)を付与する必要があります。
Google Cloud コンソールで、[Anthos Service Mesh] に移動します。
メニューバーのプルダウン リストから Google Cloud プロジェクトを選択します。
複数のサービス メッシュがある場合は、[サービス メッシュ] プルダウン リストからメッシュを選択します。
詳細については、Google Cloud コンソールでの Anthos Service Mesh の確認をご覧ください。
Anthos Service Mesh ページに加えて、サービスに関連する指標(特定のサービスで受信したリクエストの数など)が Cloud Monitoring に送信され、Metrics Explorer に表示されます。
指標を表示するには:
Google Cloud コンソールで、[Monitoring] ページに移動します。
[リソース] > [Metrics Explorer] を選択します。
指標の完全なリストについては、Cloud Monitoring のドキュメントの Istio 指標をご覧ください。
kpt
を使用したサンプルのインストール
必要に応じて、kpt
を使用して Hipster サンプルをクラスタにインストールできます。
サンプルをダウンロードします。
kpt pkg get \ https://github.com/GoogleCloudPlatform/microservices-demo.git/release \ hipster-demo
自動サイドカー インジェクションを有効にします。
kubectl label namespace default istio-injection=enabled
サンプルをクラスタにデプロイします。
kubectl apply -f hipster-demo
アプリケーションの外部 IP アドレスを検索します。
kubectl get service frontend-external
ブラウザでアプリケーションに移動して、インストールを確認します。
http://EXTERNAL_IP/
実行中のサンプルがあるため、Google Cloud コンソールで Anthos Service Mesh のオブザーバビリティ機能を確認できます。トポロジグラフがメッシュに表示されるまで、最長で 10 分かかることがあります。
確認が終わったら、Hipster サンプルを削除します。
kubectl delete -f hipster-demo
次のステップ
GKE Enterprise CLI で使用されている構成リソースの詳細を確認します。