2.8. Service Mesh へのアプリケーションのデプロイ

警告

こちらは、サポートされなくなった Red Hat OpenShift Service Mesh リリースのドキュメントです。

Service Mesh バージョン 1.0 および 1.1 コントロールプレーンはサポートされなくなりました。Service Mesh コントロールプレーンのアップグレードについては、Service Mesh の アップグレード を参照してください。

特定の Red Hat Service Mesh リリースのサポートステータスについては、製品ライフサイクルページ を参照してください。

アプリケーションを Service Mesh にデプロイする場合、Istio のアップストリームのコミュニティーバージョンのアプリケーションの動作と Red Hat OpenShift Service Mesh インストール内のアプリケーションの動作に違いがいくつかあります。

2.8.1. 前提条件

2.8.2. コントロールプレーンのテンプレートの作成

ServiceMeshControlPlane テンプレートを使用すると、再利用可能な設定を作成することができます。各ユーザーは、作成するテンプレートを独自の設定で拡張することができます。テンプレートは、他のテンプレートから設定情報を継承することもできます。たとえば、会計チーム用の会計コントロールプレーンとマーケティングチーム用のマーケティングコントロールプレーンを作成できます。開発プロファイルと実稼働テンプレートを作成する場合、マーケティングチームおよび会計チームのメンバーは、チーム固有のカスタマイズで開発および実稼働テンプレートを拡張することができます。

ServiceMeshControlPlane と同じ構文に従うコントロールプレーンのテンプレートを設定する場合、ユーザーは階層的に設定を継承します。Operator は、Red Hat OpenShift Service Mesh のデフォルト設定を使用する default テンプレートと共に提供されます。カスタムテンプレートを追加するには、openshift-operators プロジェクトで smcp-templates という名前の ConfigMap を作成し、/usr/local/share/istio-operator/templates で Operator コンテナーに ConfigMap をマウントする必要があります。

2.8.2.1. ConfigMap の作成

以下の手順に従って、ConfigMap を作成します。

前提条件

  • Service Mesh Operator がインストールされ、検証されていること。
  • cluster-admin ロールを持つアカウントがある。
  • Operator デプロイメントの場所。
  • OpenShift CLI (oc) へのアクセスがある。

手順

  1. クラスター管理者として OpenShift Container Platform CLI にログインします。
  2. CLI で以下のコマンドを実行し、openshift-operators プロジェクトに smcp-templates という名前の ConfigMap を作成し、<templates-directory> をローカルディスクの ServiceMeshControlPlane ファイルの場所に置き換えます。

    $ oc create configmap --from-file=<templates-directory> smcp-templates -n openshift-operators
  3. Operator ClusterServiceVersion 名を見つけます。

    $ oc get clusterserviceversion -n openshift-operators | grep 'Service Mesh'

    出力例

    maistra.v1.0.0            Red Hat OpenShift Service Mesh   1.0.0                Succeeded

  4. Operator クラスターサービスバージョンを編集して、Operator に smcp-templates ConfigMap を使用するよう指示します。

    $ oc edit clusterserviceversion -n openshift-operators maistra.v1.0.0
  5. ボリュームマウントおよびボリュームを Operator デプロイメントに追加します。

    deployments:
      - name: istio-operator
        spec:
          template:
            spec:
              containers:
                volumeMounts:
                  - name: discovery-cache
                    mountPath: /home/istio-operator/.kube/cache/discovery
                  - name: smcp-templates
                    mountPath: /usr/local/share/istio-operator/templates/
              volumes:
                - name: discovery-cache
                  emptyDir:
                    medium: Memory
                - name: smcp-templates
                  configMap:
                    name: smcp-templates
    ...
  6. 変更を保存し、エディターを終了します。
  7. ServiceMeshControlPlanetemplate パラメーターを使用してテンプレートを指定できます。

    apiVersion: maistra.io/v1
    kind: ServiceMeshControlPlane
    metadata:
      name: minimal-install
    spec:
      template: default

2.8.3. サイドカーコンテナーの自動挿入の有効化

アプリケーションをデプロイする場合は、deployment オブジェクトで spec.template.metadata.annotations のアノテーション sidecar.istio.io/injecttrue に設定して、インジェクションをオプトインする必要があります。オプトインにより、サイドカーの挿入が OpenShift Container Platform エコシステム内の複数のフレームワークが使用する、ビルダー Pod などの他の OpenShift Container Platform 機能に干渉しないようにします。

前提条件

  • サービスメッシュの一部である namespace と、サイドカーの自動注入が必要なデプロイメントを特定しておく。

手順

  1. デプロイメントを見つけるには、oc get コマンドを使用します。

    $ oc get deployment -n <namespace>

    たとえば、bookinfo namespaxce の ratings-v1 マイクロサービスのデプロイメントファイルを表示するには、次のコマンドを使用して YAML 形式でリソースを表示します。

    oc get deployment -n bookinfo ratings-v1 -o yaml
  2. エディターでアプリケーションのデプロイメント設定の YAML ファイルを開きます。
  3. 次の例に示すように、spec.template.metadata.annotations.sidecar.istio/inject を Deployment YAML に追加し、sidecar.istio.io/injecttrue に設定します。

    bookinfo deployment-ratings-v1.yaml のスニペットの例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      namespace: bookinfo
      labels:
        app: ratings
        version: v1
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: 'true'

  4. デプロイメント設定ファイルを保存します。
  5. ファイルをアプリケーションが含まれるプロジェクトに追加し直します。

    $ oc apply -n <namespace> -f deployment.yaml

    この例では、bookinforatings-v1 アプリを含むプロジェクトの名前であり、deployment-ratings-v1.yaml は編集したファイルです。

    $ oc apply -n bookinfo -f deployment-ratings-v1.yaml
  6. リソースが正常にアップロードされたことを確認するには、以下のコマンドを実行します。

    $ oc get deployment -n <namespace> <deploymentName> -o yaml

    以下に例を示します。

    $ oc get deployment -n bookinfo ratings-v1 -o yaml

2.8.4. アノテーションによるプロキシー環境変数の設定

Envoy サイドカープロキシーの設定は、ServiceMeshControlPlane によって管理されます。

デプロイメントの Pod アノテーションを injection-template.yaml ファイルに追加することにより、アプリケーションのサイドカープロキシーで環境変数を設定できます。環境変数がサイドカーコンテナーに挿入されます。

injection-template.yaml の例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: resource
spec:
  replicas: 7
  selector:
    matchLabels:
      app: resource
  template:
    metadata:
      annotations:
        sidecar.maistra.io/proxyEnv: "{ \"maistra_test_env\": \"env_value\", \"maistra_test_env_2\": \"env_value_2\" }"

警告

独自のカスタムリソースを作成するときは、maistra.io/ ラベルとアノテーションを含めないでください。これらのラベルとアノテーションは、リソースが Operator によって生成および管理されていることを示しています。独自のリソースの作成時に Operator が生成したリソースからコンテンツをコピーする場合は、maistra.io/ で始まるラベルやアノテーションを含めないでください。これらのラベルまたはアノテーションを含むリソースは、次回の調整時に Operator によって上書きまたは削除されます。

2.8.5. Mixer ポリシー適用の更新

以前のバージョンの Red Hat OpenShift Service Mesh では、Mixer のポリシーの適用がデフォルトで有効にされていました。Mixer ポリシーの適用はデフォルトで無効になりました。ポリシータスクを実行する前にこれを有効にする必要があります。

前提条件

  • OpenShift CLI (oc) へのアクセスがある。
注記

この例では、<istio-system> をコントロールプレーン namespace として使用します。この値は、Service Mesh コントロールプレーン (SMCP) をデプロイした namespace に置き換えます。

手順

  1. OpenShift Container Platform CLI にログインします。
  2. 以下のコマンドを実行して、現在の Mixer ポリシー適用のステータスを確認します。

    $ oc get cm -n <istio-system> istio -o jsonpath='{.data.mesh}' | grep disablePolicyChecks
  3. disablePolicyChecks: true の場合、Service Mesh ConfigMap を編集します。

    $ oc edit cm -n <istio-system> istio
  4. ConfigMap 内で disablePolicyChecks: true を見つけ、値を false に変更します。
  5. 設定を保存してエディターを終了します。
  6. Mixer ポリシー適用ステータスを再度チェックして、false に設定されていることを確認します。

2.8.5.1. 適切なネットワークポリシーの設定

Service Mesh は Service Mesh コントロールプレーンおよびメンバー namespace にネットワークポリシーを作成し、それらの間のトラフィックを許可します。デプロイする前に、以下の条件を考慮し、OpenShift Container Platform ルートで以前に公開されたサービスメッシュのサービスを確認します。

  • Istio が適切に機能するには、サービスメッシュへのトラフィックが常に ingress-gateway を経由する必要があります。
  • サービスメッシュ外のサービスは、サービスメッシュにない個別の namespace にデプロイします。
  • サービスメッシュでリストされた namespace 内にデプロイする必要のあるメッシュ以外のサービスでは、それらのデプロイメント maistra.io/expose-route: "true" にラベルを付けます。これにより、これらのサービスへの OpenShift Container Platform ルートは依然として機能します。

2.8.6. Bookinfo のサンプルアプリケーション

Bookinfo のサンプルアプリケーションでは、OpenShift Container Platform での Red Hat OpenShift Service Mesh 2.2.3 のインストールをテストすることができます。

Bookinfo アプリケーションは、オンラインブックストアの単一カタログエントリーのように、書籍に関する情報を表示します。このアプリケーションでは、書籍の説明、書籍の詳細 (ISBN、ページ数その他の情報)、および書評のページが表示されます。

Bookinfo アプリケーションはこれらのマイクロサービスで設定されます。

  • productpage マイクロサービスは、detailsreviews マイクロサービスを呼び出して、ページを設定します。
  • details マイクロサービスには書籍の情報が含まれています。
  • reviews マイクロサービスには、書評が含まれます。これは ratings マイクロサービスも呼び出します。
  • ratings マイクロサービスには、書評を伴う書籍のランキング情報が含まれます。

reviews マイクロサービスには、以下の 3 つのバージョンがあります。

  • バージョン v1 は、ratings サービスを呼び出しません。
  • バージョン v2 は、ratings サービスを呼び出して、各評価を 1 から 5 の黒い星で表示します。
  • バージョン v3 は、ratings サービスを呼び出して、各評価を 1 から 5 の赤い星で表示します。

2.8.6.1. Bookinfo アプリケーションのインストール

このチュートリアルでは、プロジェクトの作成、そのプロジェクトへの Bookinfo アプリケーションのデプロイ、Service Mesh での実行中のアプリケーションの表示を行い、サンプルアプリケーションを作成する方法を説明します。

前提条件:

  • OpenShift Container Platform 4.1 以降がインストールされている。
  • Red Hat OpenShift Service Mesh 2.2.3 がインストールされている。
  • OpenShift CLI (oc) へのアクセスがある。
  • cluster-admin ロールを持つアカウントがある。
注記

Bookinfo サンプルアプリケーションは、IBM Z および IBM Power Systems にインストールできません。

注記

このセクションのコマンドは、Service Mesh コントロールプレーンプロジェクトが istio-system であると仮定します。コントロールプレーンを別の namespace にインストールしている場合は、実行する前にそれぞれのコマンドを編集します。

手順

  1. cluster-admin 権限を持つユーザーとして OpenShift Container Platform Web コンソールにログインします。(Red Hat OpenShift Dedicated を使用する場合) dedicated-admin ロールがあるアカウント。
  2. HomeProjects をクリックします。
  3. Create Project をクリックします。
  4. Project Name として bookinfo を入力し、Display Name を入力します。その後、Description を入力し、Create をクリックします。

    • または、CLI からこのコマンドを実行して、bookinfo プロジェクトを作成できます。

      $ oc new-project bookinfo
  5. OperatorsInstalled Operators をクリックします。
  6. プロジェクト メニューをクリックし、Service Mesh コントロールプレーンの namespace を使用します。この例では istio-system を使用します。
  7. Red Hat OpenShift Service Mesh Operator をクリックします。
  8. Istio Service Mesh Member Roll タブをクリックします。

    1. Istio Service Mesh Member Roll がすでに作成されている場合には、名前をクリックしてから YAML タブをクリックし、YAML エディターを開きます。
    2. ServiceMeshMemberRoll を作成していない場合は、Create ServiceMeshMemberRoll をクリックします。
  9. Members をクリックし、Value フィールドにプロジェクトの名前を入力します。
  10. Create をクリックして、更新した Service Mesh Member Roll を保存します。

    1. または、以下のサンプルを YAML ファイルに保存します。

      Bookinfo ServiceMeshMemberRoll の例 (servicemeshmemberroll-default.yaml)

      apiVersion: maistra.io/v1
      kind: ServiceMeshMemberRoll
      metadata:
        name: default
      spec:
        members:
        - bookinfo

    2. 以下のコマンドを実行して、そのファイルをアップロードし、istio-system namespace に ServiceMeshMemberRoll リソースを作成します。この例では、istio-system が Service Mesh コントロールプレーンプロジェクトの名前です。

      $ oc create -n istio-system -f servicemeshmemberroll-default.yaml
  11. 以下のコマンドを実行して、ServiceMeshMemberRoll が正常に作成されていることを確認します。

    $ oc get smmr -n istio-system -o wide

    STATUS 列が Configured の場合には、インストールは正常に終了しています。

    NAME      READY   STATUS       AGE   MEMBERS
    default   1/1     Configured   70s   ["bookinfo"]
  12. CLI で 'bookinfo' プロジェクトに Bookinfo アプリケーションをデプロイするには、bookinfo.yaml ファイルを適用します。

    $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/platform/kube/bookinfo.yaml

    以下のような出力が表示されるはずです。

    service/details created
    serviceaccount/bookinfo-details created
    deployment.apps/details-v1 created
    service/ratings created
    serviceaccount/bookinfo-ratings created
    deployment.apps/ratings-v1 created
    service/reviews created
    serviceaccount/bookinfo-reviews created
    deployment.apps/reviews-v1 created
    deployment.apps/reviews-v2 created
    deployment.apps/reviews-v3 created
    service/productpage created
    serviceaccount/bookinfo-productpage created
    deployment.apps/productpage-v1 created
  13. bookinfo-gateway.yaml ファイルを適用して Ingress ゲートウェイを作成します。

    $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/bookinfo-gateway.yaml

    以下のような出力が表示されるはずです。

    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created
  14. GATEWAY_URL パラメーターの値を設定します。

    $ export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')

2.8.6.2. デフォルトの宛先ルールの追加

Bookinfo アプリケーションを使用するには、先にデフォルトの宛先ルールを追加する必要があります。相互トランスポート層セキュリティー (TLS) 認証を有効にしたかどうかによって、2 つの事前設定される YAML ファイルを使用できます。

手順

  1. 宛先ルールを追加するには、以下のいずれかのコマンドを実行します。

    • 相互 TLS を有効にしていない場合:

      $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/destination-rule-all.yaml
    • 相互 TLS を有効にしている場合:

      $ oc apply -n bookinfo -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/destination-rule-all-mtls.yaml

      以下のような出力が表示されるはずです。

      destinationrule.networking.istio.io/productpage created
      destinationrule.networking.istio.io/reviews created
      destinationrule.networking.istio.io/ratings created
      destinationrule.networking.istio.io/details created

2.8.6.3. Bookinfo インストールの検証

Bookinfo アプリケーションのサンプルが正常にデプロイされたことを確認するには、以下の手順を実行します。

前提条件

  • Red Hat OpenShift Service Mesh がインストールされている。
  • Bookinfo サンプルアプリケーションのインストール手順を実行します。

CLI からの手順

  1. OpenShift Container Platform CLI にログインします。
  2. 以下のコマンドですべての Pod が準備状態にあることを確認します。

    $ oc get pods -n bookinfo

    すべての Pod のステータスは Running である必要があります。以下のような出力が表示されるはずです。

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-55b869668-jh7hb        2/2     Running   0          12m
    productpage-v1-6fc77ff794-nsl8r   2/2     Running   0          12m
    ratings-v1-7d7d8d8b56-55scn       2/2     Running   0          12m
    reviews-v1-868597db96-bdxgq       2/2     Running   0          12m
    reviews-v2-5b64f47978-cvssp       2/2     Running   0          12m
    reviews-v3-6dfd49b55b-vcwpf       2/2     Running   0          12m
  3. 以下のコマンドを実行して、製品ページの URL を取得します。

    echo "http://$GATEWAY_URL/productpage"
  4. Web ブラウザーで出力をコピーして貼り付けて、Bookinfo の製品ページがデプロイされていることを確認します。

Kiali Web コンソールからの手順

  1. Kiali Web コンソールのアドレスを取得します。

    1. cluster-admin 権限を持つユーザーとして OpenShift Container Platform Web コンソールにログインします。(Red Hat OpenShift Dedicated を使用する場合) dedicated-admin ロールがあるアカウント。
    2. NetworkingRoutes に移動します。
    3. Routes ページで、Namespace メニューから Service Mesh コントロールプレーンプロジェクトを選択します (例: istio-system)。

      Location 列には、各ルートのリンク先アドレスが表示されます。

    4. Kiali の 場所 列のリンクをクリックします。
    5. Log In With OpenShift をクリックします。Kiali の 概要 画面には、各プロジェクトの namespace のタイルが表示されます。
  2. Kiali で、グラフ をクリックします。
  3. Namespace リストから bookinfo を選択し、Graph Type リストから App graph を選択します。
  4. Display メニューから Display idle nodes をクリックします。

    これにより、定義されているが要求を受信または送信していないノードが表示されます。アプリケーションが適切に定義されていることを確認できますが、要求トラフィックは報告されていません。

    Kiali displaying bookinfo application
    • 期間 メニューを使用して、期間を延ばして、古いトラフィックを取得できるようにします。
    • Refresh Rate メニューを使用して、トラフィックを頻繁に更新するか、まったく更新しないようにします。
  5. ServicesWorkloads または Istio Config をクリックして、bookinfo コンポーネントのリストビューを表示し、それらが正常であることを確認します。

2.8.6.4. Bookinfo アプリケーションの削除

以下の手順で、Bookinfo アプリケーションを削除します。

前提条件

  • OpenShift Container Platform 4.1 以降がインストールされている。
  • Red Hat OpenShift Service Mesh 2.2.3 がインストールされている。
  • OpenShift CLI (oc) へのアクセスがある。
2.8.6.4.1. Bookinfo プロジェクトの削除

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. HomeProjects をクリックします。
  3. bookinfo メニュー kebab をクリックしてから Delete Project をクリックします。
  4. 確認ダイアログボックスに bookinfo と入力してから Delete をクリックします。

    • または、CLI を使用して以下のコマンドを実行し、bookinfo プロジェクトを作成できます。

      $ oc delete project bookinfo
2.8.6.4.2. Service Mesh Member Roll からの Bookinfo プロジェクトの削除

手順

  1. OpenShift Container Platform Web コンソールにログインします。
  2. OperatorsInstalled Operators をクリックします。
  3. Project メニューをクリックし、一覧から istio-system を選択します。
  4. Red Hat OpenShift Service Mesh Operator の Provided APIS で、Istio Service Mesh Member Roll のリンクをクリックします。
  5. ServiceMeshMemberRoll メニュー kebab をクリックし、Edit Service Mesh Member Roll を選択します。
  6. デフォルトの Service Mesh Member Roll YAML を編集し、members 一覧から bookinfo を削除します。

    • または、CLI を使用して以下のコマンドを実行し、ServiceMeshMemberRoll から bookinfo プロジェクトを削除できます。この例では、istio-system が Service Mesh コントロールプレーンプロジェクトの名前です。

      $ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"bookinfo"'"]}]'
  7. Save をクリックして、Service Mesh Member Roll を更新します。

2.8.7. サンプルトレースの生成とトレースデータの分析

Jaeger はオープンソースの分散トレースシステムです。Jaeger を使用すると、トレースを実行でき、アプリケーションを設定するさまざまなマイクロサービスで要求のパスを追跡します。Jaeger はデフォルトで Service Mesh の一部としてインストールされます。

このチュートリアルでは、Service Mesh と Bookinfo サンプルアプリケーションを使用して、Jaeger で分散トレースを実行する方法を示します。

前提条件:

  • OpenShift Container Platform 4.1 以降がインストールされている。
  • Red Hat OpenShift Service Mesh 2.2.3 がインストールされている。
  • インストール時に Jaeger が有効にされている。
  • Bookinfo のサンプルアプリケーションがインストールされている。

手順

  1. Bookinfo サンプルアプリケーションのインストール後に、トラフィックをメッシュに送信します。以下のコマンドを数回入力します。

    $ curl "http://$GATEWAY_URL/productpage"

    このコマンドはアプリケーションの productpage マイクロサービスにアクセスするユーザーをシミュレートします。

  2. OpenShift Container Platform コンソールで、NetworkingRoutes に移動し、Jaeger ルートを検索します。これは Location に一覧される URL です。

    • または CLI を使用してルートの詳細のクエリーを実行します。この例では、istio-system が Service Mesh コントロールプレーンの namespace です。

      $ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
      1. 以下のコマンドを実行して Jaeger コンソールの URL を表示します。結果をブラウザーに貼り付け、その URL に移動します。

        echo $JAEGER_URL
  3. OpenShift Container Platform コンソールへアクセスするときに使用するものと同じユーザー名とパスワードを使用してログインします。
  4. Jaeger ダッシュボードの左側のペインで、サービス メニューから productpage.bookinfo を選択し、ペイン下部の Find Traces をクリックします。トレースの一覧が表示されます。
  5. 一覧のトレースのいずれかをクリックし、そのトレースの詳細ビューを開きます。一覧で最初の項目をクリックすると、'/productpage の最終更新に対応する詳細が表示されます。