Red Hat OpenShift on IBM Cloud のサービス・メッシュ
このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。
このチュートリアルでは、Red Hat OpenShiftをインストールする方法を説明します。このチュートリアルでは、Red Hat OpenShift on IBM Cloud クラスタにBookInfoというサンプルアプリ用のマイクロサービスと共に Service Mesh をインストールする方法を説明します。 また、サービス・メッシュの外部にサービスを公開するための 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 OpenShiftService Mesh をインストールする
- BookInfo サンプル・アプリケーションをデプロイする
- メトリック、ロギング、およびトレースを使用してサービスを監視する
- Istio Ingress Gateway をセットアップする
- シンプルなトラフィック管理 (A/B テストやカナリア・デプロイメントなど) を実行する
- mTLS を使用してメッシュを保護する
{: caption="図
- 管理者はRed Hat OpenShift on IBM Cloudクラスタをプロビジョニングし、他の遠隔測定オペレータとともにサービス・メッシュ・オペレータをインストールします。
- 管理者が
istio-system
名前空間 (プロジェクト) を作成し、ServiceMeshControlPlane
を作成する。 - 管理者が、自動サイドカー注入を有効にして
bookinfo
名前空間を作成し、BookInfo アプリケーション (4 つの別個のマイクロサービスを含む) をサービス・メッシュにデプロイする。 - 管理者が、Istio Ingress Gateway を使用して外部トラフィックにアプリケーションを公開する。
- ユーザーが、ブラウザーからアプリケーションに安全に (HTTPS) アクセスする。
- 管理者が、メトリック、トレース、ログを使用して、マイクロサービスの正常性とパフォーマンスをモニターする。
開始前に
このチュートリアルでは、以下が必要です。
- IBM Cloud CLI
- IBM Cloud Kubernetes Service プラグイン (
kubernetes-service
)
- IBM Cloud 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 クラスターをプロビジョンします。
- IBM Cloud アカウントにログインし、 Red Hat OpenShift on IBM Cloud クラスター作成ページ から Red Hat OpenShift on IBM Cloud クラスターを作成します。
- Orchestrationサービスを Red Hat OpenShift on IBM Cloudの4.13.xバージョンに設定します。
- OCP 使用権を選択します。
- 「インフラストラクチャー」 の下で、クラシックまたは VPC を選択します
- VPC インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合は、Kubernetes クラスターを作成する前に VPC と 1 つのサブネットを作成する必要があります。 以下の点に留意して、ご希望の VPC を作成または検査します (標準 VPC クラスターの作成に記載されている手順を参照してください)。
- このチュートリアルで使用できるサブネットは 1 つ (サブネットのゾーンと名前をメモしてください)
- パブリック・ゲートウェイがサブネットに接続される
- ご希望の VPC を選択する
- 既存の Cloud Object Storage サービスを選択するか、必要な場合は作成してから選択する
- VPC インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合は、Kubernetes クラスターを作成する前に VPC と 1 つのサブネットを作成する必要があります。 以下の点に留意して、ご希望の VPC を作成または検査します (標準 VPC クラスターの作成に記載されている手順を参照してください)。
- 「ロケーション」 の下で、以下のようにします
- VPC インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合
- リソース・グループ を選択します
- 該当しないゾーンのチェック・マークを外します
- ご希望のゾーンで、ご希望のサブネット名を確認し、ない場合は編集の鉛筆ボタンをクリックして、ご希望のサブネット名を選択します
- クラシック・インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合、標準クラシック・クラスターの作成手順に従います。
- リソース・グループ を選択します
- 地域 を選択します
- 「可用性」 として 「単一ゾーン」 を選択します
- データ・センター を選択します
- VPC インフラストラクチャー上の Red Hat OpenShift on IBM Cloud の場合
- 「ワーカー・プール (Worker pool)」 の下で、以下のようにします
- 4 vCPUs 16GB メモリー をフレーバーとして選択します
- このチュートリアル用に、データ・センターごとに 2 つのワーカー・ノードを選択します (クラシックのみ: 「ローカル・ディスクの暗号化」 をそのままにします)
- リソースの詳細で、クラスタ名を
-myopenshiftcusterと lし、<your-initials>
を自分のイニシャルに置き換える。 - Create をクリックして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
を構成します。
- クラスタの準備ができたら、クラスタの概要ページで OpenShiftweb console をクリックしてコンソールを開きます。 このウィンドウ/タブは閉じないでください
- Web コンソールで、画面右上のユーザーの名前の下にあるドロップダウンをクリックし、「Copy Login Command」 を選択して 「Display Token」 リンクをクリックします。
- 「Log in with this token」 下のテキストをコピーします。
- 新しいブラウザー・タブまたはブラウザー・ウィンドウで、IBM Cloud Shell を開いて新しいセッションを開始します。 セッションが開始すると、IBM Cloud CLI に自動的にログインします。 このウィンドウ/タブは閉じないでください。
- OpenShift CLI のバージョンを確認します。
oc version
- バージョンは最低でも4.13.xである必要があります。そうでない場合は、以下 の手順に従って最新バージョンをインストールしてください。
- Web コンソールからコピーしたログイン・コマンドを貼り付けて、Enter キーを押します。
oc login
コマンドを使用してログインしたら、以下のコマンドを実行してクラスター内のすべての名前空間を表示します。oc get ns
- Cloud Shell から、
oc new-project
コマンドで "bookinfo "というプロジェクトを作成する。 プロジェクトは、サービス・メッシュのインストール後に作成されたアプリケーションを保持します。
Red Hat OpenShift では、プロジェクトは追加のアノテーションを持つ Kubernetes 名前空間です。oc new-project bookinfo
サービス・メッシュ - Istio のインストール
このセクションでは、クラスターにサービス・メッシュ - Istio をインストールします。 サービス・メッシュのインストールには、Elasticsearch、Jaeger、Kiali およびサービス・メッシュ・オペレーターのインストール、コントロール・プレーンをデプロイするための ServiceMeshControlPlane
リソースの作成と管理、サービス・メッシュに関連付ける名前空間を指定するための ServiceMeshMemberRoll
リソースの作成が伴います。
一部のプロジェクトには複数の演算子があります。 以下に指定されているものをインストールする際には注意してください。
Elasticsearch - オープン・ソースの Elasticsearch プロジェクトに基づいており、Jaeger を使用してトレースとロギングを実行するための Elasticsearch クラスターを構成および管理できます。
Jaeger - オープン・ソースの Jaeger プロジェクトに基づいており、複雑な分散システムでトレースを実行してトランザクションのモニターおよびトラブルシューティングを行えるようにします。
Kiali - オープン・ソースの Kiali プロジェクトに基づいており、サービス・メッシュの可観測性を提供します。 Kiali を使用すると、単一のコンソールで、構成の表示、トラフィックのモニター、トレースの表示と分析を行うことができます。
Red Hat OpenShiftService Mesh- オープンソースの Istio プロジェクトをベースにしており、アプリケーションを構成するマイクロサービスの接続、セキュア化、制御、監視を可能にします。
オペレーターのインストール
- Red Hat OpenShift Web コンソール の左側ペインで、ドロップダウンから 「Administrator」 を選択します。
- 「Operators」 を選択してから、「OperatorHub」 を選択します。
- 「OpenShift Elasticsearch Operator」 を検索し、該当するタイルをクリックして 「Install」 をクリックし、デフォルトの選択のままにして 「Install」 をクリックします。
- 上記のステップ 2 と 3 を 繰り返し て、以下のオペレーターをインストールします。
- Red Hat OpenShift 分散トレース・プラットフォーム
- Kiali Operator (Red Hat 提供)
- Red Hat OpenShiftService Mesh.
デフォルトの openshift-operators
プロジェクトに各オペレーターがインストールされたので、クラスター内のすべてのプロジェクトでこれらのオペレーターを使用できるようになりました。
をデプロイするRed Hat OpenShiftサービスメッシュ制御プレーン
Service Mesh オペレータは、Istio のインストール方法と必要なコンポーネントを決定する * リソースを使用します。Service Mesh オペレータは ServiceMeshControlPlane
リソースを使用して、Istio のインストール方法と必要なコンポーネントを決定します。 では、このリソースを作成しましょう。
- Web コンソールの左側ペインの 「Home」 に移動して新規プロジェクトを作成し、「Projects」 をクリックしてから 「Create Project」 をクリックします。
istio-system
「Name」 に と入力し、「Create」 をクリックします。- 「Operators」 に移動し、「Installed Operators」 をクリックします。
- 上部バーの「Project」メニューから
istio-system
を選択します。 - Red Hat OpenShift 「サービス・メッシュ」 をクリックします。 表示されない場合は、数分待ってから最新表示してください。
- 「Details」タブの 「Istio Service Mesh Control Plane」 タイルで、「Create Instance」 または 「Create ServiceMeshControlPlane」 をクリックします。
- 次に、「Create」 をクリックします。 オペレーターが、構成パラメーターに基づいて、ポッド、サービス、およびサービス・メッシュ・コントロール・プレーン・コンポーネントを作成します。
- サービス・メッシュ・コントロール・プレーンが適切にインストールされていることを確認するには、リスト内の の下の 「basic」
Name
をクリックします。 後続のページに、 「コンポーネント」 の準備ができていることが表示されます。 さらに、ページの 「条件」 セクションまでスクロールすると、理由ComponentsReady
とメッセージAll component deployments are Available
が表示されます。
ServiceMeshMemberRoll の作成
サービス・メッシュに関連付ける名前空間を指定するには、ServiceMeshMemberRoll リソースを使用します。
- もう一度 「Operators」 → 「Installed Operators」 に移動します。
- Red Hat OpenShift 「サービス・メッシュ」 をクリックします。
- 「Details」タブの 「Istio Service Mesh Member Roll」 タイルで、「Create Instance」 または 「Create ServiceMeshMemberRoll」 をクリックしてから、「YAML View」 を選択します。
your-project
をbookinfo
に変更し、最後の行 (- another-of-your-projects
) を削除します。編集後の YAML は、以下のようになります。apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default namespace: istio-system spec: members: - bookinfo
- 次に、「Create」 をクリックします。
Istio が正常にクラスターにインストールされました。
サービス・メッシュへの bookInfo アプリケーションのデプロイ
BookInfoアプリケーションは、オンラインブックストアの1つのカタログエントリと同様に、書籍に関する情報を表示します。 ページには、本の説明、本の詳細 (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 つまでの数の赤い星で表示します。
アプリケーションのエンドツーエンドのアーキテクチャーを以下に示します。
Red Hat OpenShiftService Meshは、アプリケーションにService Meshの機能を提供するために、アプリケーションのポッド内のEnvoyサイドカーに依存しています。 自動サイドカー注入を有効にすることも、手動で管理することもできます。 アノテーションを使用した自動注入をお勧めします。
-
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
ファイルは、Red Hat OpenShift用の Istio サイドカーを自動的にインジェクションできるようにsidecar.istio.io/inject: "true"
アノテーションされています。サービスメッシュ。 したがって、これらのポッドがクラスター内で起動するときに、Envoy サイドカーもポッドに組み込まれます。Red Hat OpenShiftのインストール。Service Meshは、アップストリームのIstioコミュニティのインストールとは複数の点で異なります。 Service MeshとIstioの比較は こちらを参照。 デフォルトでは、Istio は、プロジェクトに
istio-injection=enabled
というラベルを付けた場合にサイドカーを注入します。 Red Hat OpenShift サービス・メッシュの処理方法が異なるため、デプロイメントにサイドカーを自動的に注入することを選択する必要があります。そのため、プロジェクトにラベルを付ける必要はありません。 これにより、サイドカーが (例えば、ビルド・ポッドやデプロイ・ポッドなどに) 不要に注入されることを回避できます。 -
ポッドが実行中であることを確認します。
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 を介してバッキング・サービスに転送することができます。
- Istio Ingress Gateway を使用する bookinfo のデフォルト・ルートを構成します。
oc create -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/bookinfo-gateway.yaml
- Istio Ingress Gateway の ルート を取得します。
oc get routes -n istio-system istio-ingressgateway
- 前の手順で取得した HOST アドレスを保存します。これ以降、このチュートリアルで BookInfo アプリケーションにアクセスするときに使用するためです。 HOST のアドレスを入力して
$INGRESS_HOST
という環境変数を作成します。
新しいタブでexport INGRESS_HOST=<HOST>
http://$INGRESS_HOST/productpage
に移動して、アプリケーションにアクセスします。 最新表示を何度も実行すると、異なるバージョンのページがランダムな順序で表示されるはずです (v1 - 星なし、v2 - 黒い星、v3 - 赤い星)。 後で使用するためにそのブラウザー・タブを開いたままにします。
サービス・テレメトリーの監視 : メトリックおよびトレース
Istio のトレース機能とメトリック機能は、すべてのサービスの正常性について、幅広く細かい洞察を得られるように設計されています。 サービス・メッシュという Istio の役割が、特にマイクロサービス環境において、Istio を可観測性情報のための理想的なデータ・ソースにします。 複数のサービスの間で要求が転送されるので、従来のデバッグ手法では、パフォーマンスのボトルネックを見つけることがますます難しくなってきています。 分散トレースを使用すると、複数のサービスの間を流れる要求の全体像がわかるので、待ち時間の問題をすぐに特定できます。 Istio には、分散トレースがデフォルトで付いてきます。 これにより、要求で行われた各ホップの待ち時間、再試行、および失敗の情報が明らかになります。
Grafana を使用したメトリックの視覚化
Grafana を使用すると、メトリックの保管場所にかかわらず、メトリックの照会、視覚化、アラート生成、調査を行うことができます。
-
Red Hat OpenShift on IBM Cloud Web コンソール で、以下を行います。
- 左側ペインの 「Networking」 下の 「Routes」 をクリックします。
- 上部バーで「Project: istio-system 」を選択します。
- grafana の横の URL (ロケーション) をクリックします。
- Red Hat OpenShift on IBM Cloudにログインし、要求されたパーミッションを許可してGrafanaダッシュボードを表示します。
-
左側のナビゲーション・パネルの 「Dashboard」 メニューをクリックし、「Manage」 タブを選択してから、「istio」 と 「Istio Service Dashboard」 を選択します。
-
productpage.bookinfo.svc.cluster.local
「Service」 ドロップダウンで を選択します。 -
IBM Cloud Shell のタブまたはウィンドウに移動し、前のセクションで設定した Ingress ホストのロケーションにトラフィックを送信して、アプリに小さい負荷をかけます。
for i in {1..20}; do sleep 0.5; curl -I $INGRESS_HOST/productpage; done
各ツイスティーを開くと、ダッシュボードの詳細が表示されます。 「サービス」 ドロップダウンで別のサービスを選択します。 この Grafana ダッシュボードに、各ワークロードのメトリックが表示されます。 提供されている他のダッシュボードも探索してみてください。
Kiali を使用したサービス・メッシュの監視
Kiali は、サービス・メッシュを視覚化するアドオンとして Istio の上にインストールされるオープン・ソースのプロジェクトです。 Kiali では、マイクロサービス間の対話の状況について深い洞察を得ることができるほか、回路ブレーカーや要求レートなどの機能をサービスで利用することができます。
- Red Hat OpenShift on IBM Cloud Web コンソール で、以下を行います。
- 左側ペインで、 「Networking」 の 「Routes」 をクリックします。
- 上部バーからプロジェクトとして istio-system を選択します。
- kiali の横の URL (ロケーション) をクリックし、プロンプトが出されたら、「Login with OpenShift」 をクリックします。
- 左側のペインで 「Graph」 をクリックし、上部のバーから
bookinfo
名前空間とistio-system
名前空間を選択すると、Istio メッシュ内のさまざまなサービスの視覚的な 「Versioned app graph」 が表示されます。 - リクエスト率を見るには、「表示」をクリックし、「トラフィック率」を選択します。
- 別のタブ/ウィンドウで、BookInfo アプリケーションの URL にアクセスし、ページの最新表示を何度も実行して負荷をかけるか、前のセクションの負荷スクリプトを実行して負荷をかけます。
- その後、Kiali グラフで、1 秒あたりの要求数を確認します。
Kiali には、サービスを視覚化するのに便利なビューがいくつもあります。 さまざまなタブをクリックして、サービスのグラフや、ワークロード、アプリケーション、およびサービスに関する各種ビューを探索してみてください。
トラフィック管理の実行
Istio のトラフィック・ルーティング・ルールを使用すると、サービス間のトラフィックのフローおよび API 呼び出しを簡単に制御できます。 Istio では、回路ブレーカー、タイムアウト、再試行などのサービス・レベルのプロパティーの構成が簡易化されているので、A/B テスト、カナリア・ロールアウト、ステージング・ロールアウトなどの重要なタスクを比率ベースのトラフィック分割を使用して簡単にセットアップできます。 また、すぐに使用できる障害復旧機能もあるので、依存サービスまたはネットワークの障害に対して、より堅牢なアプリケーションにすることができます。
Istio のトラフィック管理モデルは、サービスと一緒にデプロイされる Envoy プロキシー (サイドカー) に依存しています。 サービスが送受信するすべてのトラフィック (データ・プレーン・トラフィック) は、Envoy がプロキシーとして処理するので、サービスを変更することなく、簡単にメッシュのトラフィックを誘導および制御できます。
Pilot は、大まかなルールを細かい構成に変換し、その構成を Envoy インスタンスに配布します。 Pilot は、3 種類の構成リソースを使用して、サービスメッシュ内のトラフィックを管理します:仮想サービス、宛先ルール、サービスエントリです。
Istio を使用した A/B テスト
A/B テストとは、2 つの別個のサービス・バージョンに対して同一のテストを実行し、どちらのほうがパフォーマンスが良いか調べる手法です。 Istio が元のサービスと最新のサービスの間でデフォルトのルーティング動作を実行しないようにするために、以下のルールを定義します。
-
以下のコマンドを実行して、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
に定義されている必要があります。 -
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
で宣言されている必要があります。 -
ブラウザー・タブで BookInfo アプリケーション表示します。 評価の星がない v1 の BookInfo アプリケーションのみが表示されるはずです。
-
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
ルールを変更します。
-
以下のコマンドを実行して、トラフィックの 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 へのトラフィックを、パーセンテージ単位で制御しています。 このルールを徐々に変更していき、最終的には、すべてのトラフィックを新しいバージョンのサービスに転送することができます。
-
ブラウザー・タブで再度 BookInfo アプリケーションを表示します。 必ず、ハード・リフレッシュ (Mac の場合は command + Shift + R、Windows の場合は Ctrl + F5) を使用してブラウザーのキャッシュをすべて削除してください。 おおよそ、指定した重みづけで bookinfo アプリケーションの V1 と V2 が切り替わることがわかるはずです。
-
すべてのトラフィックを 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 に委任することで、一貫性のある管理可能なセキュリティー・ポリシーを使用してアプリケーションがデプロイされます。
- mTLS を構成するには、前の宛先ルールを
ISTIO_MUTUAL
を使用するように変更する必要があります。oc replace -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/destination-rule-all-mtls.yaml
- より多くのトラフィックをアプリケーションに送信します。 以前と変わらず、すべて正常に機能するはずです。
- もう一度 Kiali を起動して、「Graph」 に移動します。
- 上部の
bookinfo
「Namespace」 バーで を選択します。 - 「Display」で 「Security」 を選択します。 すべての矢印 (トラフィック) に ロック ・アイコンが表示されています。
- トラフィックが保護されていることを確認するために、
productpage
からv1
への矢印をクリックします。右側のペインにロック・アイコン付きでmTLS Enabled
と表示されます。
クラスターに着信するトラフィックの SSL を有効にする (HTTPS)
このセクションでは、Red Hat OpenShift on IBM Cloud に用意されているデフォルトの証明書を使用し、エッジ での終端処理を指定して Ingress Gateway へのセキュアなルートを作成します。 エッジ・ルートを使用することで、Ingress Controller は TLS 暗号化を終端してから、istio-ingressgateway ポッドにトラフィックを転送します。
- Red Hat OpenShift on IBM Cloud コンソールを起動します。
- 「Networking」 の 「Routes」 に移動します。
- 上部バーから istio-system プロジェクトを選択し、「Create Route」 をクリックします。
- 名前:
istio-ingressgateway-secure
- サービス:
istio-ingressgateway
- ターゲット・ポート
80->8080(TCP)
- 確認
Secure Route
- TLS Termination:
Edge
- Insecure Traffic:
None
- 名前:
- 「作成」 をクリックします。
- istio-ingressgateway-secure ルートの 「Location」 セクションの新しい HTTPS URL にアクセスします。 URL の末尾に忘れずに
/productpage
を追加してください。
リソースを削除する
個別リソースを少しずつ削除することも、これらのステップをスキップしてクラスター全体を直接削除することもできます。
アプリケーション・プロジェクトの削除
- bookinfo プロジェクトを削除するには、次のコマンドを実行します。
oc delete project bookinfo
CLI からの ServiceMeshControlPlane の削除
- 以下のコマンドを実行して、インストール済みの ServiceMeshControlPlane の名前を取得します。
oc get servicemeshcontrolplanes -n istio-system
<NAME_OF_CUSTOM_RESOURCE>
を前のコマンドの名前に置き換え、このコマンドを実行してカスタム・リソースを削除します。oc delete servicemeshcontrolplanes -n istio-system <NAME_OF_CUSTOM_RESOURCE>
ServiceMeshMemberRoll
リソースを削除すると、関連付けられているServiceMeshControlPlane
リソースが自動的に削除されます。
オペレーターの削除
- Web コンソールで 「Operators」 → 「Installed Operators」 ページに移動します。
- On the right-hand side of the Operator Details page, select オペレーターのアンインストール from the Actions drop-down menu of Red Hat OpenShift Service Mesh Operator.
- プロンプトで、「Uninstall」 をクリックします。
- リスト内の各オペレーターに対して、手順 2 と 3 を繰り返します。
クラスターの削除
クラスターを削除すれば、すべてを一度に削除することができます。 この操作は元に戻すことができません。
- OpenShift クラスター ・ページにナビゲートします。
<your-initials>-myopenshiftcluster
の横にあるアクション・メニューをクリックし、「削除」 を選択します。- 「クラスターで使用している永続ストレージを削除する (Delete the persistent storage used by the cluster)」 を選択し、確認のためにクラスターの名前を入力します。
- **「削除 (Delete)」**をクリックします。