arrow_back

Google Kubernetes Engine に Anthos Service Mesh をインストールする

参加 ログイン
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Google Kubernetes Engine に Anthos Service Mesh をインストールする

Lab 1時間 30分 universal_currency_alt クレジット: 5 show_chart 中級
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP654

Google Cloud セルフペース ラボ

概要

Istio は、マイクロサービスを接続、保護、管理するためのオープンソース フレームワークです。Kubernetes クラスタでホストされているサービスを含む(ただしそれに限定されない)任意のサービスで使用できます。Istio を使用すると、サービスのコードを変更することなく、ロード バランシング、サービス間の認証、モニタリングなどを組み込んだデプロイ サービスのネットワークを構築できます。

たとえば、信頼性の高い分散システムでは、障害の後にリクエストを再試行することが一般的です(このとき指数バックオフ遅延を使用することもあります)。リクエストの再試行を行う Java、Golang、NodeJS 用のライブラリがありますが、アプリ内でそれらを採用する場合、それぞれの異なるアプリが独立してその問題を解決する必要があります。このような場合に Istio サイドカーを利用すると、アプリの代わりにリクエストの再試行を自動的に行うことができます。

Anthos Service Mesh

Anthos Service Mesh(ASM)は Istio を活用しています。Anthos Service Mesh では、Anthos によってテストされ完全にサポートされた Istio のディストリビューションを利用できます。クラスタの運用場所が Google Cloud でもオンプレミスでも、Anthos GKE でサービス メッシュを作成、デプロイできます。

構成プロファイルが含まれており、Google Kubernetes Engine または Anthos GKE On-Prem 向けにカスタマイズされた推奨設定を使用できます。

Anthos Service Mesh には、この他にも充実した機能とツールが含まれ、信頼性の高い安全なサービスを次のような形で一元的にモニタリングおよび管理できます。

  • メッシュの GKE クラスタ内の HTTP(S) トラフィックに関して、サービスの指標とログが自動的に Google Cloud に取り込まれる。
  • 事前構成されたサービス ダッシュボードで、サービスを理解するための必要な情報を確認できる。
  • 詳細なテレメトリーで指標とログを詳しく分析し、さまざまな属性に基づきデータをフィルタ、スライスできる。
  • サービス同士の関係が可視化されるため、サービスの接続関係、依存関係を理解するのに役立つ。
  • サービスレベル目標(SLO)によって、サービスの状態についての分析情報を得られる。サービスの状態に関する独自の基準を使用して SLO とアラートを簡単に定義できる。

豊富な機能を備えた Anthos Service Mesh によって、Istio ベースのサービス メッシュを Anthos clusters に簡単に実装できます。

このラボでは、GKE クラスタに Anthos Service Mesh をインストールします。

学習内容

このラボでは、次のタスクの実行方法について学びます。

  • Google Kubernetes Engine(GKE)でクラスタをプロビジョニングする
  • Anthos Service Mesh をインストールして構成する
  • Istio 対応のマルチサービス アプリケーションである Bookinfo をデプロイする
  • Istio Ingress ゲートウェイを使用して外部アクセスを有効にする
  • Bookinfo アプリケーションを使用する
  • Anthos Service Mesh ダッシュボードでサービスのパフォーマンスをモニタリングする

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

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

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

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

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

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

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

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

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

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

出力:

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

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: 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}" Note:
  • WORKLOAD_POOL は、Workload Identity を有効にするために使用されます。Workload Identity は、GKE アプリケーションから Google Cloud サービスに安全にアクセスするおすすめの方法です。
  • MESH_ID は、クラスタに mesh_id ラベルを設定するために使用されます。Cloud Console の Anthos 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.27.3-gke.100 MASTER_IP: 35.245.2.147 MACHINE_TYPE: e2-standard-4 NODE_VERSION: 1.27.3-gke.100 NUM_NODES: 4 STATUS: RUNNING

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

  1. クラスタの作成が完了したら、このコマンドを実行して、クラスタ上で cluster-admin ロールを持っていることを確認します。
kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=$(whoami)@qwiklabs.net
  1. クラスタを参照するように kubectl を構成します。
gcloud container clusters get-credentials ${CLUSTER_NAME} \ --zone $CLUSTER_ZONE \ --project $PROJECT_ID

タスク 3. Anthos Service Mesh のインストールを準備する

Google が提供する asmcli というツールを使えば、Anthos Service Mesh のインストールやアップグレードが可能です。asmcli を使用すると、プロジェクトとクラスタは次のように構成されます。

  • Google Cloud プロジェクトに対して必要な Identity and Access Management(IAM)権限を付与します。
  • Cloud プロジェクトで必要な Google API を有効にします。
  • メッシュを識別するラベルをクラスタに設定します。
  • サービス アカウントを作成し、サイドカー プロキシなどのデータプレーン コンポーネントがプロジェクトのデータとリソースに安全にアクセスできるようにします。
  • クラスタを登録します(まだ登録されていない場合)。

asmcli を使って、Anthos Service Mesh をクラスタにインストールします。

  1. Anthos Service Mesh 1.19.0 をインストールするバージョンを現在の作業ディレクトリにダウンロードします。
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.19 > asmcli
  1. スクリプトを実行可能にします。
chmod +x asmcli
  1. Service Mesh API を有効にします。
gcloud services enable mesh.googleapis.com

タスク 4. Anthos Service Mesh を検証する

asmcli validate を実行すると、プロジェクトとクラスタに対して Anthos Service Mesh のインストールに必要な設定が行われているかどうか確認できます。このオプションを使用すると、asmcli はプロジェクトやクラスタを変更せず、Anthos 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 --enable_cluster_roles : この場合の検証は、クラスタに 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 Anthos Service Mesh asmcli: [WARNING]: will not function correctly. asmcli: Successfully validated all requirements to install ASM. 注: このラボでは、検証コマンドの警告を処理するために必要なフラグを用意します。

タスク 5. Anthos Service Mesh をインストールする

以下のコマンドで、Anthos Service Mesh がインストールされます。 --enable_all フラグを使用すると、このスクリプトで、必要な Google API の有効化、Identity and Access Management の権限の設定、GKE Workload Identity の有効化など、クラスタに必要な更新を行うことができます。

  1. 次のコマンドを実行して、Anthos 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.

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Anthos Service Mesh をインストールする

Ingress ゲートウェイをインストールする

Anthos 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
  2. --output_dir で指定したディレクトリに変更します。

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

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

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

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

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

  3. 次のコマンドでは、自動挿入を有効にする Namespace default を指定し、REVISION は前のステップで指摘したリビジョン ラベルです。

kubectl label namespace default istio-injection-istio.io/rev=$REVISION --overwrite 注: 出力の "istio-injection" not found メッセージは無視できます。これは、今までは Namespace に istio-injection ラベルが付いていなかったことを意味します。Anthos Service Mesh の新規インストールや新規デプロイでは、これは想定される状態です。 注: これでサイドカー プロキシ インジェクションが有効になり、今後のワークロードで使用できるようになりました。

このクラスタがすでにワークロードを実行していた場合は、自動挿入を再トリガーするために Pod を再起動する必要があります。

タスク 6. Istio 対応のマルチサービス アプリケーションである Bookinfo をデプロイする

このタスクでは、Bookinfo サンプル マイクロサービス アプリケーションを設定して、このアプリケーションを詳しく確認します。

Bookinfo の概要

Anthos Service Mesh の構成と検証を行ったので、インストールに含まれるサンプル アプリケーションの 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 を確認します。

    cd istio-1.19.6-asm.2 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

    デプロイされる GatewayVirtualService メッシュ リソースを探します。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. アプリケーションが正しくデプロイされていることと、Service、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. Anthos Service Mesh ダッシュボードを使用してサービスのパフォーマンスを評価する

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

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

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

  1. ウィンドウの下半分に、[サービス] セクションが表示されます。

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

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

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

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

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

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

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

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

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

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

注:

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

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

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

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

  1. Anthos 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、Poddiagram の図

お疲れさまでした

このラボでは、GKE クラスタ、Anthos Service Mesh、Istio 対応のアプリケーションをデプロイしました。また、Anthos Service Mesh ダッシュボードを使用して、サービスのパフォーマンスとアプリケーションのトポロジについて詳しく学びました。

次のステップと詳細情報

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2024 年 1 月 22 日

ラボの最終テスト日: 2024 年 1 月 22 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。