Bookinfo サンプルのデプロイ
このページでは、サンプル アプリケーションをデプロイして Cloud Service Mesh のデモを行う方法について説明します。Cloud Service Mesh にオンボーディングしていない場合は、オンボーディング ガイドをご覧ください。
Cloud Service Mesh をインストールすると、いくつかのサンプル アプリケーションがインストールされます。このガイドでは、BookInfo サンプルをデプロイする方法について説明します。これはシンプルな模擬ブックストア アプリケーションで、商品のウェブページ、書籍の詳細、レビュー(レビュー Service は複数のバージョンを使用)、評価を提供する 4 つの Service で構成されます。これらはすべて Cloud Service Mesh で管理されます。この例で使用されているソースコードなどのすべてのファイルは、samples/bookinfo
の Cloud Service Mesh インストール ディレクトリにあります。
自動サイドカー インジェクションを有効にする
インジェクションの名前空間を有効にします。手順は、コントロール プレーンの実装によって異なります。
マネージド(TD)
- デフォルトのインジェクション ラベルを名前空間に適用します。
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
マネージド(Istiod)
推奨: 次のコマンドを実行して、デフォルトのインジェクション ラベルを名前空間に適用します。
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
マネージド Istiod コントロール プレーンを使用している既存のユーザーの場合: デフォルトのインジェクションを使用することをおすすめしますが、リビジョンベースのインジェクションもサポートされています。次の手順を行います。
利用可能なリリース チャンネルを探すには、次のコマンドを実行します。
kubectl -n istio-system get controlplanerevision
出力は次のようになります。
NAME AGE asm-managed-rapid 6d7h
注: 上記のリストに 2 つのコントロール プレーンのリビジョンが表示されている場合は、1 つを削除します。クラスタに複数のコントロール プレーン チャネルを配置することはできません。
出力で、
NAME
列の値は、Cloud Service Mesh バージョンで使用可能なリリース チャンネルに対応するリビジョン ラベルです。リビジョン ラベルを名前空間に適用します。
kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
クラスタ内
推奨: 次のコマンドを実行して、デフォルトのインジェクション ラベルを名前空間に適用します。
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
デフォルトのインジェクションを使用することをおすすめしますが、リビジョンベースのインジェクションがサポートされています。 次の手順を使用します。
次のコマンドを使用して、
istiod
のリビジョン ラベルを探します。kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
リビジョン ラベルを名前空間に適用します。次のコマンドで、
REVISION_LABEL
は前の手順でメモしたistiod
リビジョン ラベルの値です。kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
アプリケーションのデプロイ
これで、default
名前空間で自動インジェクションが有効になりました。BookInfo アプリケーションのサービスをデプロイすると、各サービスと一緒にサイドカー プロキシが挿入されます。
Cloud Service Mesh をインストールしたコンピュータのコマンドラインで Cloud Service Mesh のインストール ディレクトリのルートに移動します。必要に応じて、Bookinfo サンプル アプリケーションを含むクラスタ内インストール ファイルをダウンロードして展開します。
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 を VMware 用の 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