2.5. サービスメッシュのデプロイメントモデル
Red Hat OpenShift Service Mesh は、さまざまなデプロイメントモデルを複数サポートし、ビジネス要件に最も適合するように、各種方法を組み合わせることができます。
				Istio では、テナントはデプロイされたワークロードで共通のアクセスおよび権限を共有するユーザーのグループです。テナントを使用して、異なるチーム間で一定レベルの分離を確保できます。istio.io またはサービスリソースの NetworkPolicies、AuthorizationPolicies、および exportTo アノテーションを使用して、異なるテナントへのアクセスを分離できます。
			
2.5.1. クラスター全体 (シングルテナント) メッシュデプロイメントモデル
クラスター全体のデプロイメントには、クラスター全体のリソースを監視する Service Mesh Control Plane が含まれます。クラスター全体のリソースのモニタリングは、コントロールプレーンがすべての namespace にわたって単一のクエリーを使用して Istio および Kubernetes リソースを監視するという点で、Istio の機能によく似ています。その結果、クラスター全体のデプロイメントにより、API サーバーに送信されるリクエストの数が減少します。
					Istio と同様に、クラスター全体のメッシュには、デフォルトで istio-injection=enabled namespace ラベルが付いた namespace が含まれます。このラベルを変更するには、ServiceMeshMemberRoll リソースの spec.memberSelectors フィールドを変更します。
				
2.5.2. マルチテナントデプロイメントモデル
					Red Hat OpenShift Service Mesh は、デフォルトでマルチテナントとして設定される ServiceMeshControlPlane をインストールします。Red Hat OpenShift Service Mesh はマルチテナント Operator を使用して、Service Mesh コントロールプレーンのライフサイクルを管理します。メッシュ内では、テナントに namespace が使用されます。
				
					Red Hat OpenShift Service Mesh は ServiceMeshControlPlane リソースを使用してメッシュインストールを管理します。メッシュのインストールのスコープはデフォルトでは、リソースを含む namespace に限定されます。ServiceMeshMemberRoll および ServiceMeshMember リソースを使用して、別の namespace をメッシュに追加します。namespace は単一のメッシュにのみ組み込むことができ、複数のメッシュを単一の OpenShift クラスターにインストールできます。
				
通常の Service Mesh デプロイメントでは、単一の Service Mesh コントロールプレーンを使用してメッシュ内のサービス間の通信を設定します。Red Hat OpenShift Service Mesh はテナントごとにコントロールプレーン 1 つと、メッシュが 1 つある "ソフトマルチテナンシー" をサポートします。クラスター内には、複数の独立したコントロールプレーンが存在させることができます。マルチテナントのデプロイメントでは、Service Mesh にアクセスできるプロジェクトを指定し、Service Mesh を他のコントロールプレーンインスタンスから分離します。
クラスター管理者はすべての Istio コントロールプレーンを制御して、可視化できますが、テナント管理者は特定の Service Mesh、Kiali、および Jaeger インスタンスしか制御できません。
					指定の namespace または namespace 設定だけにワークロードをデプロイするチームパーミッションを付与できます。Service Mesh 管理者が mesh-user ロールを付与していると、ユーザーは ServiceMeshMember リソースを作成して namespace を ServiceMeshMemberRoll に追加できます。
				
2.5.2.1. クラスター全体のメッシュへの移行について
						クラスター全体のメッシュでは、1 つの ServiceMeshControlPlane (SMCP) がクラスター全体のすべての namespace を監視します。Red Hat OpenShift Service Mesh バージョン 2.5 以降を使用して、既存のクラスターをマルチテナントメッシュからクラスター全体のメッシュに移行できます。
					
クラスターに複数の SMCP が必要な場合、クラスター全体のメッシュに移行できません。
デフォルトでは、クラスター全体のメッシュはクラスターを構成するすべての namespace を検出します。ただし、限られた namespace セットにアクセスするようにメッシュを設定できます。デフォルトでは、namespace はサイドカーインジェクションを受け取りません。どの namespace がサイドカーインジェクションを受け取るかを指定する必要があります。
同様に、どの Pod がサイドカーインジェクションを受け取るかを指定する必要があります。サイドカーインジェクションを受け取る namespace に存在する Pod は、サイドカーインジェクションを継承しません。サイドカーインジェクションを namespace と Pod に適用するのは別の操作です。
クラスター全体のメッシュに移行するときに Istio のバージョンを変更した場合は、アプリケーションを再起動する必要があります。同じ Istio バージョンを使用する場合、アプリケーションプロキシーはクラスター全体のメッシュの新規 SMCP に接続し、マルチテナントメッシュの場合と同じように動作します。
2.5.2.1.1. Web コンソールを使用してクラスター全体のメッシュに namespace を含めたり除外したりする
							OpenShift Container Platform Web コンソールを使用して、クラスター全体のメッシュの ServiceMeshControlPlane リソースに検出セレクターを追加できます。ディスカバリーセレクターはコントロールプレーンが検出できる namespace を定義します。コントロールプレーンは、メッシュから namespace を除外する検出セレクターのいずれにも一致しない namespace を無視します。
						
コントロールプレーンの namespace に Ingress または Egress ゲートウェイをインストールする場合は、コントロールプレーンの namespace を検出セレクターに含める必要があります。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- 
									ServiceMeshControlPlaneリソースがデプロイされている。
- 
									cluster-adminロールを持つユーザーとしてログインしている。Red Hat OpenShift Dedicated を使用する場合は、dedicated-adminロールを持つユーザーとしてログインします。
手順
- OpenShift Container Platform Web コンソールにログインします。
- 
									Operators Installed Operators に移動します。 
- Red Hat OpenShift Service Mesh Operator をクリックします。
- Istio Service Mesh Control Plane をクリックします。
- コントロールプレーンの名前をクリックします。
- YAML をクリックします。
- YAML ファイルを変更して、 - ServiceMeshControlPlaneリソースの- spec.meshConfigフィールドに検出セレクターが含まれるようにします。注記- Istiodサービスが検出できる namespace を設定する場合は、他のメッシュには公開すべきではない機密サービスが含まれる可能性のある namespace を除外します。- 以下の例では、 - Istiodサービスは- istio-discovery: enabledのラベルが付いた namespace、または- info、- httpbin、または- istio-systemの名前を持つ namespace を検出します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - namespace が検出セレクターのいずれかに一致する場合、メッシュは namespace を検出します。メッシュは、どの検出セレクターにも一致しない namespace を除外します。 
- ファイルを保存します。
2.5.2.1.2. CLI を使用したクラスター全体のメッシュへの namespace の組み込みと除外
							OpenShift Container Platform CLI を使用して、クラスター全体のメッシュの ServiceMeshControlPlane リソースに検出セレクターを追加できます。ディスカバリーセレクターはコントロールプレーンが検出できる namespace を定義します。コントロールプレーンは、メッシュから namespace を除外する検出セレクターのいずれにも一致しない namespace を無視します。
						
コントロールプレーンの namespace に Ingress または Egress ゲートウェイをインストールする場合は、コントロールプレーンの namespace を検出セレクターに含める必要があります。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- 
									ServiceMeshControlPlaneリソースがデプロイされている。
- 
									cluster-adminロールを持つユーザーとしてログインしている。Red Hat OpenShift Dedicated を使用する場合は、dedicated-adminロールを持つユーザーとしてログインします。
手順
- OpenShift Container Platform CLI にログインします。
- 次のコマンドを実行して、 - ServiceMeshControlPlaneリソースを YAML ファイルとして開きます。- oc -n istio-system edit smcp <name> - $ oc -n istio-system edit smcp <name>- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- <name>は、- ServiceMeshControlPlaneリソースの名前を表します。
 
- YAML ファイルを変更して、 - ServiceMeshControlPlaneリソースの- spec.meshConfigフィールドに検出セレクターが含まれるようにします。注記- Istiodサービスが検出できる namespace を設定する場合は、他のメッシュには公開すべきではない機密サービスが含まれる可能性のある namespace を除外します。- 以下の例では、 - Istiodサービスは- istio-discovery: enabledのラベルが付いた namespace、または- info、- httpbin、または- istio-systemの名前を持つ namespace を検出します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - namespace が検出セレクターのいずれかに一致する場合、メッシュは namespace を検出します。メッシュは、どの検出セレクターにも一致しない namespace を除外します。 
- ファイルを保存して、エディターを終了します。
2.5.2.1.3. Web コンソールを使用して、クラスター全体のメッシュでサイドカーインジェクションを受け取る namespace を定義する
							デフォルトでは、Red Hat OpenShift Service Mesh Operator はメンバーセレクターを使用して、サイドカーインジェクションを受け取る namespace を識別します。ServiceMeshMemberRoll リソースで定義されている istio-injection=enabled ラベルと一致しない namespace は、サイドカーインジェクションを受け取りません。
						
検出セレクターを使用してメッシュが検出できる namespace を決定しても、サイドカーインジェクションには影響しません。namespace の検出とサイドカーインジェクションの設定は別の操作です。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- 
									ServiceMeshControlPlanaeリソースをmode: ClusterWideアノテーションが指定してデプロイした。
- 
									cluster-adminロールを持つユーザーとしてログインしている。Red Hat OpenShift Dedicated を使用する場合は、dedicated-adminロールを持つユーザーとしてログインします。
手順
- OpenShift Container Platform Web コンソールにログインします。
- 
									Operators Installed Operators に移動します。 
- Red Hat OpenShift Service Mesh Operator をクリックします。
- Istio Service Mesh Member Roll をクリックします。
- 
									ServiceMeshMemberRollリソースをクリックします。
- YAML をクリックします。
- injectラベルと一致するメンバーセレクターを追加して、- ServiceMeshMemberRollリソースの- spec.memberSelectorsフィールドを変更します。次の例では、- istio-injection: enabledを使用します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- namespace がサイドカーインジェクションを確実に受け取るようにします。
 
- ファイルを保存します。
2.5.2.1.4. CLI を使用して、クラスター全体のメッシュでサイドカーインジェクションを受け取る namespace を定義する
							デフォルトでは、Red Hat OpenShift Service Mesh Operator はメンバーセレクターを使用して、サイドカーインジェクションを受け取る namespace を識別します。ServiceMeshMemberRoll リソースで定義されている istio-injection=enabled ラベルと一致しない namespace は、サイドカーインジェクションを受け取りません。
						
検出セレクターを使用してメッシュが検出できる namespace を決定しても、サイドカーインジェクションには影響しません。namespace の検出とサイドカーインジェクションの設定は別の操作です。
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- 
									ServiceMeshControlPlanaeリソースをmode: ClusterWideアノテーションが指定してデプロイした。
- 
									cluster-adminロールを持つユーザーとしてログインしている。Red Hat OpenShift Dedicated を使用する場合は、dedicated-adminロールを持つユーザーとしてログインします。
手順
- OpenShift Container Platform CLI にログインします。
- ServiceMeshMemberRollリソースを編集します。- oc edit smmr -n <controlplane-namespace> - $ oc edit smmr -n <controlplane-namespace>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- injectラベルと一致するメンバーセレクターを追加して、- ServiceMeshMemberRollリソースの- spec.memberSelectorsフィールドを変更します。次の例では、- istio-injection: enabledを使用します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- namespace がサイドカーインジェクションを確実に受け取るようにします。
 
- ファイルを保存して、エディターを終了します。
2.5.2.1.5. Web コンソールを使用してクラスター全体のメッシュから個々の Pod を除外する
							Pod に sidecar.istio.io/inject: true アノテーションが適用されており、Pod が ServiceMeshMemberRoll リソースで定義されているラベルセレクターまたはメンバーリストのいずれかに一致する namespace に存在する場合、Pod はサイドカーインジェクションを受け取ります。
						
							Pod に sidecar.istio.io/inject アノテーションが適用されていない場合、サイドカーインジェクションを受け取ることができません。
						
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- 
									ServiceMeshControlPlaneリソースをmode: ClusterWideアノテーションが指定してデプロイした。
- 
									cluster-adminロールを持つユーザーとしてログインしている。Red Hat OpenShift Dedicated を使用する場合は、dedicated-adminロールを持つユーザーとしてログインします。
手順
- OpenShift Container Platform Web コンソールにログインします。
- 
									Workloads Deployments に移動します。 
- デプロイメントの名前をクリックします。
- YAML をクリックします。
- 次の例に示すように、YAML ファイルを変更して、サイドカーインジェクションを受け取るアプリケーションと受け取らないアプリケーションを 1 つずつデプロイします。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- ファイルを保存します。
2.5.2.1.6. CLI を使用してクラスター全体のメッシュから個々の Pod を除外する
							Pod に sidecar.istio.io/inject: true アノテーションが適用されており、Pod が ServiceMeshMemberRoll リソースで定義されているラベルセレクターまたはメンバーリストのいずれかに一致する namespace に存在する場合、Pod はサイドカーインジェクションを受け取ります。
						
							Pod に sidecar.istio.io/inject アノテーションが適用されていない場合、サイドカーインジェクションを受け取ることができません。
						
前提条件
- Red Hat OpenShift Service Mesh Operator がインストールされている。
- 
									ServiceMeshControlPlaneリソースをmode: ClusterWideアノテーションが指定してデプロイした。
- 
									cluster-adminロールを持つユーザーとしてログインしている。Red Hat OpenShift Dedicated を使用する場合は、dedicated-adminロールを持つユーザーとしてログインします。
手順
- OpenShift Container Platform CLI にログインします。
- 次のコマンドを実行して、デプロイメントを編集します。 - oc edit deployment -n <namespace> <deploymentName> - $ oc edit deployment -n <namespace> <deploymentName>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次の例に示すように、YAML ファイルを変更して、サイドカーインジェクションを受け取るアプリケーションと受け取らないアプリケーションを 1 つずつデプロイします。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- ファイルを保存します。
2.5.3. マルチテーマまたはフェデレーションされたデプロイメントモデル
フェデレーション は、個別の管理ドメインで管理される個別のメッシュ間でサービスとワークロードを共有できるデプロイメントモデルです。
Istio マルチクラスターモデルでは、メッシュ間だで高いレベルの信頼が必要なだけでなく、個々のメッシュが存在するすべての Kubernetes API サーバーへのリモートアクセスも必要です。Red Hat OpenShift Service Mesh のフェデレーションは、メッシュ間の 最小限 の信頼を前提とする Service Mesh のマルチクラスター実装に対して独自のアプローチを採用しています。
フェデレーションされたメッシュ は、単一のメッシュとして動作させるメッシュのグループです。各メッシュのサービスは、独自のサービスにできます。たとえば、別のメッシュからサービスをインポートすることでサービスを追加するメッシュは、メッシュ全体で同じサービスにさらにワークロードを追加し、高可用性を提供することや、その両方を組み合わせることができます。フェデレーションメッシュに結合されたメッシュは、すべて引き続き個別に管理されます。管理者は、フェデレーション内の他のメッシュにエクスポートされるサービスと、フェデレーション内の他のメッシュからインポートされるサービスを明示的に設定する必要があります。証明書の生成、メトリクス、トレース収集などのサポート機能は、それぞれのメッシュのローカルで機能します。