Install Cloud Service Mesh

進行状況を確認

/ 50

Deploying a BookInfo application

進行状況を確認

/ 50

このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。

GSP654

Google Cloud セルフペース ラボ

概要

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 コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 右側の [ラボの設定とアクセス] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • このラボで使用する一時的な認証情報(ユーザー名とパスワード)
    • このラボを行うために必要なその他の情報(ある場合)

    ラボのタイマーはページの上部に表示され、残り時間が示されます。

  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示された場合は、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの設定とアクセス] パネルでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの設定とアクセス] パネルでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで指定された認証情報を使用する必要があります。ご自身の Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後のページはクリックして先に進みます。

    • 利用規約に同意します。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

しばらくすると、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。 ナビゲーション メニューのアイコンと検索フィールド

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • 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 にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

出力:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. プロジェクトを設定する

SDK の構成を確認する

  1. 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-#####]
  2. 必要に応じてプロジェクトの構成を更新します。

    SDK にデフォルトのプロジェクトが適切に設定されていない場合は、構成を更新します。[project_id] は、Qwiklabs の手順ページの認証情報のセクションに表示されているプロジェクト名に置き換えます。

    gcloud config set project [project_id]

環境変数を構成する

  1. 設定とインストールのコマンドで使用される環境変数を構成します。
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 クラスタを設定する

クラスタを作成する

  1. 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

クラスタの作成が完了するまでに数分かかります。

  1. クラスタの作成が完了したら、次のコマンド シーケンスを実行して フリート サービス メッシュを有効にし、管理者権限を構成して、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
  1. クラスタを参照するように 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 をクラスタにインストールします。

  1. Cloud Service Mesh 1.28 をインストールするバージョンを現在の作業ディレクトリにダウンロードします。
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.28 > asmcli
  1. スクリプトを実行可能にします。
chmod +x asmcli
  1. 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 がすべて有効になっている。
  1. 以下のコマンドを実行すると、構成が検証され、インストール ファイルと 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 の有効化など、クラスタに必要な更新を行うことができます。

  1. 次のコマンドを実行して、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 プロキシです。

  1. Ingress ゲートウェイの名前空間をまだ作成していない場合は作成します。ゲートウェイはユーザー ワークロードであり、ベスト プラクティスとしては、コントロール プレーンの名前空間にデプロイすることはおすすめしません。
GATEWAY_NS=istio-gateway kubectl create namespace $GATEWAY_NS
  1. ゲートウェイの名前空間にリビジョン ラベルを適用することで、ゲートウェイで自動インジェクションを有効にします。リビジョン ラベルは、サイドカー インジェクタ 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
  2. --output_dir で指定したディレクトリに変更します。

cd ~/asm_output
  1. samples/gateways/istio-ingressgateway/ ディレクトリにある Ingress ゲートウェイ構成のサンプルをそのままデプロイするか、必要に応じて変更します。
kubectl apply -n $GATEWAY_NS \ -f samples/gateways/istio-ingressgateway

サイドカー インジェクションを有効にする

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

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

  2. 自動挿入を有効にするには、リビジョン ラベルを適用し、istio-injection ラベルがある場合はラベルを削除します。

  3. 次のコマンドでは、自動挿入を有効にする名前空間 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 個の赤い星で表示します。

アプリケーションのアーキテクチャの全体像は次のとおりです。

Bookinfo アーキテクチャ

ソースコード、およびこの例で使用されるその他すべてのファイルは、Istio の samples/bookinfo ディレクトリにあります。

Bookinfo をデプロイする

  1. BookInfo アプリケーションを記述した .yaml を確認します。

    istio_dir=$(ls -d istio-* | tail -n 1) cd $istio_dir cat samples/bookinfo/platform/kube/bookinfo.yaml

    containers を探して、Bookinfo アプリケーションの各サービスのバージョンごとに、各 Deployment に 1 つのコンテナがあることを確認します。

  2. 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 ゲートウェイはこの目的で使用されます。

  1. アプリケーションの Ingress ゲートウェイの構成を記述した .yaml を確認します。

    cat samples/bookinfo/networking/bookinfo-gateway.yaml

    デプロイされる Gateway と VirtualService メッシュ リソースを探します。Gateway は、サービス メッシュの外側のユーザーにサービスを公開し、モニタリングやルートルールなどの Istio 機能を、クラスタに入るトラフィックに適用できるようにします。

  2. アプリケーションの 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 のデプロイ状況を確認する

  1. アプリケーションが正しくデプロイされていることと、サービス、Pod、Ingress ゲートウェイを確認します。

    kubectl get services

    出力:

    NAME TYPE ... details ClusterIP ... kubernetes ClusterIP ... productpage ClusterIP ... ratings ClusterIP ... reviews ClusterIP ...
  2. 実行中のアプリケーション 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 ステータスになるまで、このコマンドの再実行が必要となる場合があります。

  3. クラスタ内の 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>"

    出力:

    単純なブックストア アプリ
  4. Ingress ゲートウェイが作成されていることを確認します。

    kubectl get gateway

    出力:

    NAME AGE bookinfo-gateway 20m
  5. 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 です。

  6. ここで、次のコマンドを実行します。[EXTERNAL-IP] は、前のコマンドで出力された外部 IP に置き換えます。

    export GATEWAY_URL=[EXTERNAL-IP]
  7. クラスタの外部から 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 アプリケーションを使用する

ウェブブラウザでアプリケーションを試す

  1. ブラウザで http://[$GATEWAY_URL]/productpage にアクセスして、BookInfo ウェブページを表示します。[$GATEWAY_URL] は実際の外部 IP アドレスに置き換えてください。

    Bookinfo プロダクト ページ

  2. ページを何度か更新します。

    まだ Istio をバージョン ルーティングの制御に使用していないため、3 つの異なるバージョンの書評が表示されることに注目してください。

    ラウンドロビン方式で呼び出される 3 つの異なる書評サービスがあります。

    • 星なし
    • 黒い星
    • 赤い星

    このように 3 つの間で切り替わるのは、Kubernetes の通常のルーティング / バランシング動作です。

安定したバックグラウンドの負荷を生成する

siege ユーティリティを実行して、Bookinfo へのトラフィックのシミュレーションを行います。

  1. Cloud Shell で、siege をインストールします。

    siege は、ウェブサイトに対する負荷を生成するユーティリティです。

    sudo apt install siege
  2. siege を使用して、サービスに対してトラフィックを作成します。

    siege http://${GATEWAY_URL}/productpage

タスク 8. Cloud Service Mesh ダッシュボードを使用してサービスのパフォーマンスを評価する

各サービスの表形式のデータを収集する

  1. コンソールで、ナビゲーション メニュー > [Kubernetes Engine] > [サービス メッシュ] に移動します。

プロンプトが表示されたら、[有効にする] をクリックして Service Mesh API を有効にします。

  1. [サービス] セクションを表示します。

    サービスはいくつ表示されていますか。

  2. [productpage] サービスをクリックして詳細を表示します。

    ハイライト表示された productpage サービス

    上部に表示される、現在のリクエスト数(1 秒あたり)、エラー率、レイテンシ、リソース使用率の詳細を確認してください。

    0 を超えるリクエスト数が表示されていない場合は、productpage サービスを一度閉じて数分後に再度表示してください。

  3. [指標] オプションをクリックします。さまざまなグラフとその内訳のオプションを確認します。

    • 現在のリクエスト率はいくらですか。また、時間の経過とともにどのように変化していますか。
    • 現在のエラー率はいくらですか。また、時間の経過とともにどのように変化していますか。
    • レイテンシはどのようなグラフになっていますか。
    • リクエスト サイズの中央値はいくらですか。
    • レスポンス サイズの中央値はいくらですか。
    • CPU 使用率の集計値はいくらですか。
  4. [連携サービス] オプションをクリックします。

    productpage に対してリクエストを送信しているその他のサービスと、productpage がリクエストを送信しているサービスが表示されます。

    • productpage サービスを呼び出しているサービスは何ですか。
    • productpage サービスによって呼び出されているサービスは何ですか。
    • サービス間の呼び出しに mTLS は適用されていますか。
    注: 通常、ratings サービスは productpage サービスにリクエストを送信しません。ここでは、ラボの一部としてテスト リクエストを発行するために ratings サービスを使用したため、このサービスが表示されています。
  5. 左上にある Cloud Service Mesh のロゴをクリックして、Cloud Service Mesh ダッシュボードに戻ります。

この時点で、他のサービスの詳細を確認してみましょう。

注:

ダッシュボードの上部のセクションには、サービスレベル目標(SLO)とアラートに関する情報が表示されています。

SLO とは、サービスレベル指標(SLI)を使用して測定する値の目標値です。これは、目標とするサービスのパフォーマンス レベルを表します。SLO の例として、「1 時間あたりのリクエストの 99.9% がレスポンス コード 200 を返す」などが考えられます。サービスが SLO を満たしていない場合に待機スタッフを呼び出すよう、アラート ポリシーを定義することもできます。

SLO を定義してテストできるラボもありますのでご確認ください。

トポロジビューを使用してメッシュを可視化する

  1. Cloud Service Mesh ダッシュボードで、トポロジを表示します。

    トポロジグラフが表示されるまでに数分かかる場合があります。

  2. サービスとワークロードの関係を簡単に視覚化できるようにグラフ内のノードの位置を調整します。

    外部リクエストは productpage で開始される点に注意してください。スクロールして戻り、[Bookinfo Overview] で Bookinfo のアーキテクチャ図を詳しく確認できます。

    たとえば、以下のような図になる場合があります。

    Service Mesh の図

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

    サービスの詳細カードが表示されます。

    サービスの詳細カード

    • このサービスは 1 秒あたりいくつのリクエストを受信していますか。
    • レイテンシの中央値と 99% 値はいくらですか。
  4. 各サービスのノードにカーソルを合わせ、エッジの統計情報を確認します。

    • productpage サービスは、1 秒あたりいくつのリクエストを受信していますか。また、送信元はどこですか。
    • このサービスは 1 秒あたりいくつのリクエストを productpage-v1 ワークロードに転送していますか。

    トラフィックの詳細は次のようになります。

    トラフィック詳細の図

  5. ワークロードの 1 つを、Deployment、ReplicaSet、Pod が表示されるまで展開します。

    次のようになります。

    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 の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名とパスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。