1.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 を参照してください。

1.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
    注記

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

  6. 次のコマンドを入力して、info YAML ファイルを適用し、bookinfo アプリケーションをデプロイします。

    oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/platform/kube/bookinfo.yaml -n bookinfo

検証

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

    $ oc get services -n info

    出力例

    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

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

    $ oc get pods -n info

    出力例

    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

    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>"

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

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

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

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

ゲートウェイインジェクションは、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
    注記

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

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

    $ oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/networking/bookinfo-gateway.yaml -n bookinfo
    注記

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

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

    $ oc expose service istio-ingressgateway -n info
  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

    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

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

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

    $ echo productpage URL: http://$HOST/productpage

1.5.4. Gateway API を使用して Bookinfo アプリケーションにアクセスする

Kubernetes Gateway API は、Gateway リソースを作成してゲートウェイをデプロイします。(OpenShift Container Platform 4.15 以降のバージョン)。クラスターで Gateway API CRD を使用する場合は、CRD はデフォルトで無効になっているため、有効にする必要があります。

注記

Red Hat は、Red Hat OpenShift Service Mesh で Kubernetes Gateway API を使用するためのサポートを提供します。Red Hat では、Kubernetes Gateway API カスタムリソース定義 (CRD) のサポートは提供しません。この手順では、コミュニティーゲートウェイ API CRD の使用はデモンストレーションの目的でのみ示されています。

  1. 前提条件

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

手順

  1. ゲートウェイ 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 -; }
  2. Gateway リソースと HTTPRoute リソースを使用してゲートウェイを作成および設定します。

    $ oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/gateway-api/bookinfo-gateway.yaml -n bookinfo
    注記

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

  3. Gateway API サービスが準備完了しており、アドレスが割り当てられていることを確認します。

    $ oc wait --for=condition=programmed gtw info-gateway -n bookinfo
  4. ホスト、ポート、ゲートウェイ URL を取得します。

    $ export INGRESS_HOST=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.status.addresses[0].value}')
    $ export INGRESS_PORT=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.spec.listeners[?(@.name=="http")].port}')
    $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
  5. ゲートウェイのホスト名と製品ページの URL を取得します。

    $ echo "http://${GATEWAY_URL}/productpage"
  6. Web ブラウザーから productpage にアクセスできることを確認します。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.