GSP654
概要
Istio は、マイクロサービスを接続、保護、管理するためのオープンソース フレームワークです。Kubernetes クラスタでホストされているサービスを含む(ただしそれに限定されない)任意のサービスで使用できます。Istio を使用すると、サービスのコードを変更することなく、ロード バランシング、サービス間の認証、モニタリングなどを組み込んだデプロイ サービスのネットワークを構築できます。
たとえば、信頼性の高い分散システムでは、障害の後にリクエストを再試行することが一般的です(このとき指数バックオフ遅延を使用することもあります)。リクエストの再試行を行う Java、Golang、NodeJS 用のライブラリがありますが、アプリ内でそれらを採用する場合、それぞれの異なるアプリが独立してその問題を解決する必要があります。このような場合に Istio サイドカーを利用すると、アプリの代わりにリクエストの再試行を自動的に行うことができます。
Cloud Service Mesh
Cloud Service Mesh(ASM)は Istio を活用しています。Cloud Service Mesh では、エンタープライズ環境でテストされ完全にサポートされている Istio のディストリビューションを利用できます。クラスタの運用場所が Google Cloud でもオンプレミスでも、GKE Enterprise でサービス メッシュを作成、デプロイできます。
構成プロファイルが含まれており、Google Kubernetes Engine または GKE on Bare Metal 向けにカスタマイズされた推奨設定を使用できます。
また、Cloud Service Mesh は、信頼性の高い安全なサービスを一元的にモニタリングおよび管理するための充実した機能とツールを備えています。
- メッシュの GKE クラスタ内の HTTP(S) トラフィックに関して、サービスの指標とログが自動的に Google Cloud に取り込まれる。
-
事前構成されたサービス ダッシュボードで、サービスを理解するために必要な情報を確認できる。
- 詳細なテレメトリーで指標とログを詳しく分析し、さまざまな属性に基づきデータをフィルタ、スライスできる。
-
サービス同士の関係が可視化されるため、サービスの接続関係、依存関係を理解するのに役立つ。
-
サービスレベル目標(SLO)によって、サービスの状態についての分析情報を得られる。サービスの状態に関する独自の基準を使用して SLO とアラートを簡単に定義できる。
豊富な機能を備えた Cloud Service Mesh を利用することで、Istio ベースのサービス メッシュを GKE Enterprise クラスタ上に簡単に実装できます。
このラボでは、GKE クラスタに Cloud Service Mesh をインストールします。
学習内容
このラボでは、次のタスクの実行方法について学びます。
- Google Kubernetes Engine(GKE)でクラスタをプロビジョニングする
- Cloud Service Mesh をインストールして構成する
- Istio 対応のマルチサービス アプリケーションである Bookinfo をデプロイする
- Istio Ingress ゲートウェイを使用して外部アクセスを有効にする
- Bookinfo アプリケーションを使用する
- Cloud Service Mesh ダッシュボードでサービスのパフォーマンスをモニタリングする
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。
右側の [ラボの設定とアクセス] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- このラボで使用する一時的な認証情報(ユーザー名とパスワード)
- このラボを行うために必要なその他の情報(ある場合)
ラボのタイマーはページの上部に表示され、残り時間が示されます。
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示された場合は、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの設定とアクセス] パネルでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの設定とアクセス] パネルでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで指定された認証情報を使用する必要があります。ご自身の Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後のページはクリックして先に進みます。
- 利用規約に同意します。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
しばらくすると、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン
をクリックします。
-
ウィンドウで次の操作を行います。
- Cloud Shell 情報ウィンドウで操作を進めます。
- Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。
接続した時点で認証が完了しており、プロジェクトに各自の Project_ID、 が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
- [承認] をクリックします。
出力:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. プロジェクトを設定する
SDK の構成を確認する
-
Cloud Shell で、デフォルトのアカウントが構成されていることを確認します。
Qwiklabs で生成されたユーザー アカウントを使用するように Cloud SDK が構成されていることを確認します。
gcloud config list
出力:
[component_manager]
disable_update_check = True
[compute]
gce_metadata_read_timeout_sec = 5
[core]
account = student-xx-xxxx@qwiklabs.net
disable_usage_reporting = False
project = qwiklabs-gcp-yy-####
[metrics]
environment = devshell
Your active configuration is: [cloudshell-#####]
-
必要に応じてプロジェクトの構成を更新します。
SDK にデフォルトのプロジェクトが適切に設定されていない場合は、構成を更新します。[project_id] は、Qwiklabs の手順ページの認証情報のセクションに表示されているプロジェクト名に置き換えます。
gcloud config set project [project_id]
環境変数を構成する
- 設定とインストールのコマンドで使用される環境変数を構成します。
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} \
--format="value(projectNumber)")
export CLUSTER_NAME=central
export CLUSTER_ZONE={{{project_0.default_zone | zone}}}
export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog
export MESH_ID="proj-${PROJECT_NUMBER}"
注:
-
WORKLOAD_POOL は、Workload Identity を有効にするために使用されます。Workload Identity は、GKE アプリケーションから Google Cloud サービスに安全にアクセスするおすすめの方法です。
-
MESH_ID は、クラスタに mesh_id ラベルを設定するために使用されます。Cloud コンソールの Cloud Service Mesh ダッシュボードに指標を表示するために必要です。
必要な権限があることを確認する
- Cloud Shell で、ユーザー アカウントにオーナーのロールが割り当てられていることを確認します。
gcloud projects get-iam-policy $PROJECT_ID \
--flatten="bindings[].members" \
--filter="bindings.members:user:$(gcloud config get-value core/account 2>/dev/null)"
出力:
bindings:
members: user:student-xx-xxxx@qwiklabs.net
role: roles/owner
...
注: 受講者のユーザーには閲覧者権限も付与されています。
注: 設定を完了するには、以下のロールに関連付けられた権限が必要です。
- プロジェクト編集者
- Kubernetes Engine 管理者
- プロジェクト IAM 管理者
- GKE Hub 管理者
- サービス アカウント管理者
- サービス アカウント キー管理者
オーナーのロールにはこれらの権限がすべて含まれているため、このまま先に進むことができます。
タスク 2. GKE クラスタを設定する
クラスタを作成する
- Cloud Shell で次のコマンドを実行して、Kubernetes クラスタ
central を作成します。
gcloud config set compute/zone ${CLUSTER_ZONE}
gcloud container clusters create ${CLUSTER_NAME} \
--machine-type=e2-standard-4 \
--num-nodes=4 \
--subnetwork=default \
--release-channel=regular \
--labels mesh_id=${MESH_ID} \
--workload-pool=${WORKLOAD_POOL} \
--logging=SYSTEM,WORKLOAD
出力:
NAME: central
LOCATION: {{{project0.default_zone | zone}}}
MASTER_VERSION: 1.35.3-gke.2190000
MASTER_IP: 35.245.2.147
MACHINE_TYPE: e2-standard-4
NODE_VERSION: 1.35.3-gke.2190000
NUM_NODES: 4
STATUS: RUNNING
クラスタの作成が完了するまでに数分かかります。
- クラスタの作成が完了したら、次のコマンド シーケンスを実行して
フリート サービス メッシュを有効にし、管理者権限を構成して、istio-system 名前空間を設定します。
gcloud container fleet mesh enable
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole=cluster-admin \
--user=$(gcloud config get-value account)
kubectl create namespace istio-system
- クラスタを参照するように kubectl を構成します。
gcloud container clusters get-credentials ${CLUSTER_NAME} \
--zone $CLUSTER_ZONE \
--project $PROJECT_ID
タスク 3. Cloud Service Mesh のインストールを準備する
Google が提供する asmcli というツールを使えば、Cloud Service Mesh のインストールやアップグレードが可能です。asmcli を使用すると、プロジェクトとクラスタは次のように構成されます。
- Google Cloud プロジェクトに対して必要な Identity and Access Management(IAM)権限を付与します。
- Cloud プロジェクトで必要な Google API を有効にします。
- メッシュを識別するラベルをクラスタに設定します。
- サービス アカウントを作成し、サイドカー プロキシなどのデータプレーン コンポーネントがプロジェクトのデータとリソースに安全にアクセスできるようにします。
- クラスタをフリートに登録します(まだ登録されていない場合)。
asmcli を使って、Cloud Service Mesh をクラスタにインストールします。
- Cloud Service Mesh 1.28 をインストールするバージョンを現在の作業ディレクトリにダウンロードします。
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.28 > asmcli
- スクリプトを実行可能にします。
chmod +x asmcli
- Service Mesh API を有効にします。
gcloud services enable mesh.googleapis.com
タスク 4. Cloud Service Mesh を検証する
asmcli validate を実行すると、プロジェクトとクラスタに対して Cloud Service Mesh のインストールに必要な設定が行われているかどうか確認できます。このオプションを使用すると、asmcli はプロジェクトやクラスタを変更せず、Cloud Service Mesh をインストールしません。
asmcli は、以下のことを確認します。
- 環境に必要なツールがある。
- クラスタが最小要件を満たしている。
- 指定されたプロジェクトに必要な権限がある。
- プロジェクトで必要な Google API がすべて有効になっている。
- 以下のコマンドを実行すると、構成が検証され、インストール ファイルと
asm パッケージが OUTPUT_DIR ディレクトリにダウンロードされます。
./asmcli validate \
--project_id $PROJECT_ID \
--cluster_name $CLUSTER_NAME \
--cluster_location $CLUSTER_ZONE \
--fleet_id $PROJECT_ID \
--output_dir ./asm_output
注: この場合の検証は、クラスタに ASM をインストールするのに必要なコンポーネントがすべて揃っているかどうかを確認するものであり、ASM が正しくインストールされたかどうかを確認するものではないため、検証エラーは無視します。
成功すると、次のような出力が表示されます。
asmcli: Setting up necessary files...
asmcli: Using asm_kubeconfig as the kubeconfig...
asmcli: Checking installation tool dependencies...
asmcli: Fetching/writing GCP credentials to kubeconfig file...
asmcli: Verifying connectivity (10s)...
asmcli: kubeconfig set to asm_kubeconfig
asmcli: using context gke_example-project-12345_us-west1_cluster-2
asmcli: Getting account information...
asmcli: Downloading ASM..
asmcli: Downloading ASM kpt package...
fetching package "/asm" from "https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages" to "asm"
asmcli: Checking required APIs...
asmcli: Checking for project example-project-12345...
asmcli: Reading labels for us-west1/cluster-2...
asmcli: Checking for istio-system namespace...
asmcli: Confirming node pool requirements for example-project-12345/us-west1/cluster-2...
asmcli: Checking Istio installations...
asmcli: [WARNING]: There is no way to validate that the meshconfig API has been initialized.
asmcli: [WARNING]: This needs to happen once per GCP project. If the API has not been initialized
asmcli: [WARNING]: for example-project-12345, please re-run this tool with the --enable_gcp_components
asmcli: [WARNING]: flag. Otherwise, installation will succeed but Cloud Service Mesh
asmcli: [WARNING]: will not function correctly.
asmcli: Successfully validated all requirements to install ASM.
注: このラボでは、検証コマンドの警告を処理するために必要なフラグを用意します。
タスク 5. Cloud Service Mesh をインストールする
以下のコマンドで、Cloud Service Mesh がインストールされます。 --enable_all フラグを使用すると、このスクリプトで、必要な Google API の有効化、Identity and Access Management の権限の設定、GKE Workload Identity の有効化など、クラスタに必要な更新を行うことができます。
- 次のコマンドを実行して、Cloud Service Mesh をインストールします。
./asmcli install \
--project_id $PROJECT_ID \
--cluster_name $CLUSTER_NAME \
--cluster_location $CLUSTER_ZONE \
--fleet_id $PROJECT_ID \
--output_dir ./asm_output \
--enable_all \
--option legacy-default-ingressgateway \
--ca mesh_ca \
--enable_gcp_components
出力は次のようになります。
asmcli: *****************************
asmcli: Successfully installed ASM.
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Service Mesh をインストールする
Ingress ゲートウェイをインストールする
Cloud Service Mesh には、サービス メッシュの一部としてゲートウェイをデプロイし、管理するためのオプションがあります。ゲートウェイでは、メッシュのエッジで動作し、受信または送信 HTTP / TCP 接続を処理するロードバランサを記述します。ゲートウェイは、メッシュ内外に送信されるトラフィックをきめ細かく制御する Envoy プロキシです。
- Ingress ゲートウェイの名前空間をまだ作成していない場合は作成します。ゲートウェイはユーザー ワークロードであり、ベスト プラクティスとしては、コントロール プレーンの名前空間にデプロイすることはおすすめしません。
GATEWAY_NS=istio-gateway
kubectl create namespace $GATEWAY_NS
-
ゲートウェイの名前空間にリビジョン ラベルを適用することで、ゲートウェイで自動インジェクションを有効にします。リビジョン ラベルは、サイドカー インジェクタ Webhook によって使用され、挿入されたプロキシを特定のコントロール プレーン リビジョンに関連付けます。
- 次のコマンドを使用して、
istiod のリビジョン ラベルを探します。
kubectl get deploy -n istio-system -l app=istiod -o \
jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
REVISION=$(kubectl get deploy -n istio-system -l app=istiod -o \
jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
- リビジョン ラベルを名前空間に適用します。次のコマンドで、REVISION は前の手順でメモした istiod のリビジョン ラベルの値です。
kubectl label namespace $GATEWAY_NS \
istio.io/rev=$REVISION --overwrite
- Istio のプロキシ インジェクションを有効にします
kubectl label namespace default istio-injection=enabled
kubectl label namespace $GATEWAY_NS istio-injection=enabled
-
--output_dir で指定したディレクトリに変更します。
cd ~/asm_output
-
samples/gateways/istio-ingressgateway/ ディレクトリにある Ingress ゲートウェイ構成のサンプルをそのままデプロイするか、必要に応じて変更します。
kubectl apply -n $GATEWAY_NS \
-f samples/gateways/istio-ingressgateway
サイドカー インジェクションを有効にする
Cloud Service Mesh は、サイドカー プロキシを使用してネットワーク セキュリティ、信頼性、オブザーバビリティを強化します。Cloud Service Mesh では、これらの機能がアプリケーションのプライマリ コンテナと分離されて抽象化され、同じ Pod 内に別のコンテナとして提供される、共通のプロセス外プロキシに実装されます。
-
ワークロードをデプロイする前に、Cloud Service Mesh がトラフィックをモニタリングおよび保護できるように、サイドカー プロキシ インジェクションを構成します。
-
自動挿入を有効にするには、リビジョン ラベルを適用し、istio-injection ラベルがある場合はラベルを削除します。
-
次のコマンドでは、自動挿入を有効にする名前空間 default を指定します。REVISION は前のステップでメモしたリビジョン ラベルです。
kubectl label namespace default istio-injection-istio.io/rev=$REVISION --overwrite
注: 出力の "istio-injection" not found メッセージは無視できます。これは、今までは名前空間に istio-injection ラベルが付いていなかったことを意味します。Cloud Service Mesh の新規インストールや新規デプロイでは、これは想定される状態です。
注: これでサイドカー プロキシ インジェクションが有効になり、今後のワークロードで使用できるようになりました。
このクラスタがすでにワークロードを実行していた場合は、自動挿入を再トリガーするために Pod を再起動する必要があります。
タスク 6. Istio 対応のマルチサービス アプリケーションである Bookinfo をデプロイする
このタスクでは、Bookinfo サンプル マイクロサービス アプリケーションを設定して、このアプリケーションを詳しく確認します。
Bookinfo の概要
Cloud Service Mesh(ASM)の構成と検証を行ったので、インストールに含まれるサンプル アプリケーションの 1 つである BookInfo をデプロイできます。これは、4 つのマイクロサービスで構成される単純な模擬ブックストア アプリケーションです。すべて Istio を使用して管理されます。コードを変更せずに多言語環境で Istio を使用できることを示すために、各マイクロサービスは異なる言語で記述されています。
マイクロサービスは次のものです。
-
productpage: details と reviews マイクロサービスを呼び出して、ページに情報を入力します。
-
details: 書籍情報が含まれます。
-
reviews: 書評が含まれます。また、ratings マイクロサービスを呼び出します。
-
ratings: 書評とともに表示される書籍ランキング情報が含まれます。
reviews のマイクロサービスには次の 3 つのバージョンがあります。
- reviews v1 は ratings サービスを呼び出しません。
- reviews v2 は ratings サービスを呼び出し、各評価を 1~5 個の黒い星で表示します。
- reviews v3 は ratings サービスを呼び出し、各評価を 1~5 個の赤い星で表示します。
アプリケーションのアーキテクチャの全体像は次のとおりです。

ソースコード、およびこの例で使用されるその他すべてのファイルは、Istio の samples/bookinfo ディレクトリにあります。
Bookinfo をデプロイする
-
BookInfo アプリケーションを記述した .yaml を確認します。
istio_dir=$(ls -d istio-* | tail -n 1)
cd $istio_dir
cat samples/bookinfo/platform/kube/bookinfo.yaml
containers を探して、Bookinfo アプリケーションの各サービスのバージョンごとに、各 Deployment に 1 つのコンテナがあることを確認します。
-
Cloud Shell で次のコマンドを使用して、デプロイされている各アプリケーション Pod とともにプロキシ サイドカーを挿入します。
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
注: Istio は、サービス メッシュに含まれる全サービスのすべての受信トラフィックと送信トラフィックを仲介します。このとき、C++ で開発されたオープンソースの高性能プロキシである Envoy プロキシの拡張バージョンを使用します。
Istio は、Envoy の多くの組み込み機能を利用します。これには、動的なサービス ディスカバリ、ロード バランシング、TLS 終端、HTTP/2 および gRPC プロキシ、サーキット ブレーカー、ヘルスチェック、% ベースのトラフィック分割を使用した段階的な公開、フォールト インジェクション、豊富な指標などがあります。
出力:
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Bookinfo アプリケーションをデプロイする
Istio Ingress ゲートウェイを使用して外部アクセスを有効にする
Bookinfo サービスが稼働するようになったので、ブラウザなどの Kubernetes クラスタの外部から、アプリケーションにアクセスできるようにする必要があります。Istio ゲートウェイはこの目的で使用されます。
-
アプリケーションの Ingress ゲートウェイの構成を記述した .yaml を確認します。
cat samples/bookinfo/networking/bookinfo-gateway.yaml
デプロイされる Gateway と VirtualService メッシュ リソースを探します。Gateway は、サービス メッシュの外側のユーザーにサービスを公開し、モニタリングやルートルールなどの Istio 機能を、クラスタに入るトラフィックに適用できるようにします。
-
アプリケーションの Ingress ゲートウェイを構成します。これにより、後で使用する外部 IP が公開されます。
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
出力:
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
Bookinfo のデプロイ状況を確認する
-
アプリケーションが正しくデプロイされていることと、サービス、Pod、Ingress ゲートウェイを確認します。
kubectl get services
出力:
NAME TYPE ...
details ClusterIP ...
kubernetes ClusterIP ...
productpage ClusterIP ...
ratings ClusterIP ...
reviews ClusterIP ...
-
実行中のアプリケーション Pod を確認します。
kubectl get pods
出力:
NAME READY STATUS RESTARTS AGE
details-v1-79f774bdb9-6l54w 2/2 Running 0 101s
productpage-v1-6b746f74dc-4xccm 2/2 Running 0 100s
ratings-v1-b6994bb9-7g4z2 2/2 Running 0 100s
reviews-v1-545db77b95-hkh9p 2/2 Running 0 100s
reviews-v2-7bf8c9648f-cmsxj 2/2 Running 0 100s
reviews-v3-84779c7bbc-8b8qp 2/2 Running 0 100s
6 つの Pod すべてが Running ステータスになるまで、このコマンドの再実行が必要となる場合があります。
-
クラスタ内の Pod(ratings など)から curl リクエストを送信して、Bookinfo アプリケーションが実行されていることを確認します。
kubectl exec -it $(kubectl get pod -l app=ratings \
-o jsonpath='{.items[0].metadata.name}') \
-c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"
出力:
単純なブックストア アプリ
-
Ingress ゲートウェイが作成されていることを確認します。
kubectl get gateway
出力:
NAME AGE
bookinfo-gateway 20m
-
Ingress ゲートウェイの外部 IP アドレスを取得します。
kubectl get svc istio-ingressgateway -n istio-system
出力:
NAME TYPE ... EXTERNAL-IP ...
istio-ingressgateway LoadBalancer ... 34.72.220.30 ...
この例では、Ingress ゲートウェイの外部 IP は 34.72.220.30 です。
-
ここで、次のコマンドを実行します。[EXTERNAL-IP] は、前のコマンドで出力された外部 IP に置き換えます。
export GATEWAY_URL=[EXTERNAL-IP]
-
クラスタの外部から curl リクエストを送信して、Bookinfo アプリが実行されていることを確認します。
curl -I http://${GATEWAY_URL}/productpage
出力:
HTTP/1.1 200 OK
content-type: text/html; charset=utf-8
content-length: 4183
server: istio-envoy
...
タスク 7. Bookinfo アプリケーションを使用する
ウェブブラウザでアプリケーションを試す
-
ブラウザで http://[$GATEWAY_URL]/productpage にアクセスして、BookInfo ウェブページを表示します。[$GATEWAY_URL] は実際の外部 IP アドレスに置き換えてください。

-
ページを何度か更新します。
まだ Istio をバージョン ルーティングの制御に使用していないため、3 つの異なるバージョンの書評が表示されることに注目してください。
ラウンドロビン方式で呼び出される 3 つの異なる書評サービスがあります。
このように 3 つの間で切り替わるのは、Kubernetes の通常のルーティング / バランシング動作です。
安定したバックグラウンドの負荷を生成する
siege ユーティリティを実行して、Bookinfo へのトラフィックのシミュレーションを行います。
-
Cloud Shell で、siege をインストールします。
siege は、ウェブサイトに対する負荷を生成するユーティリティです。
sudo apt install siege
-
siege を使用して、サービスに対してトラフィックを作成します。
siege http://${GATEWAY_URL}/productpage
タスク 8. Cloud Service Mesh ダッシュボードを使用してサービスのパフォーマンスを評価する
各サービスの表形式のデータを収集する
- コンソールで、ナビゲーション メニュー > [Kubernetes Engine] > [サービス メッシュ] に移動します。
プロンプトが表示されたら、[有効にする] をクリックして Service Mesh API を有効にします。
-
[サービス] セクションを表示します。
サービスはいくつ表示されていますか。
-
[productpage] サービスをクリックして詳細を表示します。

上部に表示される、現在のリクエスト数(1 秒あたり)、エラー率、レイテンシ、リソース使用率の詳細を確認してください。
0 を超えるリクエスト数が表示されていない場合は、productpage サービスを一度閉じて数分後に再度表示してください。
-
[指標] オプションをクリックします。さまざまなグラフとその内訳のオプションを確認します。
- 現在のリクエスト率はいくらですか。また、時間の経過とともにどのように変化していますか。
- 現在のエラー率はいくらですか。また、時間の経過とともにどのように変化していますか。
- レイテンシはどのようなグラフになっていますか。
- リクエスト サイズの中央値はいくらですか。
- レスポンス サイズの中央値はいくらですか。
- CPU 使用率の集計値はいくらですか。
-
[連携サービス] オプションをクリックします。
productpage に対してリクエストを送信しているその他のサービスと、productpage がリクエストを送信しているサービスが表示されます。
-
productpage サービスを呼び出しているサービスは何ですか。
-
productpage サービスによって呼び出されているサービスは何ですか。
- サービス間の呼び出しに mTLS は適用されていますか。
注: 通常、ratings サービスは productpage サービスにリクエストを送信しません。ここでは、ラボの一部としてテスト リクエストを発行するために ratings サービスを使用したため、このサービスが表示されています。
-
左上にある Cloud Service Mesh のロゴをクリックして、Cloud Service Mesh ダッシュボードに戻ります。
この時点で、他のサービスの詳細を確認してみましょう。
注: ダッシュボードの上部のセクションには、サービスレベル目標(SLO)とアラートに関する情報が表示されています。
SLO とは、サービスレベル指標(SLI)を使用して測定する値の目標値です。これは、目標とするサービスのパフォーマンス レベルを表します。SLO の例として、「1 時間あたりのリクエストの 99.9% がレスポンス コード 200 を返す」などが考えられます。サービスが SLO を満たしていない場合に待機スタッフを呼び出すよう、アラート ポリシーを定義することもできます。
SLO を定義してテストできるラボもありますのでご確認ください。
トポロジビューを使用してメッシュを可視化する
-
Cloud Service Mesh ダッシュボードで、トポロジを表示します。
トポロジグラフが表示されるまでに数分かかる場合があります。
-
サービスとワークロードの関係を簡単に視覚化できるようにグラフ内のノードの位置を調整します。
外部リクエストは productpage で開始される点に注意してください。スクロールして戻り、[Bookinfo Overview] で Bookinfo のアーキテクチャ図を詳しく確認できます。
たとえば、以下のような図になる場合があります。

注: すべてのノードを表示する場合は、[開く] をクリックする必要があります。
-
[productpage] サービスノードをクリックします。
サービスの詳細カードが表示されます。

- このサービスは 1 秒あたりいくつのリクエストを受信していますか。
- レイテンシの中央値と 99% 値はいくらですか。
-
各サービスのノードにカーソルを合わせ、エッジの統計情報を確認します。
-
productpage サービスは、1 秒あたりいくつのリクエストを受信していますか。また、送信元はどこですか。
- このサービスは 1 秒あたりいくつのリクエストを productpage-v1 ワークロードに転送していますか。
トラフィックの詳細は次のようになります。

-
ワークロードの 1 つを、Deployment、ReplicaSet、Pod が表示されるまで展開します。
次のようになります。

お疲れさまでした
このラボでは、GKE クラスタ、Cloud Service Mesh、Istio 対応のアプリケーションをデプロイしました。また、Cloud Service Mesh ダッシュボードを使用して、サービスのパフォーマンスとアプリケーションのトポロジについて詳しく学びました。
次のステップと詳細情報
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2026 年 6 月 9 日
ラボの最終テスト日: 2026 年 6 月 9 日
Copyright 2026 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。