2.5. Bookinfo アプリケーションについて


info サンプルアプリケーションのインストールは、アプリケーションのデプロイと、クラスター外部からアプリケーションにアクセスできるようにするためのゲートウェイの作成という 2 つのタスクで主に構成されます。

info アプリケーションを使用して、サービスメッシュの機能を調べることができます。bookinfo アプリケーションを使用すると、Web ブラウザーからのリクエストがメッシュを通過してアプリケーションに到達することを簡単に確認できます。

info アプリケーションは、オンラインブックストアの単一のカタログエントリーと同様に、書籍に関する情報を表示します。アプリケーションには、書籍の説明、書籍の詳細 (ISBN、ページ数、その他の情報)、書籍のレビューが記載されたページが表示されます。

info アプリケーションはメッシュを通じて公開され、メッシュ設定によって、アプリケーションを構成するマイクロサービスがリクエストの処理にどのように使用されるかが決まります。レビュー情報は、reviews-v1reviews-v2reviews-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 がデプロイされている。

手順

  1. OpenShift Container Platform Web コンソールで、Home Projects ページに移動します。
  2. Create Project をクリックします。
  3. Project name フィールドに info を入力します。

    Display nameDescription のフィールドは、必須ではなく、補足情報を提供します。

  4. Create をクリックします。
  5. 次のコマンドを入力して、Istio ディスカバリーセレクターとインジェクションラベルを info namespace に適用します。

    $ oc label namespace info istio-discovery=enabled istio-injection=enabled
    Copy to Clipboard Toggle word wrap
    注記

    この例では、Istio リソースの名前は default です。Istio リソース名が異なる場合は、istio-injection=enabled ラベルを追加するのではなく、istio.io/rev ラベルを Istio リソースの名前に設定する必要があります。

  6. 次のコマンドを入力して、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
    Copy to Clipboard Toggle word wrap

検証

  1. 次のコマンドを実行して、info サービスが利用可能であることを確認します。

    $ oc get services -n info
    Copy to Clipboard Toggle word wrap

    出力例

    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 Toggle word wrap

  2. 次のコマンドを実行して、info Pod が利用可能であることを確認します。

    $ oc get pods -n info
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                             READY   STATUS    RESTARTS   AGE
    details-v1-698d88b-km2jg         2/2     Running   0          66s
    productpage-v1-675fc69cf-cvxv9   2/2     Running   0          65s
    ratings-v1-6484c4d9bb-tpx7d      2/2     Running   0          65s
    reviews-v1-5b5d6494f4-wsrwp      2/2     Running   0          65s
    reviews-v2-5b667bcbf8-4lsfd      2/2     Running   0          65s
    reviews-v3-5b9bd44f4-44hr6       2/2     Running   0          65s
    Copy to Clipboard Toggle word wrap

    Ready 列に 2/2 と表示される場合、プロキシーサイドカーは正常に注入されています。各 Pod の Status 列に Running と表示されていることを確認します。

  3. 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>"
    Copy to Clipboard Toggle word wrap

2.5.2. ゲートウェイを使用して Bookinfo アプリケーションにアクセスする方法

Red Hat OpenShift Service Mesh Operator はゲートウェイをデプロイしません。ゲートウェイはコントロールプレーンの一部ではありません。セキュリティーのベストプラクティスとして、Ingress ゲートウェイと Egress ゲートウェイは、コントロールプレーンが含まれる namespace とは別の namespace にデプロイする必要があります。

ゲートウェイ API またはゲートウェイインジェクションメソッドのいずれかを使用してゲートウェイをデプロイできます。

ゲートウェイインジェクションは、Istio サイドカーインジェクションと同じメカニズムを使用して、Service リソースとペアになっている Deployment リソースからゲートウェイを作成します。Service リソースは、OpenShift Container Platform クラスターの外部からアクセスできるようになります。

前提条件

  • OpenShift Container Platform Web コンソールに cluster-admin としてログインしている。
  • Red Hat OpenShift Service Mesh Operator がインストールされている。
  • Istio リソースが確実にデプロイされている。

手順

  1. 以下のコマンドを実行して istio-ingressgateway のデプロイメントおよびサービスを作成します。

    $ oc apply -n info -f ingress-gateway.yaml
    Copy to Clipboard Toggle word wrap
    注記

    この例では、Istio コミュニティーリポジトリーで使用可能なサンプル ingress-gateway.yaml ファイル を使用します。

  2. 新しいゲートウェイを使用するように info アプリケーションを設定します。次のコマンドを実行して、ゲートウェイ設定を適用します。

    $ 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 Toggle word wrap
    注記

    この例では、info アプリケーションでゲートウェイインジェクションを設定するために、アプリケーションがインストールされている namespace に適用する必要があるサンプルゲートウェイ設定ファイルを使用します。

  3. 次のコマンドを実行して、ルートを使用してクラスターの外部にゲートウェイを公開します。

    $ oc expose service istio-ingressgateway -n info
    Copy to Clipboard Toggle word wrap
  4. Ingress トラフィックが増加した場合に Pod を自動的にスケーリングするように、YAML ファイルを変更します。

    設定例

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      labels:
        istio: ingressgateway
        release: istio
      name: ingressgatewayhpa
      namespace: info
    spec:
      maxReplicas: 5 
    1
    
      metrics:
      - resource:
          name: cpu
          target:
            averageUtilization: 80
            type: Utilization
        type: Resource
      minReplicas: 2
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: istio-ingressgateway
    Copy to Clipboard Toggle word wrap

    1
    この例では、最大レプリカを 5 に設定し、最小レプリカを 2 に設定します。また、使用率が 80% に達すると、別のレプリカが作成されます。
  5. ノードで実行する必要がある Pod の最小数を指定します。

    設定例

    apiVersion: policy/v1
    kind: PodDisruptionBudget
    metadata:
      labels:
        istio: ingressgateway
        release: istio
      name: ingressgatewaypdb
      namespace: info
    spec:
      minAvailable: 1 
    1
    
      selector:
        matchLabels:
          istio: ingressgateway
    Copy to Clipboard Toggle word wrap

    1
    この例では、Pod が新しいノードで再起動した場合に、1 つのレプリカが実行していることを確認します。
  6. 以下のコマンドを実行して、ゲートウェイホスト名と製品ページの URL を取得します。

    $ HOST=$(oc get route istio-ingressgateway -n info -o jsonpath='{.spec.host}')
    Copy to Clipboard Toggle word wrap
  7. 次のコマンドを実行して、Web ブラウザーから productpage にアクセスできることを確認します。

    $ echo productpage URL: http://$HOST/productpage
    Copy to Clipboard Toggle word wrap

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 リソースが確実にデプロイされている。

手順

  1. 次のコマンドを実行して、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 -; }
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、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
    Copy to Clipboard Toggle word wrap
    注記

    この例では、ゲートウェイ API を使用して info アプリケーションでゲートウェイを設定するために、アプリケーションがインストールされている namespace に適用する必要があるサンプルゲートウェイ設定ファイルを使用します。

  3. 次のコマンドを実行して、Gateway API サービスが準備完了状態で、アドレスが割り当てられていることを確認します。

    $ oc wait --for=condition=programmed gtw info-gateway -n bookinfo
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行してホストを取得します。

    $ export INGRESS_HOST=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.status.addresses[0].value}')
    Copy to Clipboard Toggle word wrap
  5. 次のコマンドを実行してポートを取得します。

    $ export INGRESS_PORT=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.spec.listeners[?(@.name=="http")].port}')
    Copy to Clipboard Toggle word wrap
  6. 次のコマンドを実行してゲートウェイ URL を取得します。

    $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
    Copy to Clipboard Toggle word wrap
  7. 以下のコマンドを実行して、ゲートウェイホスト名と製品ページの URL を取得します。

    $ echo "http://${GATEWAY_URL}/productpage"
    Copy to Clipboard Toggle word wrap

検証

  • Web ブラウザーから productpage にアクセスできることを確認します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat