2.5. Bookinfo アプリケーションについて
				info サンプルアプリケーションのインストールは、アプリケーションのデプロイと、クラスター外部からアプリケーションにアクセスできるようにするためのゲートウェイの作成という 2 つのタスクで主に構成されます。
			
				info アプリケーションを使用して、サービスメッシュの機能を調べることができます。bookinfo アプリケーションを使用すると、Web ブラウザーからのリクエストがメッシュを通過してアプリケーションに到達することを簡単に確認できます。
			
				info アプリケーションは、オンラインブックストアの単一のカタログエントリーと同様に、書籍に関する情報を表示します。アプリケーションには、書籍の説明、書籍の詳細 (ISBN、ページ数、その他の情報)、書籍のレビューが記載されたページが表示されます。
			
				info アプリケーションはメッシュを通じて公開され、メッシュ設定によって、アプリケーションを構成するマイクロサービスがリクエストの処理にどのように使用されるかが決まります。レビュー情報は、reviews-v1、reviews-v2、reviews-v3 の 3 つのサービスのいずれかから取得されます。reviews 仮想サービスを定義せずに bookinfo アプリケーションをデプロイすると、メッシュはラウンドロビンルールを使用してリクエストをサービスにルーティングします。
			
				reviews 仮想サービスをデプロイすることで、異なる動作を指定できます。たとえば、ユーザーが info アプリケーションにログインすると、メッシュがリクエストを reviews-v2 サービスにルーティングし、アプリケーションが黒い星付きのレビューを表示するように指定できます。ユーザーが bookinfo アプリケーションにログインしない場合、メッシュはリクエストを reviews-v3 サービスにルーティングし、アプリケーションは赤い星付きのレビューを表示します。
			
詳細は、アップストリーム Istio ドキュメントの Bookinfo Application を参照してください。
2.5.1. Bookinfo アプリケーションのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- クラスターを OpenShift Container Platform 4.15 以降にデプロイしている。
 - 
							
cluster-adminロールを持つユーザーとして OpenShift Container Platform Web コンソールにログインしている。 - OpenShift CLI (oc) にアクセスできる。
 - Red Hat OpenShift Service Mesh Operator をインストールし、Istio リソースを作成して、Operator によって Istio がデプロイされている。
 - IstioCNI リソースが作成され、Operator によって必要な IstioCNI Pod がデプロイされている。
 
手順
- 
							OpenShift Container Platform Web コンソールで、Home 
Projects ページに移動します。  - Create Project をクリックします。
 Project name フィールドに
infoを入力します。Display name と Description のフィールドは、必須ではなく、補足情報を提供します。
- Create をクリックします。
 次のコマンドを入力して、Istio ディスカバリーセレクターとインジェクションラベルを
infonamespace に適用します。oc label namespace info istio-discovery=enabled istio-injection=enabled
$ oc label namespace info istio-discovery=enabled istio-injection=enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この例では、Istio リソースの名前は
defaultです。Istio リソース名が異なる場合は、istio-injection=enabledラベルを追加するのではなく、istio.io/revラベルを Istio リソースの名前に設定する必要があります。次のコマンドを入力して、
infoYAML ファイルを適用し、bookinfoアプリケーションをデプロイします。oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
検証
次のコマンドを実行して、
infoサービスが利用可能であることを確認します。oc get services -n info
$ oc get services -n infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 172.30.137.21 <none> 9080/TCP 44s productpage ClusterIP 172.30.2.246 <none> 9080/TCP 43s ratings ClusterIP 172.30.33.85 <none> 9080/TCP 44s reviews ClusterIP 172.30.175.88 <none> 9080/TCP 44s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 172.30.137.21 <none> 9080/TCP 44s productpage ClusterIP 172.30.2.246 <none> 9080/TCP 43s ratings ClusterIP 172.30.33.85 <none> 9080/TCP 44s reviews ClusterIP 172.30.175.88 <none> 9080/TCP 44sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
infoPod が利用可能であることを確認します。oc get pods -n info
$ oc get pods -n infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ready列に2/2と表示される場合、プロキシーサイドカーは正常に注入されています。各 Pod のStatus列にRunningと表示されていることを確認します。bookinfoページにリクエストを送信して、infoアプリケーションが実行中であることを確認します。以下のコマンドを実行します。oc exec "$(oc get pod -l app=ratings -n info -o jsonpath='{.items[0].metadata.name}')" -c ratings -n bookinfo -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"$ oc exec "$(oc get pod -l app=ratings -n info -o jsonpath='{.items[0].metadata.name}')" -c ratings -n bookinfo -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
2.5.2. ゲートウェイを使用して Bookinfo アプリケーションにアクセスする方法 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service Mesh Operator はゲートウェイをデプロイしません。ゲートウェイはコントロールプレーンの一部ではありません。セキュリティーのベストプラクティスとして、Ingress ゲートウェイと Egress ゲートウェイは、コントロールプレーンが含まれる namespace とは別の namespace にデプロイする必要があります。
ゲートウェイ API またはゲートウェイインジェクションメソッドのいずれかを使用してゲートウェイをデプロイできます。
2.5.3. Istio ゲートウェイインジェクションを使用して Bookinfo アプリケーションにアクセスする リンクのコピーリンクがクリップボードにコピーされました!
					ゲートウェイインジェクションは、Istio サイドカーインジェクションと同じメカニズムを使用して、Service リソースとペアになっている Deployment リソースからゲートウェイを作成します。Service リソースは、OpenShift Container Platform クラスターの外部からアクセスできるようになります。
				
前提条件
- 
							OpenShift Container Platform Web コンソールに 
cluster-adminとしてログインしている。 - Red Hat OpenShift Service Mesh Operator がインストールされている。
 - Istio リソースが確実にデプロイされている。
 
手順
以下のコマンドを実行して
istio-ingressgatewayのデプロイメントおよびサービスを作成します。oc apply -n info -f ingress-gateway.yaml
$ oc apply -n info -f ingress-gateway.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この例では、Istio コミュニティーリポジトリーで使用可能なサンプル
ingress-gateway.yamlファイル を使用します。新しいゲートウェイを使用するように
infoアプリケーションを設定します。次のコマンドを実行して、ゲートウェイ設定を適用します。oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/networking/bookinfo-gateway.yaml -n bookinfo
$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/networking/bookinfo-gateway.yaml -n bookinfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この例では、
infoアプリケーションでゲートウェイインジェクションを設定するために、アプリケーションがインストールされている namespace に適用する必要があるサンプルゲートウェイ設定ファイルを使用します。次のコマンドを実行して、ルートを使用してクラスターの外部にゲートウェイを公開します。
oc expose service istio-ingressgateway -n info
$ oc expose service istio-ingressgateway -n infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress トラフィックが増加した場合に Pod を自動的にスケーリングするように、YAML ファイルを変更します。
設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 - この例では、最大レプリカを
5に設定し、最小レプリカを2に設定します。また、使用率が 80% に達すると、別のレプリカが作成されます。 
ノードで実行する必要がある Pod の最小数を指定します。
設定例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 - この例では、Pod が新しいノードで再起動した場合に、1 つのレプリカが実行していることを確認します。
 
以下のコマンドを実行して、ゲートウェイホスト名と製品ページの URL を取得します。
HOST=$(oc get route istio-ingressgateway -n info -o jsonpath='{.spec.host}')$ HOST=$(oc get route istio-ingressgateway -n info -o jsonpath='{.spec.host}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Web ブラウザーから
productpageにアクセスできることを確認します。echo productpage URL: http://$HOST/productpage
$ echo productpage URL: http://$HOST/productpageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
2.5.4. Gateway API を使用して Bookinfo アプリケーションにアクセスする リンクのコピーリンクがクリップボードにコピーされました!
					Kubernetes Gateway API は、Gateway リソースを作成してゲートウェイをデプロイします。OpenShift Container Platform 4.15 以降では、Red Hat OpenShift Service Mesh は Gateway API カスタムリソース定義 (CRD) を実装します。ただし、OpenShift Container Platform 4.18 以前では、デフォルトで CRD はインストールされません。そのため、OpenShift Container Platform 4.15 から 4.18 では、CRD を手動でインストールする必要があります。OpenShift Container Platform 4.19 以降では、これらの CRD は自動的にインストールおよび管理されるようになるため、作成、更新、削除できなくなります。
				
OpenShift Container Platform 4.19 以降で Ingress 用の Gateway API を有効にする方法の詳細は、OpenShift Container Platform ドキュメントの「Ingress クラスタートラフィックの設定」を参照してください。
Red Hat は、Red Hat OpenShift Service Mesh で Kubernetes Gateway API を使用するためのサポートを提供します。Red Hat では、Kubernetes Gateway API カスタムリソース定義 (CRD) のサポートは提供しません。この手順では、コミュニティーゲートウェイ API CRD の使用はデモンストレーションの目的でのみ示されています。
前提条件
- 
							OpenShift Container Platform Web コンソールに 
cluster-adminとしてログインしている。 - Red Hat OpenShift Service Mesh Operator がインストールされている。
 - Istio リソースが確実にデプロイされている。
 
手順
次のコマンドを実行して、OpenShift Container Platform 4.18 以前の Gateway API CRD を有効にします。
oc get crd gateways.gateway.networking.k8s.io &> /dev/null || { oc kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.0.0" | oc apply -f -; }$ oc get crd gateways.gateway.networking.k8s.io &> /dev/null || { oc kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.0.0" | oc apply -f -; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
GatewayおよびHTTPRouteリソースを使用してゲートウェイを作成および設定します。oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/gateway-api/bookinfo-gateway.yaml -n bookinfo
$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/gateway-api/bookinfo-gateway.yaml -n bookinfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この例では、ゲートウェイ API を使用して
infoアプリケーションでゲートウェイを設定するために、アプリケーションがインストールされている namespace に適用する必要があるサンプルゲートウェイ設定ファイルを使用します。次のコマンドを実行して、Gateway API サービスが準備完了状態で、アドレスが割り当てられていることを確認します。
oc wait --for=condition=programmed gtw info-gateway -n bookinfo
$ oc wait --for=condition=programmed gtw info-gateway -n bookinfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してホストを取得します。
export INGRESS_HOST=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.status.addresses[0].value}')$ export INGRESS_HOST=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.status.addresses[0].value}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してポートを取得します。
export INGRESS_PORT=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.spec.listeners[?(@.name=="http")].port}')$ export INGRESS_PORT=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.spec.listeners[?(@.name=="http")].port}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してゲートウェイ URL を取得します。
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、ゲートウェイホスト名と製品ページの URL を取得します。
echo "http://${GATEWAY_URL}/productpage"$ echo "http://${GATEWAY_URL}/productpage"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
検証
- Web ブラウザーから productpage にアクセスできることを確認します。