IBM Cloud Docs
Red Hat OpenShift on IBM Cloud のサービス・メッシュ

Red Hat OpenShift on IBM Cloud のサービス・メッシュ

このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。

このチュートリアルでは、 Red Hat OpenShift on IBM Cloud クラスターに BookInfo というサンプル・アプリのマイクロサービスとともに Red Hat OpenShift サービス・メッシュをインストールする方法について説明します。 また、サービス・メッシュの外部にサービスを公開するための Istio Ingress Gateway の構成方法、トラフィック管理を実行して A/B テストやカナリア・デプロイメントなどの重要なタスクをセットアップする方法、マイクロサービスの通信を保護する方法、メトリック、ロギング、およびトレースを使用してサービスを監視する方法についても学習します。

オープン・ソースの Istio プロジェクトに基づいて、 Red Hat OpenShift サービス・メッシュは、既存の分散アプリケーションに透過レイヤーを追加します。 Red Hat OpenShift サービス・メッシュは、サービス・メッシュ内のネットワーク・マイクロサービスに対する動作上の洞察と運用上の制御のためのプラットフォームを提供します。 Red Hat OpenShiftを使用して、 Red Hat OpenShift on IBM Cloud クラスター内のマイクロサービスの接続、保護、およびモニターを行うことができます。

Istio は、 Red Hat OpenShift on IBM Cloudの Kubernetes などのクラウド・プラットフォームでマイクロサービス (サービス・メッシュとも呼ばれる) を接続、保護、制御、および監視するためのオープン・プラットフォームです。

目標

  • Red Hat OpenShift サービス・メッシュをクラスターにインストールします。
  • BookInfo サンプル・アプリケーションをデプロイする
  • メトリック、ロギング、およびトレースを使用してサービスを監視する
  • Istio Ingress Gateway をセットアップする
  • シンプルなトラフィック管理 (A/B テストやカナリア・デプロイメントなど) を実行する
  • mTLS を使用してメッシュを保護する

アーキテクチャー図
図 1. チュートリアルのアーキテクチャー・ダイアグラム

  1. 管理者は Red Hat OpenShift on IBM Cloud クラスターをプロビジョンし、サービス・メッシュ・オペレーターを他のテレメトリー・オペレーターとともにインストールします。
  2. 管理者が istio-system 名前空間 (プロジェクト) を作成し、ServiceMeshControlPlane を作成する。
  3. 管理者が、自動サイドカー注入を有効にして bookinfo 名前空間を作成し、BookInfo アプリケーション (4 つの別個のマイクロサービスを含む) をサービス・メッシュにデプロイする。
  4. 管理者が、Istio Ingress Gateway を使用して外部トラフィックにアプリケーションを公開する。
  5. ユーザーが、ブラウザーからアプリケーションに安全に (HTTPS) アクセスする。
  6. 管理者が、メトリック、トレース、ログを使用して、マイクロサービスの正常性とパフォーマンスをモニターする。

開始前に

このチュートリアルでは、以下が必要です。

  • IBM Cloud CLI
    • IBM Cloud Kubernetes Service プラグイン (kubernetes-service)
  • oc: OpenShift と対話します。

ご使用のオペレーティング環境でこれらのツールをダウンロードおよびインストールするための手順は、チュートリアルの概説ガイドに記載されています。

これらのツールのインストールを回避するには、 IBM Cloud コンソールから Cloud Shell を使用できます。 oc version を使用して、Red Hat OpenShift on IBM Cloud CLI のバージョンがクラスターのバージョン (4.13.x) と一致することを確認します。一致しない場合は、以下の指示に従って、一致するバージョンをインストールしてください。

Red Hat OpenShift on IBM Cloud クラスターの作成

Red Hat OpenShift on IBM Cloudを使用すると、エンタープライズ・ワークロードをコンテナー化してクラスターにデプロイするための高速かつ安全な方法を利用できます。 Red Hat OpenShift on IBM Cloud クラスターは、開発ライフサイクル操作の一貫性と柔軟性を提供する Kubernetes コンテナー・オーケストレーション上に構築されています。

このセクションでは、2 つのワーカー・ノードを持つ、1 つのゾーン内の Red Hat OpenShift on IBM Cloud クラスターをプロビジョンします。

  1. IBM Cloud アカウントにログインし、 Red Hat OpenShift on IBM Cloud クラスター作成ページ から Red Hat OpenShift on IBM Cloud クラスターを作成します。
  2. 「オーケストレーション・サービス」4.13.x バージョンの Red Hat OpenShift on IBM Cloud に設定します。
  3. OCP 使用権を選択します。
  4. 「インフラストラクチャー」 の下で、クラシックまたは VPC を選択します
    • VPC インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合は、Kubernetes クラスターを作成する前に VPC と 1 つのサブネットを作成する必要があります。 以下の点に留意して、ご希望の VPC を作成または検査します (標準 VPC クラスターの作成に記載されている手順を参照してください)。
      • このチュートリアルで使用できるサブネットは 1 つ (サブネットのゾーンと名前をメモしてください)
      • パブリック・ゲートウェイがサブネットに接続される
    • ご希望の VPC を選択する
    • 既存の Cloud Object Storage サービスを選択するか、必要な場合は作成してから選択する
  5. 「ロケーション」 の下で、以下のようにします
    • VPC インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合
      • リソース・グループ を選択します
      • 該当しないゾーンのチェック・マークを外します
      • ご希望のゾーンで、ご希望のサブネット名を確認し、ない場合は編集の鉛筆ボタンをクリックして、ご希望のサブネット名を選択します
    • クラシック・インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合、標準クラシック・クラスターの作成手順に従います。
      • リソース・グループ を選択します
      • 地域 を選択します
      • 「可用性」 として 「単一ゾーン」 を選択します
      • データ・センター を選択します
  6. 「ワーカー・プール (Worker pool)」 の下で、以下のようにします
    • 4 vCPUs 16GB メモリー をフレーバーとして選択します
    • このチュートリアル用に、データ・センターごとに 2 つのワーカー・ノードを選択します (クラシックのみ: 「ローカル・ディスクの暗号化」 をそのままにします)
  7. 「リソースの詳細」 で、 <your-initials> を独自のイニシャルに置き換えて、 「クラスター名」< your-initials> -myopenshiftcluster に設定します。
  8. 「作成」 をクリックして、 Red Hat OpenShift on IBM Cloud クラスターをプロビジョンします。

ここで選択したリソース・グループをメモしておいてください。 この同じリソース・グループを、このラボのすべてのリソースに使用することになります。

IBM Cloud Shell によるクラスターへのアクセス

Red Hat OpenShift on IBM Cloud Container Platform CLI は、アプリケーションを管理するためのコマンドと、システムの各コンポーネントと対話するための下位レベルのツールを公開します。 oc コマンドを使用すると、この CLI を使用できます。

コマンド・ライン・ツールのインストールを避ける場合は、IBM Cloud Shell を使用することをお勧めします。

IBM Cloud Shell は、ブラウザーで利用できるクラウド・ベースのシェル・ワークスペースです。 完全な IBM Cloud CLI と、アプリ、リソース、インフラストラクチャーの管理に使用できる数多くのプラグインおよびツールが事前構成されています。

この手順では、IBM Cloud シェルを使用して、割り当てられたクラスターを指すように oc を構成します。

  1. クラスターの準備ができたら、クラスターの概要ページで OpenShift Web コンソール をクリックしてコンソールを開きます。 このウィンドウ/タブは閉じないでください
  2. Web コンソールで、画面右上のユーザーの名前の下にあるドロップダウンをクリックし、「Copy Login Command」 を選択して 「Display Token」 リンクをクリックします。
  3. 「Log in with this token」 下のテキストをコピーします。
  4. 新しいブラウザー・タブまたはブラウザー・ウィンドウで、IBM Cloud Shell を開いて新しいセッションを開始します。 セッションが開始すると、IBM Cloud CLI に自動的にログインします。 このウィンドウ/タブは閉じないでください
  5. OpenShift CLI のバージョンを確認します。
    oc version
    
  6. バージョンは少なくとも 4.13.xでなければなりません。そうでない場合は、 こちらの手順 に従って最新バージョンをインストールしてください。
  7. Web コンソールからコピーしたログイン・コマンドを貼り付けて、Enter キーを押します。 oc login コマンドを使用してログインしたら、以下のコマンドを実行してクラスター内のすべての名前空間を表示します。
    oc get ns
    
  8. Cloud Shell から、 oc new-project コマンドを使用して「bookinfo」というプロジェクトを作成します。 プロジェクトは、サービス・メッシュのインストール後に作成されたアプリケーションを保持します。
    oc new-project bookinfo
    
    Red Hat OpenShift では、プロジェクトは追加のアノテーションを持つ Kubernetes 名前空間です。

サービス・メッシュ - Istio のインストール

このセクションでは、クラスターにサービス・メッシュ - Istio をインストールします。 サービス・メッシュのインストールには、Elasticsearch、Jaeger、Kiali およびサービス・メッシュ・オペレーターのインストール、コントロール・プレーンをデプロイするための ServiceMeshControlPlane リソースの作成と管理、サービス・メッシュに関連付ける名前空間を指定するための ServiceMeshMemberRoll リソースの作成が伴います。

一部のプロジェクトには複数の演算子があります。 以下に指定されているものをインストールする際には注意してください。

Elasticsearch - オープン・ソースの Elasticsearch プロジェクトに基づいており、Jaeger を使用してトレースとロギングを実行するための Elasticsearch クラスターを構成および管理できます。

Jaeger - オープン・ソースの Jaeger プロジェクトに基づいており、複雑な分散システムでトレースを実行してトランザクションのモニターおよびトラブルシューティングを行えるようにします。

Kiali - オープン・ソースの Kiali プロジェクトに基づいており、サービス・メッシュの可観測性を提供します。 Kiali を使用すると、単一のコンソールで、構成の表示、トラフィックのモニター、トレースの表示と分析を行うことができます。

Red Hat OpenShift サービス・メッシュ-オープン・ソースの Istio プロジェクトに基づいて、アプリケーションを構成するマイクロサービスの接続、保護、制御、監視を行うことができます。

オペレーターのインストール

  1. Red Hat OpenShift Web コンソール の左側ペインで、ドロップダウンから 「Administrator」 を選択します。
  2. 「Operators」 を選択してから、「OperatorHub」 を選択します。
  3. 「OpenShift Elasticsearch Operator」 を検索し、該当するタイルをクリックして 「Install」 をクリックし、デフォルトの選択のままにして 「Install」 をクリックします。
  4. 上記のステップ 2 と 3 を 繰り返し て、以下のオペレーターをインストールします。
    1. Red Hat OpenShift 分散トレース・プラットフォーム
    2. Kiali Operator (Red Hat 提供)
    3. Red Hat OpenShift サービス・メッシュ

デフォルトの openshift-operators プロジェクトに各オペレーターがインストールされたので、クラスター内のすべてのプロジェクトでこれらのオペレーターを使用できるようになりました。

Red Hat OpenShift サービス・メッシュ・コントロール・プレーンのデプロイ

Red Hat OpenShift サービス・メッシュ・オペレーターは、 ServiceMeshControlPlane リソースを使用して、Istio のインストール方法と必要なコンポーネントを決定します。 では、このリソースを作成しましょう。

  1. Web コンソールの左側ペインの 「Home」 に移動して新規プロジェクトを作成し、「Projects」 をクリックしてから 「Create Project」 をクリックします。
  2. istio-system「Name」 と入力し、「Create」 をクリックします。
  3. 「Operators」 に移動し、「Installed Operators」 をクリックします。
  4. 上部バーの「Project」メニューから istio-system を選択します。
  5. Red Hat OpenShift 「サービス・メッシュ」 をクリックします。 表示されない場合は、数分待ってから最新表示してください。
  6. 「Details」タブの 「Istio Service Mesh Control Plane」 タイルで、「Create Instance」 または 「Create ServiceMeshControlPlane」 をクリックします。
  7. 次に、「Create」 をクリックします。 オペレーターが、構成パラメーターに基づいて、ポッド、サービス、およびサービス・メッシュ・コントロール・プレーン・コンポーネントを作成します。
  8. サービス・メッシュ・コントロール・プレーンが適切にインストールされていることを確認するには、リスト内の の下の 「basic」Nameをクリックします。 後続のページに、 「コンポーネント」 の準備ができていることが表示されます。 さらに、ページの 「条件」 セクションまでスクロールすると、理由 ComponentsReady とメッセージ All component deployments are Available が表示されます。

ServiceMeshMemberRoll の作成

サービス・メッシュに関連付ける名前空間を指定するには、ServiceMeshMemberRoll リソースを使用します。

  1. もう一度 「Operators」「Installed Operators」 に移動します。
  2. Red Hat OpenShift 「サービス・メッシュ」 をクリックします。
  3. 「Details」タブの 「Istio Service Mesh Member Roll」 タイルで、「Create Instance」 または 「Create ServiceMeshMemberRoll」 をクリックしてから、「YAML View」 を選択します。
  4. your-projectbookinfo に変更し、最後の行 (- another-of-your-projects) を削除します。編集後の YAML は、以下のようになります。
    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system
    spec:
      members:
        - bookinfo
    
  5. 次に、「Create」 をクリックします。

Istio が正常にクラスターにインストールされました。

サービス・メッシュへの bookInfo アプリケーションのデプロイ

BookInfo アプリケーション は、オンライン・ブック・ストアの単一のカタログ・エントリーと同様に、ブックに関する情報を表示します。 ページには、本の説明、本の詳細 (ISBN、ページ数など)、いくつかの書評が表示されます。

Bookinfo アプリケーションは、以下の 4 つの別個のマイクロサービスで構成されています。

  • productpage: productpage マイクロサービスは、details マイクロサービスと reviews マイクロサービスを呼び出して、ページにデータを取り込みます。
  • details: details マイクロサービスには、本の情報が入っています。
  • reviews: reviews マイクロサービスには、書評が入っています。 また、これは ratings マイクロサービスを呼び出します。
  • ratings: ratings マイクロサービスには、書評に添えた本のランク情報が入っています。

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

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

アプリケーションのエンドツーエンドのアーキテクチャーを以下に示します。

Istio を使用するアーキテクチャー
Istio を使用するアーキテクチャー

Red Hat OpenShift サービス・メッシュは、アプリケーションにサービス・メッシュ機能を提供するために、アプリケーションのポッド内の Envoy サイドカーに依存しています。 自動サイドカー注入を有効にすることも、手動で管理することもできます。 アノテーションを使用した自動注入をお勧めします。

  1. bookinfo.yaml ファイルを Red Hat OpenShift クラスターに適用して、 bookinfo プロジェクトに Bookinfo アプリケーションをデプロイします。 これにより、レビュー・アプリのバージョン v1、 v2 、および v3 を含むすべてのマイクロサービス・アプリケーションがデプロイされます。

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

    bookinfo.yaml ファイルに sidecar.istio.io/inject: "true" というアノテーションが付けられ、 Red Hat OpenShift サービス・メッシュの Istio サイドカーの自動注入が可能になります。 したがって、これらのポッドがクラスター内で起動するときに、Envoy サイドカーもポッドに組み込まれます。

    Red Hat OpenShift サービス・メッシュのインストール済み環境は、複数の点でアップストリームの Istio コミュニティーのインストール済み環境とは異なります。 サービス・メッシュと Istio の比較については、 このリンク を参照してください。 デフォルトでは、Istio は、プロジェクトに istio-injection=enabled というラベルを付けた場合にサイドカーを注入します。 Red Hat OpenShift サービス・メッシュの処理方法が異なるため、デプロイメントにサイドカーを自動的に注入することを選択する必要があります。そのため、プロジェクトにラベルを付ける必要はありません。 これにより、サイドカーが (例えば、ビルド・ポッドやデプロイ・ポッドなどに) 不要に注入されることを回避できます。

  2. ポッドが実行中であることを確認します。

    oc get pods
    

    出力例:

    NAME                              READY     STATUS    RESTARTS   AGE
    details-v1-789c5f58f4-9twtw       2/2       Running   0          4m12s
    productpage-v1-856c8cc5d8-xcx2q   2/2       Running   0          4m11s
    ratings-v1-5786768978-tr8z9       2/2       Running   0          4m12s
    reviews-v1-5874566865-mxfgm       2/2       Running   0          4m12s
    reviews-v2-86865fc7d9-mf6t4       2/2       Running   0          4m12s
    reviews-v3-8d4cbbbbf-rfjcz        2/2       Running   0          4m12s
    

    bookinfo ポッドごとにコンテナーが 2 つあることに注意してください。 1 つは bookinfo コンテナーで、もう 1 つは Envoy プロキシー・サイドカーです。

bookinfo アプリは実行中ですが、まだ外部トラフィックを受信するようにサービスが構成されていないので、このアプリにアクセスすることはできません。 次のセクションで、productpage サービスを公開して着信トラフィックを許可します。

Istio Ingress Gateway およびルートを使用してアプリを公開する

サービス・メッシュにデプロイされたコンポーネントは、デフォルトではクラスター外に公開されません。 Ingress Gateway リソースを作成すると、外部からの要求を Istio Ingress Gateway を介してバッキング・サービスに転送することができます。

  1. Istio Ingress Gateway を使用する bookinfo のデフォルト・ルートを構成します。
    oc create -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/bookinfo-gateway.yaml
    
  2. Istio Ingress Gateway の ルート を取得します。
    oc get routes -n istio-system istio-ingressgateway
    
  3. 前の手順で取得した HOST アドレスを保存します。これ以降、このチュートリアルで BookInfo アプリケーションにアクセスするときに使用するためです。 HOST のアドレスを入力して $INGRESS_HOST という環境変数を作成します。
    export INGRESS_HOST=<HOST>
    
    新しいタブで http://$INGRESS_HOST/productpage に移動して、アプリケーションにアクセスします。 最新表示を何度も実行すると、異なるバージョンのページがランダムな順序で表示されるはずです (v1 - 星なし、v2 - 黒い星、v3 - 赤い星)。 後で使用するためにそのブラウザー・タブを開いたままにします

サービス・テレメトリーの監視 : メトリックおよびトレース

Istio のトレース機能とメトリック機能は、すべてのサービスの正常性について、幅広く細かい洞察を得られるように設計されています。 サービス・メッシュという Istio の役割が、特にマイクロサービス環境において、Istio を可観測性情報のための理想的なデータ・ソースにします。 複数のサービスの間で要求が転送されるので、従来のデバッグ手法では、パフォーマンスのボトルネックを見つけることがますます難しくなってきています。 分散トレースを使用すると、複数のサービスの間を流れる要求の全体像がわかるので、待ち時間の問題をすぐに特定できます。 Istio には、分散トレースがデフォルトで付いてきます。 これにより、要求で行われた各ホップの待ち時間、再試行、および失敗の情報が明らかになります。

Grafana を使用したメトリックの視覚化

Grafana を使用すると、メトリックの保管場所にかかわらず、メトリックの照会、視覚化、アラート生成、調査を行うことができます。

  1. Red Hat OpenShift on IBM Cloud Web コンソール で、以下を行います。

    1. 左側ペインの 「Networking」 下の 「Routes」 をクリックします。
    2. 上部バーで「Project: istio-system 」を選択します。
    3. grafana の横の URL (ロケーション) をクリックします。
    4. Red Hat OpenShift on IBM Cloud にログインし、要求された権限で Grafana ダッシュボードを表示できるようにします。
  2. 左側のナビゲーション・パネルの 「Dashboard」 メニューをクリックし、「Manage」 タブを選択してから、「istio」「Istio Service Dashboard」 を選択します。

  3. productpage.bookinfo.svc.cluster.local「Service」 ドロップダウンで を選択します。

  4. IBM Cloud Shell のタブまたはウィンドウに移動し、前のセクションで設定した Ingress ホストのロケーションにトラフィックを送信して、アプリに小さい負荷をかけます。

    for i in {1..20}; do sleep 0.5; curl -I $INGRESS_HOST/productpage; done
    

各ツイスティーを開くと、ダッシュボードの詳細が表示されます。 「サービス」 ドロップダウンで別のサービスを選択します。 この Grafana ダッシュボードに、各ワークロードのメトリックが表示されます。 提供されている他のダッシュボードも探索してみてください。

Kiali を使用したサービス・メッシュの監視

Kiali は、サービス・メッシュを視覚化するアドオンとして Istio の上にインストールされるオープン・ソースのプロジェクトです。 Kiali では、マイクロサービス間の対話の状況について深い洞察を得ることができるほか、回路ブレーカーや要求レートなどの機能をサービスで利用することができます。

  1. Red Hat OpenShift on IBM Cloud Web コンソール で、以下を行います。
    1. 左側ペインで、 「Networking」「Routes」 をクリックします。
    2. 上部バーからプロジェクトとして istio-system を選択します。
    3. kiali の横の URL (ロケーション) をクリックし、プロンプトが出されたら、「Login with OpenShift」 をクリックします。
  2. 左側のペインで 「Graph」 をクリックし、上部のバーから bookinfo 名前空間と istio-system 名前空間を選択すると、Istio メッシュ内のさまざまなサービスの視覚的な 「Versioned app graph」 が表示されます。
  3. 要求レートを表示するには、 「表示」 をクリックし、 「トラフィック・レート」 を選択します。
  4. 別のタブ/ウィンドウで、BookInfo アプリケーションの URL にアクセスし、ページの最新表示を何度も実行して負荷をかけるか、前のセクションの負荷スクリプトを実行して負荷をかけます。
  5. その後、Kiali グラフで、1 秒あたりの要求数を確認します。

Kiali には、サービスを視覚化するのに便利なビューがいくつもあります。 さまざまなタブをクリックして、サービスのグラフや、ワークロード、アプリケーション、およびサービスに関する各種ビューを探索してみてください。

トラフィック管理の実行

Istio のトラフィック・ルーティング・ルールを使用すると、サービス間のトラフィックのフローおよび API 呼び出しを簡単に制御できます。 Istio では、回路ブレーカー、タイムアウト、再試行などのサービス・レベルのプロパティーの構成が簡易化されているので、A/B テスト、カナリア・ロールアウト、ステージング・ロールアウトなどの重要なタスクを比率ベースのトラフィック分割を使用して簡単にセットアップできます。 また、すぐに使用できる障害復旧機能もあるので、依存サービスまたはネットワークの障害に対して、より堅牢なアプリケーションにすることができます。

Istio のトラフィック管理モデルは、サービスと一緒にデプロイされる Envoy プロキシー (サイドカー) に依存しています。 サービスが送受信するすべてのトラフィック (データ・プレーン・トラフィック) は、Envoy がプロキシーとして処理するので、サービスを変更することなく、簡単にメッシュのトラフィックを誘導および制御できます。

Pilot は、大まかなルールを細かい構成に変換し、その構成を Envoy インスタンスに配布します。 パイロットは、 仮想サービス宛先ルール、および サービス項目という 3 つのタイプの構成リソースを使用して、サービス・メッシュ内のトラフィックを管理します。

Istio を使用した A/B テスト

A/B テストとは、2 つの別個のサービス・バージョンに対して同一のテストを実行し、どちらのほうがパフォーマンスが良いか調べる手法です。 Istio が元のサービスと最新のサービスの間でデフォルトのルーティング動作を実行しないようにするために、以下のルールを定義します。

  1. 以下のコマンドを実行して、Bookinfo サービスのデフォルトの宛先ルールを作成します。

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

    DestinationRule は、ルーティングの発生後にサービスを対象とするトラフィックに適用されるポリシーを定義します。 このルールでは、ロード・バランシングの構成、サイドカーの接続プール・サイズを指定するほか、異常なホストを検出してロード・バランシング・プールから除外するための外れ値検出設定を指定します。 host ルールで指定する宛先 subset および VirtualService は、対応する DestinationRule に定義されている必要があります。

  2. VirtualService は、ホストのアドレスが指定されたときに適用するトラフィック・ルーティング・ルールのセットを定義します。 各ルーティング・ルールでは、特定のプロトコルのトラフィックに対するマッチング条件を定義します。 マッチングしたトラフィックは、レジストリーに定義されている、指定された宛先サービス (またはそのサブセット/バージョン) に送信されます。 以下のコマンドを実行して、すべての reviews トラフィックを v1 に送信します。

    oc create -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/virtual-service-all-v1.yaml
    

    この VirtualService には、reviews サービスに着信するすべての HTTP トラフィックを取り込み、そのトラフィックの 100% を、ラベル「version: v1」が付いたサービス・ポッドに転送するルールが定義されています。 転送先のサブセットまたはバージョンを指定するには、名前付きのサービス・サブセットの参照を使用します。そのサブセットは、対応する DestinationRule で宣言されている必要があります。

  3. ブラウザー・タブで BookInfo アプリケーション表示します。 評価の星がない v1 の BookInfo アプリケーションのみが表示されるはずです。

  4. Istio サービス・メッシュで新しいサービス・バージョンに対する A/B テストを行うために、Firefox トラフィックのみを v2 に送信するように、元の VirtualService ルールを変更します。 user-agent を、マシンにインストールされている他のブラウザーに変更することもできます。

    cat <<EOF | oc replace -f -
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
      - reviews
      http:
      - match:
        - headers:
            user-agent:
              regex: '.*Firefox.*'
        route:
        - destination:
            host: reviews
            subset: v2
      - route:
        - destination:
            host: reviews
            subset: v3
    EOF
    

    Istio VirtualService ルールでは、サービスごとに 1 つのルールしか存在できないため、複数の HTTPRoute ブロックを定義する場合、yaml で定義される順序が重要になります。 そのため、新しいルールを作成するのではなく、元の VirtualService ルールを変更しています。 変更したルールでは、Firefox ブラウザーからの着信要求が、v2 バージョン (黒い星) の bookinfo に転送されます。 その他の要求はすべて次のブロックに渡され、すべてのトラフィックが v3 バージョン (赤い星) の bookinfo に転送されます。

カナリア・デプロイメント

カナリア・デプロイメントでは、新しいバージョンのサービスを段階的にユーザーに提供することで、新しいバージョンによって引き起こされるバグのリスクや影響を最小化できます。 新しいバージョンの bookinfo サービスへのトラフィック転送を段階的に開始するために、元の VirtualService ルールを変更します。

  1. 以下のコマンドを実行して、トラフィックの 80% を v1 に送信します。

    oc replace -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/virtual-service-reviews-80-20.yaml
    

    変更したルールでは、転送トラフィックを、reviews マイクロサービスの 2 つの別々のサブセットに分けています。 この方法では、予期しないバグの影響を抑えるために、新しいバージョン 2 の reviews へのトラフィックを、パーセンテージ単位で制御しています。 このルールを徐々に変更していき、最終的には、すべてのトラフィックを新しいバージョンのサービスに転送することができます。

  2. ブラウザー・タブで再度 BookInfo アプリケーションを表示します。 必ず、ハード・リフレッシュ (Mac の場合は command + Shift + R、Windows の場合は Ctrl + F5) を使用してブラウザーのキャッシュをすべて削除してください。 おおよそ、指定した重みづけで bookinfo アプリケーションの V1 と V2 が切り替わることがわかるはずです。

  3. すべてのトラフィックを reviews v3 に転送するには、以下のコマンドを実行します。

    oc replace -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/virtual-service-reviews-v3.yaml
    

サービスの保護

Istio では、アプリケーション・コードを変更することなく、マイクロサービス間の通信を保護できます。 クラスター内の通信パスを認証および暗号化することで、セキュリティーが提供されます。 この方法は、セキュリティーおよびコンプライアンスの要件として一般的になりつつあります。 (各マイクロサービスで TLS を実装するのではなく) 通信セキュリティーを Istio に委任することで、一貫性のある管理可能なセキュリティー・ポリシーを使用してアプリケーションがデプロイされます。

  1. mTLS を構成するには、前の宛先ルールを ISTIO_MUTUAL を使用するように変更する必要があります。
    oc replace -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/destination-rule-all-mtls.yaml
    
  2. より多くのトラフィックをアプリケーションに送信します。 以前と変わらず、すべて正常に機能するはずです。
  3. もう一度 Kiali を起動して、「Graph」 に移動します。
  4. 上部のbookinfo「Namespace」 バーで を選択します。
  5. 「Display」で 「Security」 を選択します。 すべての矢印 (トラフィック) に ロック ・アイコンが表示されています。
  6. トラフィックが保護されていることを確認するために、productpage から v1 への矢印をクリックします。右側のペインにロック・アイコン付きでmTLS Enabledと表示されます。

クラスターに着信するトラフィックの SSL を有効にする (HTTPS)

このセクションでは、Red Hat OpenShift on IBM Cloud に用意されているデフォルトの証明書を使用し、エッジ での終端処理を指定して Ingress Gateway へのセキュアなルートを作成します。 エッジ・ルートを使用することで、Ingress Controller は TLS 暗号化を終端してから、istio-ingressgateway ポッドにトラフィックを転送します。

  1. Red Hat OpenShift on IBM Cloud コンソールを起動します。
  2. 「Networking」「Routes」 に移動します。
  3. 上部バーから istio-system プロジェクトを選択し、「Create Route」 をクリックします。
    1. 名前: istio-ingressgateway-secure
    2. Service: istio-ingressgateway
    3. ターゲット・ポート 80->8080(TCP)
    4. 確認 Secure Route
    5. TLS Termination: Edge
    6. Insecure Traffic: None
  4. 「作成」 をクリックします。
  5. istio-ingressgateway-secure ルートの 「Location」 セクションの新しい HTTPS URL にアクセスします。 URL の末尾に忘れずに /productpage を追加してください。

リソースを削除する

個別リソースを少しずつ削除することも、これらのステップをスキップしてクラスター全体を直接削除することもできます。

アプリケーション・プロジェクトの削除

  • bookinfo プロジェクトを削除するには、次のコマンドを実行します。
    oc delete project bookinfo
    

CLI からの ServiceMeshControlPlane の削除

  1. 以下のコマンドを実行して、インストール済みの ServiceMeshControlPlane の名前を取得します。
    oc get servicemeshcontrolplanes -n istio-system
    
  2. <NAME_OF_CUSTOM_RESOURCE> を前のコマンドの名前に置き換え、このコマンドを実行してカスタム・リソースを削除します。
    oc delete servicemeshcontrolplanes -n istio-system <NAME_OF_CUSTOM_RESOURCE>
    
    ServiceMeshMemberRoll リソースを削除すると、関連付けられている ServiceMeshControlPlane リソースが自動的に削除されます。

オペレーターの削除

  1. Web コンソールで 「Operators」「Installed Operators」 ページに移動します。
  2. 「オペレーターの詳細」ページの右側で、 Red Hat OpenShift サービス・メッシュ ・オペレーターの「アクション」ドロップダウン・メニューから 「オペレーターのアンインストール」 を選択します。
  3. プロンプトで、「Uninstall」 をクリックします。
  4. リスト内の各オペレーターに対して、手順 2 と 3 を繰り返します。

クラスターの削除

クラスターを削除すれば、すべてを一度に削除することができます。 この操作は元に戻すことができません。

  1. OpenShift クラスター ・ページにナビゲートします。
  2. <your-initials>-myopenshiftcluster の横にあるアクション・メニューをクリックし、「削除」 を選択します。
  3. 「クラスターで使用している永続ストレージを削除する (Delete the persistent storage used by the cluster)」 を選択し、確認のためにクラスターの名前を入力します。
  4. 「削除」 をクリックします。

関連コンテンツ