1.9. ServiceMeshControlPlane の作成
1.9.1. About ServiceMeshControlPlane
コントロールプレーンには、Istiod、Ingress および Egress Gateway、Kiali や Jaeger などのその他コンポーネントが含まれます。コントロールプレーンは、Service Mesh Operator やデータプレーンアプリケーションおよびサービスとは別の namespace にデプロイする必要があります。OpenShift Container Platform Web コンソールまたはコマンドラインから oc
クライアントツールを使用して、ServiceMeshControlPlane
(SMCP) の基本的なインストールをデプロイできます。
この基本インストールは、デフォルトの OpenShift Container Platform 設定に基づいて設定されており、実稼働環境での使用を目的として設計されていません。このデフォルトのインストールを使用してインストールを確認し、環境に合わせて ServiceMeshControlPlane
設定を設定します。
Service Mesh に関するドキュメントは istio-system
をサンプルプロジェクトとして使用しますが、Service Mesh を任意のプロジェクトにデプロイできます。
1.9.1.1. Web コンソールからの Service Mesh コントロールプレーンのデプロイ
Web コンソールを使用して基本的な ServiceMeshControlPlane
をデプロイできます。この例では、istio-system
が Service Mesh コントロールプレーンプロジェクトの名前となります。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている必要がある。
-
cluster-admin
ロールを持つアカウントがある。
手順
-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform Web コンソールにログインします。(Red Hat OpenShift Dedicated を使用する場合)dedicated-admin
ロールがあるアカウント。 istio-system
という名前のプロジェクトを作成します。-
Home
Projects に移動します。 - Create Project をクリックします。
Name
フィールドに istio-system と入力します。ServiceMeshControlPlane
リソースは、マイクロサービスおよび Operator とは異なるプロジェクトにインストールする必要があります。これらのステップは
istio-system
を例として使用しますが、サービスが含まれるプロジェクトから分離されない限り、Service Mesh コントロールプレーンを任意のプロジェクトにデプロイできます。- Create をクリックします。
-
Home
-
Operators
Installed Operators に移動します。 - Red Hat OpenShift Service Mesh Operator をクリックした後に、Istio Service Mesh Control Plane をクリックします。
Istio Service Mesh Control Plane タブで Create ServiceMeshControlPlane をクリックします。
- 製品の最新バージョンで使用できる機能を利用するには、デフォルトの Service Mesh コントロールプレーンバージョンを受け入れます。コントロールプレーンのバージョンは、Operator のバージョンに関係なく利用可能な機能を判別します。
- Create をクリックします。
Operator は、設定パラメーターに基づいて Pod、サービス、Service Mesh コントロールプレーンのコンポーネントを作成します。
ServiceMeshControlPlane
設定は後で設定できます。
検証
Istio Service Mesh Control Plane タブをクリックしてコントロールプレーンが正常にインストールされることを確認します。
- 新規コントロールプレーンの名前をクリックします。
- Resources タブをクリックして、Red Hat OpenShift Service Mesh コントロールプレーンリソース (Operator が作成し、設定したもの) を表示します。
1.9.1.2. CLI を使用した Service Mesh コントロールプレーンのデプロイ
コマンドラインから基本的な ServiceMeshControlPlane
をデプロイできます。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
-
OpenShift CLI (
oc
) へのアクセスがある。 - OpenShift Container Platform に `cluster-admin` としてログインしている。
手順
istio-system
という名前のプロジェクトを作成します。$ oc new-project istio-system
以下の例を使用して
istio-installation.yaml
という名前のServiceMeshControlPlane
ファイルを作成します。Service Mesh コントロールプレーンのバージョンは、Operator のバージョンに関係なく利用可能な機能を判別します。バージョン 2.5 istio-installation.yaml の例
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane metadata: name: basic namespace: istio-system spec: version: v2.5 tracing: type: None sampling: 10000 addons: kiali: enabled: true name: kiali grafana: enabled: true
以下のコマンドを実行して Service Mesh コントロールプレーンをデプロイします。ここで、
<istio_installation.yaml>
にはファイルへの完全パスが含まれます。$ oc create -n istio-system -f <istio_installation.yaml>
Pod のデプロイメントの進行状況を監視するには、次のコマンドを実行します。
$ oc get pods -n istio-system -w
以下のような出力が表示されるはずです。
NAME READY STATUS RESTARTS AGE grafana-b4d59bd7-mrgbr 2/2 Running 0 65m istio-egressgateway-678dc97b4c-wrjkp 1/1 Running 0 108s istio-ingressgateway-b45c9d54d-4qg6n 1/1 Running 0 108s istiod-basic-55d78bbbcd-j5556 1/1 Running 0 108s jaeger-67c75bd6dc-jv6k6 2/2 Running 0 65m kiali-6476c7656c-x5msp 1/1 Running 0 43m prometheus-58954b8d6b-m5std 2/2 Running 0 66m
1.9.1.3. CLI を使用した SMCP インストールの検証
コマンドラインから ServiceMeshControlPlane
の作成を検証できます。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
-
OpenShift CLI (
oc
) へのアクセスがある。 - OpenShift Container Platform に `cluster-admin` としてログインしている。
手順
次のコマンドを実行して、Service Mesh コントロールプレーンのインストールを確認します。
istio-system
は、Service Mesh コントロールプレーンをインストールした namespace です。$ oc get smcp -n istio-system
STATUS
列がComponentsReady
の場合は、インストールが正常に終了しています。NAME READY STATUS PROFILES VERSION AGE basic 10/10 ComponentsReady ["default"] 2.5.2 66m
1.9.2. コントロールプレーンコンポーネントとインフラストラクチャーノードについて
インフラストラクチャーノードは、次の 2 つの主な目的のためにインフラストラクチャーのワークロードを分離する方法を提供します。
- サブスクリプション数に対する請求コストの発生を防ぐため
- インフラストラクチャーのワークロードの保守と管理を分離するため
Service Mesh コントロールプレーンコンポーネントの一部またはすべてをインフラストラクチャーノード上で実行するように設定できます。
1.9.2.1. Web コンソールを使用してインフラストラクチャーノード上で実行されるようにすべてのコントロールプレーンコンポーネントを設定する
Service Mesh コントロールプレーンによってデプロイされたすべてのコンポーネントがインフラストラクチャーノードで実行される場合は、このタスクを実行します。これらのデプロイされたコンポーネントには、Istiod、Ingress Gateway、Egress Gateway、および Prometheus、Grafana、Distributed Tracing などのオプションのアプリケーションが含まれます。
コントロールプレーンをワーカーノード上で実行する場合は、このタスクを省略してください。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- OpenShift Container Platform に `cluster-admin` としてログインしている。
手順
- OpenShift Container Platform Web コンソールにログインします。
-
Operators
Installed Operators に移動します。 - Red Hat OpenShift Service Mesh Operator をクリックし、次に Istio Service Mesh Control Plane をクリックします。
-
コントロールプレーンリソースの名前をクリックします。たとえば、
basic
です。 - YAML をクリックします。
次の例に示すように、
nodeSelector
フィールドとtolerations
フィールドをServiceMeshControlPlane
リソースのspec.runtime.defaults.pod
仕様に追加します。spec: runtime: defaults: pod: nodeSelector: 1 node-role.kubernetes.io/infra: "" tolerations: 2 - effect: NoSchedule key: node-role.kubernetes.io/infra value: reserved - effect: NoExecute key: node-role.kubernetes.io/infra value: reserved
- Save をクリックします。
- Reload をクリックします。
1.9.2.2. Web コンソールを使用してインフラストラクチャーノード上で実行されるように個別のコントロールプレーンコンポーネントを設定する
Service Mesh コントロールプレーンによってデプロイされた個々のコンポーネントがインフラストラクチャーノードで実行される場合は、このタスクを実行します。これらのデプロイされたコンポーネントには、Istiod、Ingress Gateway、および Egress Gateway が含まれます。
コントロールプレーンをワーカーノード上で実行する場合は、このタスクを省略してください。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- OpenShift Container Platform に `cluster-admin` としてログインしている。
手順
- OpenShift Container Platform Web コンソールにログインします。
-
Operators
Installed Operators に移動します。 - Red Hat OpenShift Service Mesh Operator をクリックし、次に Istio Service Mesh Control Plane をクリックします。
-
コントロールプレーンリソースの名前をクリックします。たとえば、
basic
です。 - YAML をクリックします。
次の例に示すように、
nodeSelector フィールド
とtolerations
フィールドをServiceMeshControlPlane
リソースのspec.runtime.components.pilot.pod
仕様に追加します。spec: runtime: components: pilot: pod: nodeSelector: 1 node-role.kubernetes.io/infra: "" tolerations: 2 - effect: NoSchedule key: node-role.kubernetes.io/infra value: reserved - effect: NoExecute key: node-role.kubernetes.io/infra value: reserved
次の例に示すように、
nodeSelector
フィールドとtolerations
フィールドをServiceMeshControlPlane
リソースのspec.gateways.ingress.runtime.pod
およびspec.gateways.egress.runtime.pod
仕様に追加します。spec: gateways: ingress: runtime: pod: nodeSelector: 1 node-role.kubernetes.io/infra: "" tolerations: 2 - effect: NoSchedule key: node-role.kubernetes.io/infra value: reserved - effect: NoExecute key: node-role.kubernetes.io/infra value: reserved egress: runtime: pod: nodeSelector: 3 node-role.kubernetes.io/infra: "" tolerations: 4 - effect: NoSchedule key: node-role.kubernetes.io/infra value: reserved - effect: NoExecute key: node-role.kubernetes.io/infra value: reserved
- Save をクリックします。
- Reload をクリックします。
1.9.2.3. CLI を使用してインフラストラクチャーノード上で実行されるようにすべてのコントロールプレーンコンポーネントを設定する
Service Mesh コントロールプレーンによってデプロイされたすべてのコンポーネントがインフラストラクチャーノードで実行される場合は、このタスクを実行します。これらのデプロイされたコンポーネントには、Istiod、Ingress Gateway、Egress Gateway、および Prometheus、Grafana、Distributed Tracing などのオプションのアプリケーションが含まれます。
コントロールプレーンをワーカーノード上で実行する場合は、このタスクを省略してください。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- OpenShift Container Platform に `cluster-admin` としてログインしている。
手順
ServiceMeshControlPlane
リソースを YAML ファイルとして開きます。$ oc -n istio-system edit smcp <name> 1
- 1
<name>
は、ServiceMeshControlPlane
リソースの名前を表します。
ServiceMeshControlPlane
によってデプロイされたすべての Service Mesh コンポーネントをインフラストラクチャーノードで実行するには、ServiceMeshControlPlane
リソースのspec.runtime.defaults.pod
仕様にnodeSelector
フィールドとtolerations
フィールドを追加します。spec: runtime: defaults: pod: nodeSelector: 1 node-role.kubernetes.io/infra: "" tolerations: 2 - effect: NoSchedule key: node-role.kubernetes.io/infra value: reserved - effect: NoExecute key: node-role.kubernetes.io/infra value: reserved
1.9.2.4. CLI を使用してインフラストラクチャーノード上で実行されるように個別のコントロールプレーンコンポーネントを設定する
Service Mesh コントロールプレーンによってデプロイされた個々のコンポーネントがインフラストラクチャーノードで実行される場合は、このタスクを実行します。これらのデプロイされたコンポーネントには、Istiod、Ingress Gateway、および Egress Gateway が含まれます。
コントロールプレーンをワーカーノード上で実行する場合は、このタスクを省略してください。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- OpenShift Container Platform に `cluster-admin` としてログインしている。
手順
ServiceMeshControlPlane
リソースを YAML ファイルとして開きます。$ oc -n istio-system edit smcp <name> 1
- 1
<name>
は、ServiceMeshControlPlane
リソースの名前を表します。
インフラストラクチャーノードで Istiod コンポーネントを実行するには、
ServiceMeshControlPlane
リソースのspec.runtime.components.pilot.pod
仕様にnodeSelector
フィールドとtolerations
フィールドを追加します。spec: runtime: components: pilot: pod: nodeSelector: 1 node-role.kubernetes.io/infra: "" tolerations: 2 - effect: NoSchedule key: node-role.kubernetes.io/infra value: reserved - effect: NoExecute key: node-role.kubernetes.io/infra value: reserved
Ingress Gateway と Egress Gateway をインフラストラクチャーノードで実行する場合は、
ServiceMeshControlPlane
リソースのspec.gateways.ingress.runtime.pod
仕様とspec.gateways.egress.runtime.pod
仕様に、nodeSelector
フィールドとtolerations
フィールドを追加します。spec: gateways: ingress: runtime: pod: nodeSelector: 1 node-role.kubernetes.io/infra: "" tolerations: 2 - effect: NoSchedule key: node-role.kubernetes.io/infra value: reserved - effect: NoExecute key: node-role.kubernetes.io/infra value: reserved egress: runtime: pod: nodeSelector: 3 node-role.kubernetes.io/infra: "" tolerations: 4 - effect: NoSchedule key: node-role.kubernetes.io/infra value: reserved - effect: NoExecute key: node-role.kubernetes.io/infra value: reserved
1.9.2.5. Service Mesh コントロールプレーンがインフラストラクチャーノードで実行されていることの検証
手順
Istiod、Ingress Gateway、Egress Gateway Pod に関連付けられたノードがインフラストラクチャーノードであることを確認します。
$ oc -n istio-system get pods -owide
1.9.3. コントロールプレーンとクラスター全体のデプロイメントについて
クラスター全体のデプロイメントには、クラスター全体のリソースを監視する Service Mesh Control Plane が含まれます。クラスター全体のリソースのモニタリングは、コントロールプレーンがすべての namespace にわたって単一のクエリーを使用して Istio および Kubernetes リソースを監視するという点で、Istio の機能によく似ています。その結果、クラスター全体のデプロイメントにより、API サーバーに送信されるリクエストの数が減少します。
OpenShift Container Platform Web コンソールまたは CLI を使用して、クラスター全体のデプロイメント用に Service Mesh コントロールプレーンを設定できます。
1.9.3.1. Web コンソールを使用したクラスター全体のデプロイメント用のコントロールプレーンの設定
OpenShift Container Platform Web コンソールを使用して、クラスター全体のデプロイメント用に ServiceMeshControlPlane
リソースを設定できます。この例では、istio-system
が Service Mesh コントロールプレーンプロジェクトの名前となります。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- OpenShift Container Platform に `cluster-admin` としてログインしている。
手順
istio-system
という名前のプロジェクトを作成します。-
Home
Projects に移動します。 - Create Project をクリックします。
Name
フィールドに istio-system と入力します。ServiceMeshControlPlane
リソースは、マイクロサービスおよび Operator とは異なるプロジェクトにインストールする必要があります。これらの手順では、
istio-system
をサンプルとして使用します。Service Mesh コントロールプレーンは、サービスが含まれるプロジェクトから分離されている限り、任意のプロジェクトにデプロイできます。- Create をクリックします。
-
Home
-
Operators
Installed Operators に移動します。 - Red Hat OpenShift Service Mesh Operator をクリックした後に、Istio Service Mesh Control Plane をクリックします。
- Istio Service Mesh Control Plane タブで Create ServiceMeshControlPlane をクリックします。
- YAML view をクリックします。Service Mesh コントロールプレーンのバージョンは、Operator のバージョンに関係なく利用可能な機能を判別します。
YAML ファイルの
spec.mode
フィールドを変更して、ClusterWide
を指定します。バージョン 2.5 istio-installation.yaml の例
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane metadata: name: basic namespace: istio-system spec: version: v2.5 mode: ClusterWide
-
Create をクリックします。Operator は、設定パラメーターに基づいて Pod、サービス、Service Mesh コントロールプレーンのコンポーネントを作成します。
ServiceMeshMemberRoll
がデフォルト設定の一部として存在しない場合、Operator はそれも作成します。
検証
コントロールプレーンが正しくインストールされていることを確認するには、次の手順を実行します。
- Istio Service Mesh Control Plane タブをクリックします。
-
新しい
ServiceMeshControlPlane
オブジェクトの名前をクリックします。 - Resources タブをクリックして、Red Hat OpenShift Service Mesh コントロールプレーンリソース (Operator が作成し、設定したもの) を表示します。
1.9.3.2. CLI を使用したクラスター全体のデプロイメント用のコントロールプレーンの設定
CLI を使用して、クラスター全体のデプロイメント用に ServiceMeshControlPlane
リソースを設定できます。この例では、istio-system
は Service Mesh コントロールプレーンの namespace の名前です。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
-
OpenShift CLI (
oc
) にアクセスできる。 - OpenShift Container Platform に `cluster-admin` としてログインしている。
手順
istio-system
という名前のプロジェクトを作成します。$ oc new-project istio-system
以下の例を使用して
istio-installation.yaml
という名前のServiceMeshControlPlane
ファイルを作成します。バージョン 2.5 istio-installation.yaml の例
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane metadata: name: basic namespace: istio-system spec: version: v2.5 mode: ClusterWide
次のコマンドを実行して、Service Mesh コントロールプレーンをデプロイします。
$ oc create -n istio-system -f <istio_installation.yaml>
ここでは、以下のようになります。
- <istio_installation.yaml>
- ファイルへの完全パスを指定します。
検証
Pod のデプロイの進行状況を監視するには、次のコマンドを実行します。
$ oc get pods -n istio-system -w
次の例のような出力が表示されるはずです。
出力例
NAME READY STATUS RESTARTS AGE grafana-b4d59bd7-mrgbr 2/2 Running 0 65m istio-egressgateway-678dc97b4c-wrjkp 1/1 Running 0 108s istio-ingressgateway-b45c9d54d-4qg6n 1/1 Running 0 108s istiod-basic-55d78bbbcd-j5556 1/1 Running 0 108s jaeger-67c75bd6dc-jv6k6 2/2 Running 0 65m kiali-6476c7656c-x5msp 1/1 Running 0 43m prometheus-58954b8d6b-m5std 2/2 Running 0 66m
1.9.3.3. クラスター全体のメッシュのメンバーロールのカスタマイズ
クラスター全体モードでは、ServiceMeshControlPlane
リソースを作成すると、ServiceMeshMemberRoll
リソースも作成されます。ServiceMeshMemberRoll
リソースは、作成後に変更できます。リソースを変更すると、Service Mesh オペレーターはそのリソースを変更しなくなります。OpenShift Container Platform Web コンソールを使用して ServiceMeshMemberRoll
リソースを変更する場合は、変更を上書きするプロンプトを受け入れます。
または、ServiceMeshControlPlane
リソースをデプロイする前に ServiceMeshMemberRoll
リソースを作成することもできます。ServiceMeshControlPlane
リソースを作成するとき、Service Mesh Operator は ServiceMeshMemberRoll
を変更しません。
ServiceMeshMemberRoll
リソース名には、default
という名前を付け、ServiceMeshControlPlane
リソースと同じプロジェクト namespace に作成する必要があります。
メッシュに namespace を追加するには 2 つの方法があります。spec.members
リストで名前を指定して namespace を追加することも、ラベルに基づいて namespace を含めるか除外するように一連の namespace ラベルセレクターを設定することもできます。
ServiceMeshMemberRoll
リソースでメンバーがどのように指定されているかに関係なく、各 namespace に ServiceMeshMember
リソースを作成してメッシュにメンバーを追加することもできます。
1.9.4. Kiali を使用した SMCP インストールの検証
Kiali コンソールを使用して、Service Mesh のインストールを検証できます。Kiali コンソールには、Service Mesh コンポーネントが適切にデプロイおよび設定されていることを検証する方法がいくつかあります。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
-
OpenShift CLI (
oc
) へのアクセスがある。 - OpenShift Container Platform に `cluster-admin` としてログインしている。
手順
-
OpenShift Container Platform Web コンソールで、Networking
Routes に移動します。 Routes ページで、Namespace メニューから Service Mesh コントロールプレーンプロジェクトを選択します (例:
istio-system
)。Location 列には、各ルートのリンク先アドレスが表示されます。
- 必要に応じて、フィルターを使用して Kiali コンソールのルートを見つけます。ルートの Location をクリックしてコンソールを起動します。
Log In With OpenShift をクリックします。
初回の Kiali コンソールへのログイン時に、表示するパーミッションを持つ Service Mesh 内のすべての namespace を表示する Overview ページが表示されます。概要 ページに複数の namespace が表示されている場合は、Kiali は最初に正常性または検証に問題がある namespace を表示します。
図1.1 Kiali の概要ページ
各 namespace のタイルには、ラベルの数、Istio Config の状態、アプリケーション の状態と数、namespace の トラフィック が表示されます。コンソールのインストールを検証中で、namespace がまだメッシュに追加されていないと、
istio-system
以外のデータは表示されない可能性があります。Kiali には、Service Mesh コントロールプレーンがインストールされている namespace 専用のダッシュボードが 4 つあります。これらのダッシュボードを表示するには、オプション メニューをクリックします コントロールプレーン namespace のタイル (例:
istio-system
) で、次のいずれかのオプションを選択します。- Istio メッシュダッシュボード
- Istio コントロールプレーンダッシュボード
- Istio パフォーマンスダッシュボード
Istio Wasm Exetension ダッシュボード
図1.2 Grafana Istio コントロールプレーンダッシュボード
Kiali は、Grafana ホームページ から入手できる追加の Grafana ダッシュボード 2 つもインストールします。
- Istio ワークロードダッシュボード
- Istio サービスダッシュボード
Service Mesh コントロールプレーンノードを表示するには、グラフ ページをクリックし、メニューから
ServiceMeshControlPlane
をインストールした Namespace を選択します (例:istio-system
)。- 必要に応じて、Display idle nodes をクリックします。
- グラフ ページの詳細は、グラフツアー リンクをクリックしてください。
- メッシュトポロジーを表示するには、namespace メニューの Service Mesh メンバーロールから追加の namespace を 1 つまたは複数選択します。
istio-system
namespace 内のアプリケーションのリストを表示するには、アプリケーション ページをクリックします。Kiali は、アプリケーションの状態を表示します。- 情報アイコンの上にマウスをかざすと、詳細 列に記載されている追加情報が表示されます。
istio-system
namespace のワークロードのリストを表示するには、ワークロード ページをクリックします。Kiali は、ワークロードの状態を表示します。- 情報アイコンの上にマウスをかざすと、詳細 列に記載されている追加情報が表示されます。
istio-system
namespace のサービスのリストを表示するには、サービス ページをクリックします。Kiali は、サービスと設定の状態を表示します。- 情報アイコンの上にマウスをかざすと、詳細 列に記載されている追加情報が表示されます。
istio-system
namespace の Istio 設定オブジェクトのリストを表示するには、Istio Config ページをクリックします。Kiali は、設定の正常性を表示します。- 設定エラーがある場合は、行をクリックすると、Kiali が設定ファイルを開き、エラーが強調表示されます。
1.9.5. 関連情報
Red Hat OpenShift Service Mesh はクラスター内で複数の独立したコントロールプレーンをサポートします。ServiceMeshControlPlane
プロファイルを使用すると、再利用可能な設定を作成ができます。詳細は、コントロールプレーンプロファイルの作成 を参照してください。
1.9.6. 次のステップ
- プロジェクトを Service Mesh に追加してアプリケーションを利用可能にします。詳細は、Service Mesh へのサービスの追加 を参照してください。