2.4. サービスメッシュと Istio の比較
Red Hat OpenShift Service Mesh のインストールは、複数の点でアップストリームの Istio コミュニティーインストールとは異なります。Red Hat OpenShift Service Mesh の変更点は、問題の解決、追加機能の提供、OpenShift Container Platform へのデプロイ時の差異の処理を実行するために必要になることがあります。
Red Hat OpenShift Service Mesh の現行リリースは、以下の点で現在のアップストリーム Istio コミュニティーのリリースとは異なります。
2.4.1. Red Hat OpenShift Service Mesh コントロールプレーン
Red Hat OpenShift Service Mesh はデフォルトでマルチテナントコントロールプレーンをインストールします。サービスメッシュにアクセスできるプロジェクトを指定し、サービスメッシュを他のコントロールプレーンインスタンスから分離します。
2.4.2. Red Hat OpenShift Service Mesh におけるマルチテナンシーとクラスター全体のインストール
マルチテナントインストールとクラスター全体のインストールの主な違いは、コントロールプレーンのデプロイメント (Galley や Pilot など) で使用される権限の範囲です。コンポーネントではクラスタースコープのロールベースのアクセス制御 (RBAC) リソース ClusterRoleBinding
が使用されなくなりましたが、コンポーネントはプロジェクトスコープの RoleBinding
に依存します。
members
一覧のすべてのプロジェクトには、コントロールプレーンのデプロイメントに関連付けられた各サービスアカウントの RoleBinding
があり、各コントロールプレーンのデプロイメントはそれらのメンバープロジェクトのみを監視します。各メンバープロジェクトには maistra.io/member-of
ラベルが追加されており、member-of
の値はコントロールプレーンのインストールが含まれるプロジェクトになります。
Red Hat OpenShift Service Mesh は各メンバープロジェクトを設定し、それ自体、コントロールプレーン、および他のメンバープロジェクト間のネットワークアクセスを確保できるようにします。詳細な設定は、OpenShift SDN (Software-defined Networking) の設定方法によって異なります。詳細は、「OpenShift SDN について」を参照してください。
OpenShift Container Platform クラスターが SDN プラグインを使用するように設定されている場合:
NetworkPolicy
: Red Hat OpenShift Service Mesh は、各メンバープロジェクトでNetworkPolicy
リソースを作成し、他のメンバーおよびコントロールプレーンからのすべての Pod に対する Ingress を許可します。サービスメッシュからメンバーを削除すると、このNetworkPolicy
リソースがプロジェクトから削除されます。注記また、これにより Ingress がメンバープロジェクトのみに制限されます。メンバー以外のプロジェクトの Ingress が必要な場合は、
NetworkPolicy
を作成してそのトラフィックを許可する必要があります。-
Multitenant: Red Hat OpenShift Service Mesh は、各メンバープロジェクトの
NetNamespace
をコントロールプレーンプロジェクトのNetNamespace
に追加します (oc adm pod-network join-projects --to control-plane-project member-project
の実行と同じです)。サービスメッシュからメンバーを削除すると、そのNetNamespace
はコントロールプレーンから分離されます (oc adm pod-network isolate-projects member-project
の実行と同じです)。 - Subnet: 追加の設定は実行されません。
2.4.3. 自動的な挿入
アップストリームの Istio コミュニティーインストールは、ラベル付けしたプロジェクト内の Pod にサイドカーコンテナーを自動的に挿入します。
Red Hat OpenShift Service Mesh はサイドカーコンテナーをどの Pod にも自動的に挿入しませんが、自動的なサイドカーコンテナーの挿入についてのセクションで説明されているように、sidecar.istio.io/inject
アノテーションを指定する必要があります。
2.4.4. Istio ロールベースアクセス制御機能
Istio ロールベースアクセス制御機能 (RBAC) は、サービスへのアクセスを制御するために使用できるメカニズムを提供します。ユーザー名やプロパティーのセットを指定してサブジェクトを特定し、それに応じてアクセス制御を適用することができます。
アップストリームの Istio コミュニティーインストールには、ヘッダーの完全一致の実行、ヘッダーのワイルドカードの一致の実行、または特定のプレフィックスまたはサフィックスを含むヘッダーの有無をチェックするオプションが含まれます。
Red Hat OpenShift Service Mesh は、正規表現を使用して要求ヘッダーと一致させる機能を拡張します。request.regex.headers
のプロパティーキーを正規表現で指定します。
アップストリーム Istio コミュニティーの要求ヘッダーのマッチング例
apiVersion: "rbac.istio.io/v1alpha1" kind: ServiceRoleBinding metadata: name: httpbin-client-binding namespace: httpbin spec: subjects: - user: "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account" properties: request.headers[<header>]: "value"
Red Hat OpenShift Service Mesh の正規表現による要求ヘッダーのマッチング
apiVersion: "rbac.istio.io/v1alpha1" kind: ServiceRoleBinding metadata: name: httpbin-client-binding namespace: httpbin spec: subjects: - user: "cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account" properties: request.regex.headers[<header>]: "<regular expression>"
2.4.5. OpenSSL
Red Hat OpenShift Service Mesh では、BoringSSL を OpenSSL に置き換えます。OpenSSL は、Secure Sockets Layer (SSL) プロトコルおよび Transport Layer Security (TLS) プロトコルのオープンソース実装を含むソフトウェアライブラリーです。Red Hat OpenShift Service Mesh Proxy バイナリーは、基礎となる Red Hat Enterprise Linux オペレーティングシステムから OpenSSL ライブラリー (libssl および libcrypto) を動的にリンクします。
2.4.6. Istio Container Network Interface (CNI) プラグイン
Red Hat OpenShift Service Mesh には CNI プラグインが含まれ、アプリケーション Pod ネットワーキングを設定する代替の方法が提供されます。CNI プラグインは init-container
ネットワーク設定を置き換えます。これにより、昇格した権限でサービスアカウントおよびプロジェクトに SCC (Security Context Constraints) へのアクセスを付与する必要がなくなります。
2.4.7. Envoy、シークレット検出サービス、および証明書
- Red Hat OpenShift Service Mesh は、QUIC ベースのサービスをサポートしません。
- Istio の Secret Discovery Service (SDS) 機能を使用した TLS 証明書のデプロイメントは、現在 Red Hat OpenShift Service Mesh ではサポートされていません。Istio 実装は、hostPath マウントを使用する nodeagent コンテナーに依存します。
2.4.8. Kiali とサービスメッシュ
OpenShift Container Platform でのサービスメッシュを使用した Kiali のインストールは、複数の点でコミュニティーの Kiali インストールとは異なります。以下の変更点は、問題の解決、追加機能の提供、OpenShift Container Platform へのデプロイ時の差異の処理を実行するために必要になることがあります。
- Kiali はデフォルトで有効になっています。
- Ingress はデフォルトで有効になっています。
- Kiali ConfigMap が更新されています。
- Kiali の ClusterRole 設定が更新されています。
-
ユーザーは、ConfigMap または Kiali カスタムリソースファイルを手動で編集できません。そのような変更はサービスメッシュまたは Kiali Operator によって上書きされる可能性があるためです。Red Hat OpenShift Service Mesh で実行している Kiali の設定はすべて
ServiceMeshControlPlane
カスタムリソースファイルで行われ、設定オプションは制限されています。Operator ファイルの更新は、cluster-admin 権限を持つユーザーに制限する必要があります。
2.4.9. Jaeger とサービスメッシュ
OpenShift Container Platform でのサービスメッシュを使用した Jaeger インストールは、複数の点でコミュニティーの Jaeger インストールとは異なります。以下の変更点は、問題の解決、追加機能の提供、OpenShift Container Platform へのデプロイ時の差異の処理を実行するために必要になることがあります。
- Jaeger はサービスメッシュに対してデフォルトで有効にされています。
- Ingress は、サービスメッシュに対してデフォルトで有効にされています。
- Zipkin ポート名が、(http から) jaeger-collector-zipkin に変更されています。
- Jaeger はデフォルトでストレージに Elasticsearch を使用します。
- Istio のコミュニティーバージョンは、一般的な「トレース」ルートを提供します。Red Hat OpenShift Service Mesh は Jaeger Operator によってインストールされ、OAuth によってすでに保護されている「jaeger」ルートを使用します。
- Red Hat OpenShift Service Mesh は Envoy プロキシーにサイドカーを使用し、Jaeger も Jaeger エージェントにサイドカーを使用します。両者は個別に設定し、混同しないようにしてください。プロキシーサイドカーは、Pod の Ingress および Egress トラフィックに関連するスパンを作成します。エージェントサイドカーは、アプリケーションによって出力されるスパンを受け取り、これらを Jaeger Collector に送信します。