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 ディスカバリーセレクターとインジェクションラベルを
info
namespace に適用します。oc label namespace info istio-discovery=enabled istio-injection=enabled
$ oc label namespace info istio-discovery=enabled istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この例では、Istio リソースの名前は
default
です。Istio リソース名が異なる場合は、istio-injection=enabled
ラベルを追加するのではなく、istio.io/rev
ラベルを Istio リソースの名前に設定する必要があります。次のコマンドを入力して、
info
YAML ファイルを適用し、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 bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを実行して、
info
サービスが利用可能であることを確認します。oc get services -n info
$ oc get services -n info
Copy 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 44s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
info
Pod が利用可能であることを確認します。oc get pods -n info
$ oc get pods -n info
Copy 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.yaml
Copy 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 bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この例では、
info
アプリケーションでゲートウェイインジェクションを設定するために、アプリケーションがインストールされている namespace に適用する必要があるサンプルゲートウェイ設定ファイルを使用します。次のコマンドを実行して、ルートを使用してクラスターの外部にゲートウェイを公開します。
oc expose service istio-ingressgateway -n info
$ oc expose service istio-ingressgateway -n info
Copy 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/productpage
Copy 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 bookinfo
Copy 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 bookinfo
Copy 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_PORT
Copy 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 にアクセスできることを確認します。