Bookinfo サンプルのデプロイ
このページでは、サンプル アプリケーションをデプロイし、Anthos Service Mesh のデモを行う方法について説明します。Anthos Service Mesh をまだインストールしていない場合は、インストール ガイドをご覧ください。
Anthos Service Mesh をインストールすると、いくつかのサンプル アプリケーションがインストールされます。このガイドでは、BookInfo サンプルをデプロイする方法について説明します。これはシンプルな模擬ブックストア アプリケーションで、商品のウェブページ、書籍の詳細、レビュー(レビュー Service は複数のバージョンを使用)、評価を提供する 4 つの Service で構成されます。これらはすべて Anthos Service Mesh で管理されます。この例で使用されているソースコードなどのすべてのファイルは、samples/bookinfo
の Anthos Service Mesh インストール ディレクトリにあります。
サイドカーの自動インジェクションを有効にする
サイドカーの自動インジェクションを有効にするには、名前空間にラベルを付けて、サイドカー インジェクタ Webhook が、挿入されたサイドカーを特定のコントロール プレーン リビジョンに関連付けるようにする必要があります。デフォルトのタグを設定する場合は、デフォルトのインジェクション ラベルを使用して名前空間にラベルを付けます。それ以外の場合は、リビジョン ラベルを使用して名前空間にラベルを付けます。追加するラベルは、マネージド Anthos Service Mesh をデプロイしたか、クラスタ内コントロール プレーンをインストールしたかによっても異なります。
マネージド
名前空間には、デフォルトのインジェクション ラベルまたはリビジョン ラベルを使用できます
デフォルトのインジェクション ラベル
デフォルトのインジェクション ラベルを名前空間に適用します。
kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev-
リビジョン ラベル
アプリケーションをデプロイする前に、名前空間から以前の
istio-injection
ラベルを削除し、代わりにistio.io/rev=REVISION_LABEL
ラベルを設定します。特定のリビジョン ラベルに変更するには、
REVISION_LABEL
をクリックし、該当するラベル(Rapid チャネルの場合はasm-managed-rapid
、Regular チャネルの場合はasm-managed
、チャネルの安定性の場合はasm-managed-stable
)に置き換えます。リビジョン ラベルはリリース チャンネルに対応しています。
リビジョン ラベル チャネル asm-managed
標準 asm-managed-rapid
迅速 asm-managed-stable
Stable kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite
オプションのマネージド データプレーンをデプロイした場合、次のように
NAMESPACE
名前空間にアノテーションを設定します。kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
クラスタ内
次のコマンドを使用して、
istiod
のラベルを探します。kubectl -n istio-system get pods -l app=istiod --show-labels
出力は次のようになります。
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-173-3-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-1157-23,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-1157-23,istio=istiod,pod-template-hash=5788d57586
出力の
LABELS
列で、接頭辞istio.io/rev=
に続くistiod
リビジョン ラベルの値をメモします。この例での値はasm-1157-23
です。リビジョン ラベルをデフォルトの名前空間に適用します。次のコマンドにおいて、
REVISION
は前の手順でメモしたistiod
リビジョン ラベルの値です。kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
出力中のメッセージ
"istio-injection not found"
は無視します。これは、今までは名前空間にistio-injection
ラベルが付いていなかったことを意味します。Anthos Service Mesh の新規インストールや新規デプロイでは、これは想定される状態です。名前空間にistio-injection
とリビジョン ラベルの両方があると自動インジェクションが失敗するため、Anthos Service Mesh ドキュメント内のすべてのkubectl label
コマンドは両方のラベルを明示的に指定します。
アプリケーションのデプロイ
これで、default
名前空間で自動インジェクションが有効になりました。BookInfo アプリケーションのサービスをデプロイすると、各サービスと一緒にサイドカー プロキシが挿入されます。
Anthos Service Mesh をインストールしたコンピュータのコマンドラインで Anthos Service Mesh のインストール ディレクトリのルートに移動します。必要に応じて、インストール ファイルをダウンロードしてください。
kubectl
を使用してアプリケーションをデフォルトの名前空間にデプロイします。kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
次のコマンドを実行して、アプリケーションが正しくデプロイされていることを確認します。
kubectl get services
出力:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE details 10.0.0.31 <none> 9080/TCP 6m kubernetes 10.0.0.1 <none> 443/TCP 7d productpage 10.0.0.120 <none> 9080/TCP 6m ratings 10.0.0.15 <none> 9080/TCP 6m reviews 10.0.0.170 <none> 9080/TCP 6m
と
kubectl get pod
出力:
NAME READY STATUS RESTARTS AGE details-v1-1520924117-48z17 2/2 Running 0 6m productpage-v1-560495357-jk1lz 2/2 Running 0 6m ratings-v1-734492171-rnr5l 2/2 Running 0 6m reviews-v1-874083890-f0qf0 2/2 Running 0 6m reviews-v2-1343845940-b34q5 2/2 Running 0 6m reviews-v3-1813607990-8ch52 2/2 Running 0 6m
最後に、アプリケーションの Ingress ゲートウェイ ルーティングを定義します。
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
出力:
gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
アプリケーションのデプロイの検証
BookInfo アプリケーションが機能しているかどうかを確認するには、Ingress ゲートウェイにトラフィックを送信する必要があります。
Anthos Service Mesh を Anthos clusters on VMware にインストールした場合は、Anthos Service Mesh のインストール後に構成した Ingress ゲートウェイの外部 IP アドレスを取得します。
Anthos Service Mesh を GKE にインストールした場合は、Ingress ゲートウェイの外部 IP アドレスを次のように取得します。
kubectl get service istio-ingressgateway -n istio-system
出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
この例では、Ingress サービスの IP アドレスは
35.239.7.64
です。
アプリケーションの実行
curl
で BookInfo アプリが実行されていることを確認します。curl -I http://EXTERNAL_IP/productpage
レスポンスに
200
が示されている場合、アプリケーションが Anthos Service Mesh と正しく連動しています。BookInfo ウェブページを表示するには、ブラウザに次のアドレスを入力します。
http://EXTERNAL_IP/productpage
ページを何回か更新すると、ラウンドロビン スタイル(赤色の星、黒色の星、星なし)で示される、さまざまなバージョンのレビューが製品ページに表示されます。
トラフィックを生成しているアプリケーションが作成されたため、Google Cloud コンソールで Anthos の [サービス メッシュ] ページに移動して、指標やその他のオブザーバビリティ機能を確認できます。
クリーンアップ
Bookinfo サンプルによるテストが完了したら、クラスタから削除します。
次のスクリプトを使用して Bookinfo をアンインストールします。
samples/bookinfo/platform/kube/cleanup.sh
シャットダウンを確認します。
kubectl get virtualservices #-- there should be no virtual services kubectl get destinationrules #-- there should be no destination rules kubectl get gateway #-- there should be no gateway kubectl get pods #-- the Bookinfo pods should be deleted