Bookinfo サンプルのデプロイ
このページでは、サンプル アプリケーションをデプロイし、Cloud Service Mesh のデモを行う方法について説明します。Cloud Service Mesh をまだインストールしていない場合は、インストール ガイドをご覧ください。
Cloud Service Mesh をインストールすると、いくつかのサンプル アプリケーションがインストールされます。このガイドでは、BookInfo サンプルをデプロイする方法について説明します。これはシンプルなモック ブックストア アプリケーションで、商品のウェブページ、書籍の詳細、レビュー(レビュー Service は複数のバージョンを使用)、評価を提供する 4 つの Service で構成されます。これらはすべて Cloud Service Mesh で管理されます。この例で使用されているソースコードなどのすべてのファイルは、samples/bookinfo
の Cloud Service Mesh インストール ディレクトリにあります。
サイドカーの自動インジェクションの有効化
サイドカーの自動インジェクションを有効にするには、名前空間にラベルを付けて、サイドカー インジェクタ Webhook が、挿入されたサイドカーを特定のコントロール プレーン リビジョンに関連付けるようにする必要があります。デフォルトのタグを設定する場合は、デフォルトのインジェクション ラベルを使用して名前空間にラベルを付けます。それ以外の場合は、リビジョン ラベルを使用して Namespace にラベルを付けます。追加するラベルは、マネージド Cloud 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
Regular asm-managed-rapid
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-11910-9,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586
出力の
LABELS
列で、接頭辞istio.io/rev=
に続くistiod
リビジョン ラベルの値をメモします。この例での値はasm-11910-9
です。リビジョン ラベルをデフォルトの名前空間に適用します。次のコマンドにおいて、
REVISION
は前の手順でメモしたistiod
リビジョン ラベルの値です。kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
出力内のメッセージ
"istio-injection not found"
は無視してかまいません。このメッセージは、今までは Namespace にistio-injection
ラベルが付いていなかったことを意味しており、Cloud Service Mesh の新規インストールや新規デプロイでは想定される状態です。Namespace にistio-injection
とリビジョン ラベルの両方があると自動インジェクションの動作は未定義になるため、Cloud Service Mesh ドキュメント内のすべてのkubectl label
コマンドでは、一方のみを明示的に設定するようにしています。
アプリケーションのデプロイ
これで、default
Namespace で自動インジェクションが有効になりました。BookInfo アプリケーションの Service をデプロイすると、各 Service と一緒にサイドカー プロキシが挿入されます。
Cloud Service Mesh をインストールしたコンピュータのコマンドラインで Cloud 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 ゲートウェイにトラフィックを送信する必要があります。
Cloud Service Mesh を Google Distributed Cloud にインストールした場合は、Cloud Service Mesh のインストール後に構成した Ingress ゲートウェイの外部 IP アドレスを取得します。
Cloud 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
が示されている場合、アプリケーションが Cloud Service Mesh と正しく連動しています。BookInfo ウェブページを表示するには、ブラウザに次のアドレスを入力します。
http://EXTERNAL_IP/productpage
ページを何回か更新すると、ラウンドロビン スタイル(赤色の星、黒色の星、星なし)で示される、さまざまなバージョンのレビューが製品ページに表示されます。
トラフィックを生成しているアプリケーションが作成されたため、 Google Cloud コンソールで Cloud Service Mesh ページに移動して、指標やその他のオブザーバビリティ機能を確認できます。
クリーンアップ
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