2.3. Service Mesh のアップグレード
Red Hat OpenShift Service Mesh の最新機能にアクセスするには、最新バージョン 2.6.4 にアップグレードします。
2.3.1. バージョニングについて
Red Hat は、製品リリースにセマンティックバージョニングを使用します。セマンティックバージョニングは、X.Y.Z 形式の 3 つのコンポーネント番号になります。
- X はメジャーバージョンを表します。メジャーリリースは通常、アーキテクチャーの変更、API の変更、スキーマの変更、および同様のメジャー更新など、何らかの最新の変更を意味します。
- Y はマイナーバージョンを表します。マイナーリリースには、下位互換性を維持しながら、新しい機能が含まれています。
- Z はパッチバージョン (z-stream リリースとも呼ばれます) を表します。パッチリリースは、Common Vulnerabilities and Exposures (CVE) に対応し、バグ修正をリリースするために使用されます。通常、新機能はパッチリリースの一部としてリリースされません。
2.3.1.1. バージョニングが Service Mesh のアップグレードに与える影響
実行する更新のバージョンによって、アップグレードプロセスが異なります。
- パッチの更新: パッチのアップグレードは、Operator Lifecycle Manager (OLM) によって管理されます。Operator を更新すると自動的に発生します。
-
マイナーアップグレード: マイナーアップグレードでは、最新の Red Hat OpenShift Service Mesh Operator バージョンに更新することと、
ServiceMeshControlPlane
リソースのspec.version
値を手動で変更することの両方が必要です。 -
メジャーアップグレード: メジャーアップグレードでは、最新の Red Hat OpenShift Service Mesh Operator バージョンに更新することと、
ServiceMeshControlPlane
リソースのspec.version
値を手動で変更することの両方が必要です。メジャーアップグレードには後方互換性のない変更が含まれている可能性があるため、手動による追加の変更が必要になる場合があります。
2.3.1.2. Service Mesh のバージョンについて
ご使用のシステムにデプロイした Red Hat OpenShift Service Mesh のバージョンを理解するには、各コンポーネントのバージョンがどのように管理されるかを理解する必要があります。
Operator バージョン:最新の Operator バージョンは 2.6.4 です。Operator バージョン番号は、現在インストールされている Operator のバージョンのみを示します。Red Hat OpenShift Service Mesh Operator は Service Mesh コントロールプレーンの複数のバージョンをサポートするため、Operator のバージョンはデプロイされた
ServiceMeshControlPlane
リソースのバージョンを決定しません。重要最新の Operator バージョンにアップグレードすると、パッチの更新が自動的に適用されますが、Service Mesh コントロールプレーンは最新のマイナーバージョンに自動的にアップグレードされません。
ServiceMeshControlPlane バージョン:
ServiceMeshControlPlane
バージョンは、使用している Red Hat OpenShift Service Mesh のバージョンを決定します。ServiceMeshControlPlane
リソースのspec.version
フィールドの値は、Red Hat OpenShift Service Mesh のインストールとデプロイに使用されるアーキテクチャーと設定を制御します。Service Mesh コントロールプレーンを作成する場合は、以下の 2 つの方法のいずれかでバージョンを設定できます。- Form View で設定するには、Control Plane Version メニューからバージョンを選択します。
-
YAML View で設定するには、YAML ファイルに
spec.version
の値を設定します。
Operator Lifecycle Manager (OLM) は Service Mesh コントロールプレーンのアップグレードをを管理しないため、SMCP を手動でアップグレードしない限り、Operator および ServiceMeshControlPlane
(SMCP) のバージョン番号が一致しない可能性があります。
2.3.2. アップグレードに関する考慮事項
maistra.io/
ラベルまたはアノテーションは、ユーザーが作成したカスタムリソースで使用することはできません。これは、Red Hat OpenShift Service Mesh Operator によってリソースが生成され、管理される必要があることを示すためです。
アップグレード時に、Operator はファイルの削除や置換などの変更を、リソースが Operator によって管理されることを示す以下のラベルまたはアノテーションを含むリソースに対して行います。
アップグレードする前に、ユーザーが作成したカスタムリソースで以下のラベルまたはアノテーションが含まれるか確認します。
-
maistra-istio-operator
(Red Hat OpenShift Service Mesh) に設定されたmaistra.io/
およびapp.kubernetes.io/managed-by
ラベル -
kiali.io/
(Kiali) -
jaegertracing.io/
(Red Hat OpenShift 分散トレースプラットフォーム (Jaeger)) -
logging.openshift.io/
(Red Hat Elasticsearch)
アップグレードの前に、ユーザーが作成したカスタムリソースで、それらが Operator によって管理されることを示すラベルまたはアノテーションを確認します。Operator によって管理されないカスタムリソースからラベルまたはアノテーションを削除します。
バージョン 2.0 にアップグレードする場合、Operator は SMCP と同じ namespace で、これらのラベルを持つリソースのみを削除します。
バージョン 2.1 にアップグレードする場合、Operator はすべての namespace で、これらのラベルを持つリソースを削除します。
2.3.2.1. アップグレードに影響する可能性のある既知の問題
アップグレードに影響する可能性がある既知の問題には、次のものがあります。
- Operator をアップグレードする際に、Jaeger または Kiali のカスタム設定が元に戻される可能性があります。Operator をアップグレードする前に、Service Mesh の実稼働環境用デプロイメント内にある Jaeger オブジェクトまたは Kiali オブジェクトのカスタム設定をメモし、再作成できるようにしてください。
-
Red Hat OpenShift Service Mesh は、明示的に文書化されている場合を除き、
EnvoyFilter
設定の使用はサポートしていません。これは、下層の Envoy API と疎結合されており、後方互換性を保持できないためです。Envoy フィルターを使用していて、ServiceMeshControlPlane
のアップグレードによって導入された新しいバージョンの Envoy が原因で Istio によって生成された設定が変更された場合、実装したEnvoyFilter
が壊れる可能性があります。 -
OSSM-1505
ServiceMeshExtension
は、OpenShift Container Platform バージョン 4.11 では機能しません。ServiceMeshExtension
は Red Hat OpenShift Service Mesh 2.2 で非推奨となったため、この既知の問題は修正されず、エクステンションをWasmPluging
に移行する必要があります。 -
OSSM-1396 ゲートウェイリソースに
spec.externalIPs
設定が含まれている場合、ゲートウェイは、ServiceMeshControlPlane
の更新時に再作成されずに削除され、再作成されることはありません。
OSSM-1052 Service Mesh コントロールプレーンで入力ゲートウェイのサービス
ExternalIP
を設定すると、サービスは作成されません。SMCP のスキーマには、サービスのパラメーターがありません。回避策: SMCP 仕様でゲートウェイの作成を無効にして、(サービス、ロール、および RoleBinding など) ゲートウェイのデプロイメントを完全に手動で管理します。
2.3.3. Operator のアップグレード
Service Mesh に最新のセキュリティー修正、バグ修正、およびソフトウェア更新プログラムを適用し続けるには、Operator を最新の状態に保つ必要があります。パッチの更新は、Operator をアップグレードすることで開始されます。
Operator のバージョンは、お使いの Service Mesh のバージョンを 判別しません。デプロイされた Service Mesh コントロールプレーンのバージョンによって、Service Mesh のバージョンが決まります。
Red Hat OpenShift Service Mesh Operator は Service Mesh コントロールプレーンの複数のバージョンをサポートするため、Red Hat OpenShift Service Mesh Operator を更新しても、デプロイされた ServiceMeshControlPlane
の spec.version
値は 更新されません。また、spec.version
値は 2 桁の数字 (2.2 など) であり、パッチの更新 (2.2.1 など) は SMCP バージョン値に反映されないことにも注意してください。
Operator Lifecycle Manager (OLM) は、クラスター内の Operator のインストール、アップグレード、ロールベースのアクセス制御 (RBAC) を制御します。OLM はデフォルトで OpenShift Container Platform で実行されます。OLM は利用可能な Operator のクエリーやインストールされた Operator のアップグレードを実行します。
Operator をアップグレードするためにアクションを実行する必要があるかどうかは、インストール時に選択した設定によって異なります。各 Operator をインストールしたときに、Update Channel および Approval Strategy を選択しました。これら 2 つの設定の組み合わせによって、Operator が更新されるタイミングと方法が決まります。
バージョン付けされたチャネル | "Stable" または "Preview" チャネル | |
---|---|---|
自動 | そのバージョンのみのマイナーリリースおよびパッチリリースの Operator を自動的に更新します。次のメジャーバージョン (バージョン 2.0 から 3.0) には、自動的に自動的に更新されません。次のメジャーバージョンに更新するために必要な Operator サブスクリプションを手動で変更します。 | すべてのメジャー、マイナーおよびパッチリリースについて、Operator を自動的に更新します。 |
手動 | 指定したバージョンのマイナーおよびパッチリリースに必要な手動更新。次のメジャーバージョンに更新するために必要な Operator サブスクリプションを手動で変更します。 | すべてのメジャー、マイナー、およびパッチリリースについて、手動更新が必要になります。 |
Red Hat OpenShift Service Mesh Operator を更新すると、Operator Lifecycle Manager (OLM) は古い Operator Pod を削除し、新しい Pod を開始します。新しい Operator Pod が開始されると、調整プロセスは ServiceMeshControlPlane
(SMCP) をチェックし、いずれかの Service Mesh コントロールプレーンコンポーネントの利用可能な更新されたコンテナーイメージがある場合は、それらの Service Mesh コントロールプレーン Pod を新しいコンテナーイメージを使用するものに置き換えます。
Kiali および Red Hat OpenShift 分散トレースプラットフォーム (Jaeger) Operator をアップグレードすると、OLM 調整プロセスがクラスターをスキャンし、管理対象インスタンスを新しい Operator のバージョンにアップグレードします。たとえば、Red Hat OpenShift 分散トレースプラットフォーム (Jaeger) Operator をバージョン 1.30.2 からバージョン 1.34.1 に更新する場合、Operator は分散トレースプラットフォームの実行中のインスタンスをスキャンし、それらも 1.34.1 にアップグレードします。
Red Hat OpenShift Service Mesh の特定のパッチバージョンにとどまるには、自動更新を無効にして、Operator のその特定のバージョンにとどまる必要があります。
Operator のアップグレードに関する詳細は、Operator Lifecycle Manager のドキュメントを参照してください。
2.3.4. コントロールプレーンのアップグレード
マイナーおよびメジャーリリースのコントロールプレーンを手動で更新する必要があります。コミュニティーの Istio プロジェクトはカナリアアップグレードを推奨していますが、Red Hat OpenShift Service Mesh はインプレースアップグレードのみをサポートしています。Red Hat OpenShift Service Mesh では、各マイナーリリースから次のマイナーリリースに順番にアップグレードする必要があります。たとえば、バージョン 2.0 からバージョン 2.1 にアップグレードしてから、バージョン 2.2 にアップグレードする必要があります。Red Hat OpenShift Service Mesh 2.0 から 2.2 に直接更新することはできません。
Service Mesh コントロールプレーンをアップグレードすると、Operator が管理するすべてのリソース (ゲートウェイなど) もアップグレードされます。
複数のバージョンのコントロールプレーンを同じクラスターにデプロイできますが、Red Hat OpenShift Service Mesh は、Service Mesh のカナリアアップグレードをサポートしていません。つまり、spec.version
の値が異なるさまざまな SCMP リソースを使用できますが、同じメッシュを管理することはできません。
エクステンションの移行に関する詳細は、ServiceMeshExtension から WasmPlugin リソースへの移行 を参照してください。
2.3.4.1. バージョン 2.5 からバージョン 2.6 へのアップグレードの変更
2.3.4.1.1. Red Hat OpenShift 分散トレーシングプラットフォーム (Jaeger) のデフォルト設定の変更
このリリースでは、ServiceMeshControlPlane
リソースの新しいインスタンスに対して、Red Hat OpenShift 分散トレーシングプラットフォーム (Jaeger) がデフォルトで無効になります。
ServiceMeshControlPlane
リソースの既存のインスタンスを Red Hat OpenShift Service Mesh バージョン 2.6 に更新すると、分散トレーシングプラットフォーム (Jaeger) はデフォルトで有効のままになります。
Red Hat OpenShift Service Mesh 2.6 は、Red Hat OpenShift 分散トレーシングプラットフォーム (Jaeger) と OpenShift Elasticsearch Operator のサポートが含まれる最後のリリースです。分散トレーシングプラットフォーム (Jaeger) と OpenShift Elasticsearch Operator は両方とも次のリリースで削除されます。現在、分散トレーシングプラットフォーム (Jaeger) と OpenShift Elasticsearch Operator を使用している場合は、Red Hat OpenShift 分散トレーシングプラットフォーム (Tempo) と Red Hat build of OpenTelemetry に移行する必要があります。
2.3.4.1.2. Envoy サイドカーコンテナーのデフォルト設定の変更
Pod の起動時間を短縮するために、Istio ではサイドカーコンテナーに startupProbe
がデフォルトで含まれるようになりました。Pod の readiness プローブは、Envoy サイドカーが起動するまで起動しません。
2.3.4.2. バージョン 2.4 から 2.5 へのアップグレードに伴う変更
2.3.4.2.1. Istio OpenShift Routing (IOR) のデフォルト設定の変更
Istio OpenShift Routing (IOR) のデフォルト設定が変更されました。この設定はデフォルトで無効になりました。
ServiceMeshControlPlane
リソースの spec.gateways.openshiftRoute
仕様で、enabled
フィールドを true
に設定することで、IOR を使用できます。
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane spec: gateways: openshiftRoute: enabled: true
2.3.4.2.2. Istio プロキシー同時実行設定の強化
デプロイメント間の一貫性を確保するために、Istio はプロキシーコンテナーに割り当てられた CPU 制限に基づいて concurrency
パラメーターを設定するようになりました。たとえば、制限が 2500m の場合、concurrency
パラメーターは 3 に設定されます。concurrency
パラメーターを別の値に設定すると、Istio は CPU 制限を使用する代わりに、その値を使用してプロキシーが実行するスレッドの数を設定します。
以前のリリースでは、このパラメーターのデフォルト設定は 2 でした。
2.3.4.3. バージョン 2.3 から 2.4 へのアップグレードに伴う変更
Service Mesh コントロールプレーンをバージョン 2.3 から 2.4 にアップグレードすると、次の動作変更が導入されます。
- Istio OpenShift Routing (IOR) のサポートは非推奨になりました。IOR 機能は引き続き有効ですが、将来のリリースでは削除される予定です。
次の暗号スイートはサポートされなくなり、クライアント側とサーバー側の TLS ネゴシエーションで使用される暗号のリストから削除されました。
- ECDHE-ECDSA-AES128-SHA
- ECDHE-RSA-AES128-SHA
- AES128-GCM-SHA256
- AES128-SHA
- ECDHE-ECDSA-AES256-SHA
- ECDHE-RSA-AES256-SHA
- AES256-GCM-SHA384
AES256-SHA
これらの暗号スイートのいずれかを使用するサービスにアクセスする必要があるアプリケーションは、プロキシーが TLS 接続を開始すると接続に失敗します。
2.3.4.4. バージョン 2.2 から 2.3 へのアップグレードに伴う変更
Service Mesh コントロールプレーンをバージョン 2.2 から 2.3 にアップグレードすると、次の動作変更が導入されます。
-
このリリースでは、
WasmPlugin
API を使用する必要があります。2.2 で非推奨化されたServiceMeshExtension
API のサポートが廃止されました。ServiceMeshExtension
API の使用中にアップグレードを試みると、アップグレードは失敗します。
2.3.4.5. バージョン 2.1 から 2.2 へのアップグレードに伴う変更
Service Mesh コントロールプレーンをバージョン 2.1 から 2.2 にアップグレードすると、次の動作変更が導入されます。
-
istio-node
DaemonSet は、アップストリームの Istio の名前と一致するようにistio-cni-node
に名前が変更されました。 -
Istio 1.10 は、デフォルトで
lo
ではなくeth0
を使用してトラフィックをアプリケーションコンテナーに送信するように Envoy を更新しました。 -
このリリースでは、
WasmPlugin
API のサポートが追加され、ServiceMeshExtension
が非推奨になりました。
2.3.4.6. バージョン 2.0 から 2.1 へのアップグレードに伴う変更
Service Mesh コントロールプレーンをバージョン 2.0 から 2.1 にアップグレードすると、以下のアーキテクチャーおよび動作上の変更が導入されます。
アーキテクチャーの変更
Mixer は Red Hat OpenShift Service Mesh 2.1 で完全に削除されました。Red Hat OpenShift Service Mesh 2.0.x リリースから 2.1 へのアップグレードは、Mixer が有効な場合にブロックされます。
v2.0 から v2.1 にアップグレード時に以下のメッセージが表示される場合は、.spec.version
フィールドを更新する前に、既存のコントロールプレーン仕様にすでに存在する Mixer
タイプを Istiod
タイプに更新します。
An error occurred admission webhook smcp.validation.maistra.io denied the request: [support for policy.type "Mixer" and policy.Mixer options have been removed in v2.1, please use another alternative, support for telemetry.type "Mixer" and telemetry.Mixer options have been removed in v2.1, please use another alternative]”
以下に例を示します。
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane spec: policy: type: Istiod telemetry: type: Istiod version: v2.6
動作上の変更
AuthorizationPolicy
の更新-
PROXY プロトコルでは、
ipBlocks
およびnotIpBlocks
を使用してリモート IP アドレスを指定する場合は、代わりにremoteIpBlocks
およびnotRemoteIpBlocks
を使用するように設定を更新します。 - ネストされた JSON Web Token(JWT) 要求のサポートが追加されました。
-
PROXY プロトコルでは、
EnvoyFilter
の重大な変更-
typed_config
を使用する必要があります。 - xDS v2 はサポート対象外になりました。
- フィルター名が非推奨になりました。
-
- 以前のバージョンのプロキシーは、新しいプロキシーから 1xx または 204 ステータスコードを受信すると、503 ステータスコードを報告する場合があります。
2.3.4.7. Service Mesh コントロールプレーンのアップグレード
Red Hat OpenShift Service Mesh をアップグレードするには、Red Hat OpenShift Service Mesh ServiceMeshControlPlane
v2 リソースのバージョンフィールドを更新する必要があります。次に、設定と適用が完了したら、アプリケーション Pod を再起動して各サイドカープロキシーとその設定を更新します。
前提条件
- OpenShift Container Platform 4.9 以降を実行している。
- 最新の Red Hat OpenShift Service Mesh Operator がある。
手順
ServiceMeshControlPlane
リソースが含まれるプロジェクトに切り替えます。この例では、istio-system
が Service Mesh コントロールプレーンプロジェクトの名前となります。$ oc project istio-system
v2
ServiceMeshControlPlane
リソース設定をチェックし、これが有効であることを確認します。以下のコマンドを実行して、
ServiceMeshControlPlane
リソースを v2 リソースとして表示します。$ oc get smcp -o yaml
ヒントService Mesh コントロールプレーン設定をバックアップします。
.spec.version
フィールドを更新し、設定を適用します。以下に例を示します。
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane metadata: name: basic spec: version: v2.6
または、コマンドラインの代わりに Web コンソールを使用して Service Mesh コントロールプレーンを編集することもできます。OpenShift Container Platform Web コンソールで、Project をクリックし、入力したプロジェクト名を選択します。
-
Operators
Installed Operators をクリックします。 -
ServiceMeshControlPlane
インスタンスを見つけます。 - YAML view を選択し、直前の例のように YAML ファイルのテキストを更新します。
- Save をクリックします。
-
Operators
2.3.4.8. Red Hat OpenShift Service Mesh のバージョン 1.1 からバージョン 2.0 への移行
バージョン 1.1 から 2.0 にアップグレードするには、ワークロードおよびアプリケーションを新規バージョンを実行する Red Hat OpenShift Service Mesh の新規インスタンスに移行する手動の手順が必要です。
前提条件
- OpenShift Container Platform 4.7 にアップグレードしてから Red Hat OpenShift Service Mesh 2.0 にアップグレードする必要があります。
- Red Hat OpenShift Service Mesh のバージョン 2.0 Operator が必要です。自動 アップグレードパスを選択した場合、Operator は最新情報を自動的にダウンロードします。ただし、Red Hat OpenShift Service Mesh バージョン 2.0 で機能を使用するために実行する必要のある手順があります。
2.3.4.8.1. Red Hat OpenShift Service Mesh のアップグレード
Red Hat OpenShift Service Mesh をアップグレードするには、新規の namespace に Red Hat OpenShift Service Mesh ServiceMeshControlPlane
2.0 リソースのインスタンスを作成する必要があります。次に、設定後にマイクロサービスアプリケーションおよびワークロードを古いメッシュから新規の Service Mesh に移動します。
手順
v1
ServiceMeshControlPlane
リソース設定をチェックし、これが有効であることを確認します。以下のコマンドを実行して、
ServiceMeshControlPlane
リソースを v2 リソースとして表示します。$ oc get smcp -o yaml
-
無効なフィールドの情報は、出力の
spec.techPreview.errored.message
フィールドを確認してください。 - v1 リソースに無効なフィールドがある場合は、リソースは調整されず、v2 リソースとして編集することはできません。v2 フィールドへの更新はすべて、元の v1 設定で上書きされます。無効なフィールドを修正するには、リソースの v1 バージョンを置き換えるか、パッチを適用するか、編集できます。リソースを修正せずに削除することもできます。リソースの修正後に調整でき、リソースの v2 バージョンを変更または表示できます。
ファイルを編集してリソースを修正するには、
oc get
を使用してリソースを取得し、テキストファイルをローカルで編集し、リソースを編集したファイルに置き換えます。$ oc get smcp.v1.maistra.io <smcp_name> > smcp-resource.yaml #Edit the smcp-resource.yaml file. $ oc replace -f smcp-resource.yaml
パッチを使用してリソースを修正するには、
oc patch
を使用します。$ oc patch smcp.v1.maistra.io <smcp_name> --type json --patch '[{"op": "replace","path":"/spec/path/to/bad/setting","value":"corrected-value"}]'
コマンドラインツールで編集してリソースを修正するには、
oc edit
を使用します。$ oc edit smcp.v1.maistra.io <smcp_name>
Service Mesh コントロールプレーン設定をバックアップします。
ServiceMeshControlPlane
リソースが含まれるプロジェクトに切り替えます。この例では、istio-system
が Service Mesh コントロールプレーンプロジェクトの名前となります。$ oc project istio-system
以下のコマンドを実行して、現在の設定を取得します。<smcp_name> は
ServiceMeshControlPlane
リソースのメタデータに指定されます (例:basic-install
またはfull-install
)。$ oc get servicemeshcontrolplanes.v1.maistra.io <smcp_name> -o yaml > <smcp_name>.v1.yaml
ServiceMeshControlPlane
を、開始点としての設定に関する情報が含まれる v2 のコントロールプレーンバージョンに変換します。$ oc get smcp <smcp_name> -o yaml > <smcp_name>.v2.yaml
プロジェクトを作成します。OpenShift Container Platform コンソールの Project メニューで、
New Project
をクリックし、プロジェクトの名前 (例:istio-system-upgrade
) を入力します。または、CLI からこのコマンドを実行できます。$ oc new-project istio-system-upgrade
-
v2
ServiceMeshControlPlane
のmetadata.namespace
フィールドを新規のプロジェクト名で更新します。この例では、istio-system-upgrade
を使用します。 -
version
フィールドを 1.1 から 2.0 に更新するか、v2ServiceMeshControlPlane
でこれを削除します。 新規 namespace に
ServiceMeshControlPlane
を作成します。コマンドラインで以下のコマンドを実行し、取得したServiceMeshControlPlane
の v2 バージョンでコントロールプレーンをデプロイします。この例の `<smcp_name.v2>` は、実際のファイルへのパスに置き換えます。$ oc create -n istio-system-upgrade -f <smcp_name>.v2.yaml
または、コンソールを使用して Service Mesh コントロールプレーンを作成することもできます。OpenShift Container Platform Web コンソールで、Project をクリックします。次に、入力したプロジェクト名を選択します。
-
Operators
Installed Operators をクリックします。 - Create ServiceMeshControlPlane をクリックします。
-
YAML view を選択し、取得した YAML ファイルのテキストをフィールドに貼り付けます。
apiVersion
フィールドがmaistra.io/v2
に設定されていることを確認し、metadata.namespace
フィールドを新規 namespace (例:istio-system-upgrade
) を使用するように変更します。 - Create をクリックします。
-
Operators
2.3.4.8.2. 2.0 ServiceMeshControlPlane の設定
ServiceMeshControlPlane
リソースは Red Hat OpenShift Service Mesh バージョン 2.0 用に変更されました。ServiceMeshControlPlane
リソースの v2 バージョンを作成したら、新機能を利用し、デプロイメントを適合させるようにこれを変更します。ServiceMeshControlPlane
リソースを変更するため、Red Hat OpenShift Service Mesh 2.0 の仕様および動作に以下の変更を加えることを検討してください。使用する機能の更新情報は、Red Hat OpenShift Service Mesh 2.0 の製品ドキュメントを参照してください。v2 リソースは、Red Hat OpenShift Service Mesh 2.0 インストールに使用する必要があります。
2.3.4.8.2.1. アーキテクチャーの変更
以前のバージョンで使用されるアーキテクチャーのユニットは Istiod によって置き換えられました。2.0 では、Service Mesh コントロールプレーンのコンポーネント Mixer、Pilot、Citadel、Galley、およびサイドカーインジェクター機能が単一のコンポーネントである Istiod に統合されました。
Mixer はコントロールプレーンコンポーネントとしてサポートされなくなりましたが、Mixer ポリシーおよび Telemetry プラグインは Istiod の WASM 拡張でサポートされるようになりました。レガシー Mixer プラグインを統合する必要がある場合は、ポリシーと Telemetry に対して Mixer を有効にできます。
シークレット検出サービス (SDS) は、証明書とキーを Istiod からサイドカーコンテナーに直接配信するために使用されます。Red Hat OpenShift Service Mesh バージョン 1.1 では、シークレットはクライアント証明書およびキーを取得するためにプロキシーによって使用される Citadel で生成されました。
2.3.4.8.2.2. アノテーションの変更
v2.0 では、以下のアノテーションに対応しなくなりました。これらのアノテーションのいずれかを使用している場合は、これを v2.0 Service Mesh コントロールプレーンに移行する前にワークロードを更新する必要があります。
-
sidecar.maistra.io/proxyCPULimit
はsidecar.istio.io/proxyCPULimit
に置き換えられました。ワークロードでsidecar.maistra.io
アノテーションを使用していた場合は、代わりにsidecar.istio.io
を使用するようにこれらのワークロードを変更する必要があります。 -
sidecar.maistra.io/proxyMemoryLimit
がsidecar.istio.io/proxyMemoryLimit
に置き換えられました。 -
sidecar.istio.io/discoveryAddress
はサポートされなくなりました。また、デフォルトの検出アドレスがpilot.<control_plane_namespace>.svc:15010
(または mtls が有効にされている場合はポート 15011) からistiod-<smcp_name>.<control_plane_namespace>.svc:15012
に移行しました。 -
ヘルスステータスポートは設定できなくなり、15021 にハードコーディングされています。* カスタムステータスポート (例:
status.sidecar.istio.io/port
) を定義している場合は、ワークロードを v2.0 Service Mesh コントロールプレーンに移行する前にオーバーライドを削除する必要があります。ステータスポートを0
に設定すると、readiness チェックを依然として無効にできます。 - Kubernetes シークレットリソースは、サイドカーのクライアント証明書を配信するために使用されなくなりました。証明書は Istiod の SDS サービスを介して配信されるようになりました。マウントされたシークレットに依存している場合、それらは v2.0 Service Mesh コントロールプレーンのワークロードで利用不可になります。
2.3.4.8.2.3. 動作上の変更
Red Hat OpenShift Service Mesh 2.0 の機能の一部は、以前のバージョンの機能とは異なります。
-
ゲートウェイの readiness ポートは
15020
から15021
に移行しました。 - ターゲットホストの可視性には、VirtualService と ServiceEntry リソースが含まれます。これには、Sidecar リソースを介して適用される制限が含まれます。
- 自動の相互 TLS はデフォルトで有効になります。プロキシー間の通信は、実施されているグローバルの PeerAuthentication ポリシーに関係なく、mTLS を使用するように自動的に設定されます。
-
セキュアな接続は、
spec.security.controlPlane.mtls
設定に関係なく、プロキシーが Service Mesh コントロールプレーンと通信する際に常に使用されます。spec.security.controlPlane.mtls
設定は、Mixer Telemetry またはポリシーの接続を設定する場合にのみ使用されます。
2.3.4.8.2.4. サポート対象外のリソースの移行情報
Policy (authentication.istio.io/v1alpha1)
Policy リソースは、v2.0 Service Mesh コントロールプレーン、PeerAuthentication および RequestAuthentication で使用するために新規リソースタイプに移行する必要があります。Policy リソースの特定の設定によっては、同じ効果を実現するために複数のリソースを設定しなければならない場合があります。
相互 TLS
相互 TLS は、security.istio.io/v1beta1
PeerAuthentication リソースを使用して実行されます。レガシーの spec.peers.mtls.mode
フィールドは、新規リソースの spec.mtls.mode
フィールドに直接マップされます。選定基準は、spec.targets[x].name
のでのサービス名の指定から spec.selector.matchLabels
のラベルセレクターに変更されました。PeerAuthentication では、ラベルは、ターゲットリストで名前が指定されたサービスのセレクターと一致する必要があります。ポート固有の設定は spec.portLevelMtls
にマップされる必要があります。
認証
spec.origins
に指定される追加の認証方法は、security.istio.io/v1beta1
RequestAuthentication リソースにマップされる必要があります。spec.selector.matchLabels
は PeerAuthentication の同じフィールドに対して同様に設定される必要があります。spec.origins.jwt
アイテムからの JWT プリンシパルに固有の設定は、spec.rules
アイテムの同様のフィールドにマップされます。
-
Policy で指定される
spec.origins[x].jwt.triggerRules
は 1 つ以上のsecurity.istio.io/v1beta1
AuthorizationPolicy リソースにマップされる必要があります。spec.selector.labels
は、RequestAuthentication の同じフィールドに対して同様に設定される必要があります。 -
spec.origins[x].jwt.triggerRules.excludedPaths
は AuthorizationPolicy にマップされる必要があります。ここで、spec.rules[x].to.operation.path
エントリーは除外されたパスに一致する状態で spec.action が ALLOW に設定されます。 -
spec.origins[x].jwt.triggerRules.includedPaths
は別個の AuthorizationPolicy にマップされる必要があります。ここで、spec.rules[x].to.operation.path
エントリーは組み込まれるパスに一致し、specified spec.origins[x].jwt.issuer
と一致するspec.rules.[x].from.source.requestPrincipals
エントリーが Policy リソースにある状態で、spec.action
がALLOW
に設定されます。
ServiceMeshPolicy (maistra.io/v1)
ServiceMeshPolicy は、v1 リソースの spec.istio.global.mtls.enabled
または v2 リソース設定の spec.security.dataPlane.mtls
で Service Mesh コントロールプレーンに自動的に設定されています。v2 コントロールプレーンの場合は、機能的に同等の PeerAuthentication リソースがインストール時に作成されます。この機能は、Red Hat OpenShift Service Mesh バージョン 2.0 で非推奨となりました。
RbacConfig, ServiceRole, ServiceRoleBinding (rbac.istio.io/v1alpha1)
これらのリソースは security.istio.io/v1beta1
AuthorizationPolicy リソースに置き換えられました。
RbacConfig の動作をコピーするには、RbacConfig で指定される spec.mode に依存するデフォルトの AuthorizationPolicy を作成する必要があります。
-
spec.mode
がOFF
に設定されている場合は、AuthorizationPolicy が要求に適用されない限り、デフォルトのポリシーが ALLOW であるためリソースは必要ありません。 -
spec.mode
が ON に設定されている場合は、spec: {}
を設定します。メッシュ内のすべてのサービスに対して AuthorizationPolicy ポリシーを作成する必要があります。 -
spec.mode
がON_WITH_INCLUSION
に設定されていると、spec: {}
が組み込まれている各 namespace に指定された状態で AuthorizationPolicy を作成する必要があります。AuthorizationPolicy では、個別のサービスを含めることはサポートされません。ただし、サービスのワークロードに適用される AuthorizationPolicy が作成されるとすぐに、明示的に許可されない他のすべての要求は拒否されます。 -
spec.mode
がON_WITH_EXCLUSION
に設定されていると、これは AuthorizationPolicy によってサポートされません。グローバル DENY ポリシーを作成できますが、namespace またはワークロードのいずれかに適用できる allow-all ポリシーがないため、メッシュ内のすべてのワークロードに対して AuthorizationPolicy を作成する必要があります。
AuthorizationPolicy には、ServiceRoleBinding が提供する機能と同様の、設定が適用されるセレクターと、ServiceRole が提供する機能と同様の、適用する必要のあるルールの両方の設定が含まれます。
ServiceMeshRbacConfig (maistra.io/v1)
このリソースは、Service Mesh コントロールプレーンの namespace で security.istio.io/v1beta1
AuthorizationPolicy リソースを使用して置き換えられます。このポリシーは、メッシュ内のすべてのワークロードに適用されるデフォルトの認証ポリシーになります。特定の移行の詳細は、上記の RbacConfig を参照してください。
2.3.4.8.2.5. Mixer プラグイン
Mixer コンポーネントは、バージョン 2.0 ではデフォルトで無効にされます。ワークロードで Mixer プラグインを使用する場合は、Mixer コンポーネントを含めるようにバージョン 2.0 ServiceMeshControlPlane
を設定する必要があります。
Mixer ポリシーコンポーネントを有効にするには、以下のスニペットを ServiceMeshControlPlane
に追加します。
spec: policy: type: Mixer
Mixer Telemetry コンポーネントを有効にするには、以下のスニペットを ServiceMeshControlPlane
に追加します。
spec: telemetry: type: Mixer
レガシーの Mixer プラグインは、新しい ServiceMeshExtension (maistra.io/v1alpha1) カスタムリソースを使用して WASM に移行し、統合することもできます。
アップストリーム Istio ディストリビューションに含まれるビルトインの WASM フィルターは Red Hat OpenShift Service Mesh 2.0 では利用できません。
2.3.4.8.2.6. 相互 TLS の変更
ワークロード固有の PeerAuthentication ポリシーで mTLS を使用する場合は、ワークロードポリシーが namespace/グローバルポリシーと異なる場合にトラフィックを許可するために、対応する DestinationRule が必要になります。
自動 mTLS はデフォルトで有効になっていますが、spec.security.dataPlane.automtls
を ServiceMeshControlPlane
リソースで false に設定して無効にできます。auto mTLS を無効にする場合は、サービス間の適切な通信のために DestinationRules が必要になる場合があります。たとえば、1 つの namespace に対して PeerAuthentication を STRICT
に設定すると、DestinationRule が namespace のサービスに TLS モードを設定しない限り、他の namespace のサービスがそれらにアクセスできなくなります。
mTLS に関する詳細は、相互トランスポート層セキュリティー (mTLS) の有効化 を参照してください。
2.3.4.8.2.6.1. その他の mTLS の例
info サンプルアプリケーションで mTLS For productpage サービスを無効にするため、Red Hat OpenShift Service Mesh v1.1 に対して以下の方法 Policy リソースが設定されました。
Policy リソースの例
apiVersion: authentication.istio.io/v1alpha1 kind: Policy metadata: name: productpage-mTLS-disable namespace: <namespace> spec: targets: - name: productpage
info サンプルアプリケーションで mTLS For productpage サービスを無効にするために、以下の例を使用して Red Hat OpenShift Service Mesh v2.0 の PeerAuthentication リソースを設定します。
PeerAuthentication リソースの例
apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: productpage-mTLS-disable namespace: <namespace> spec: mtls: mode: DISABLE selector: matchLabels: # this should match the selector for the "productpage" service app: productpage
info サンプルアプリケーションで productpage
サービスの mTLS With JWT 認証を有効にするために、Policy リソースが Red Hat OpenShift Service Mesh v1.1 に対して設定されました。
Policy リソースの例
apiVersion: authentication.istio.io/v1alpha1 kind: Policy metadata: name: productpage-mTLS-with-JWT namespace: <namespace> spec: targets: - name: productpage ports: - number: 9000 peers: - mtls: origins: - jwt: issuer: "https://securetoken.google.com" audiences: - "productpage" jwksUri: "https://www.googleapis.com/oauth2/v1/certs" jwtHeaders: - "x-goog-iap-jwt-assertion" triggerRules: - excludedPaths: - exact: /health_check principalBinding: USE_ORIGIN
info サンプルアプリケーションの productpage サービスの mTLS With JWT 認証を有効にするために、以下の例を使用して Red Hat OpenShift Service Mesh v2.0 の PeerAuthentication リソースを設定します。
PeerAuthentication リソースの例
#require mtls for productpage:9000 apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: productpage-mTLS-with-JWT namespace: <namespace> spec: selector: matchLabels: # this should match the selector for the "productpage" service app: productpage portLevelMtls: 9000: mode: STRICT --- #JWT authentication for productpage apiVersion: security.istio.io/v1beta1 kind: RequestAuthentication metadata: name: productpage-mTLS-with-JWT namespace: <namespace> spec: selector: matchLabels: # this should match the selector for the "productpage" service app: productpage jwtRules: - issuer: "https://securetoken.google.com" audiences: - "productpage" jwksUri: "https://www.googleapis.com/oauth2/v1/certs" fromHeaders: - name: "x-goog-iap-jwt-assertion" --- #Require JWT token to access product page service from #any client to all paths except /health_check apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-mTLS-with-JWT namespace: <namespace> spec: action: ALLOW selector: matchLabels: # this should match the selector for the "productpage" service app: productpage rules: - to: # require JWT token to access all other paths - operation: notPaths: - /health_check from: - source: # if using principalBinding: USE_PEER in the Policy, # then use principals, e.g. # principals: # - “*” requestPrincipals: - “*” - to: # no JWT token required to access health_check - operation: paths: - /health_check
2.3.4.8.3. 設定レシピ
これらの設定レシピを使用して、以下の項目を設定できます。
2.3.4.8.3.1. データプレーンでの相互 TLS
データプレーン通信の相互 TLS は、ServiceMeshControlPlane
リソースの spec.security.dataPlane.mtls
で設定されます。これはデフォルトは false
になります。
2.3.4.8.3.2. カスタム署名キー
Istiod は、サービスプロキシーによって使用されるクライアント証明書とプライベートキーを管理します。デフォルトで、Istiod は署名用に自己署名証明書を使用しますが、カスタム証明書とシークレットキーを設定できます。署名するキーの設定方法に関する詳細は、外部認証局キーおよび証明書の追加 を参照してください。
2.3.4.8.3.3. トレーシング
トレースは spec.tracing
で設定されます。現在、サポートされるトレーサーの唯一のタイプは Jaeger
です。サンプリングは 0.01% の増分 (例: 1 は 0.01%、10000 は 100%) を表すスケーリングされた整数です。トレースの実装およびサンプリングレートを指定できます。
spec: tracing: sampling: 100 # 1% type: Jaeger
Jaeger は、ServiceMeshControlPlane
リソースの addons
セクションで設定します。
spec: addons: jaeger: name: jaeger install: storage: type: Memory # or Elasticsearch for production mode memory: maxTraces: 100000 elasticsearch: # the following values only apply if storage:type:=Elasticsearch storage: # specific storageclass configuration for the Jaeger Elasticsearch (optional) size: "100G" storageClassName: "storageclass" nodeCount: 3 redundancyPolicy: SingleRedundancy runtime: components: tracing.jaeger: {} # general Jaeger specific runtime configuration (optional) tracing.jaeger.elasticsearch: #runtime configuration for Jaeger Elasticsearch deployment (optional) container: resources: requests: memory: "1Gi" cpu: "500m" limits: memory: "1Gi"
Jaeger インストールは install
フィールドでカスタマイズできます。リソース制限などのコンテナー設定は、spec.runtime.components.jaeger
の関連フィールドに設定されます。spec.addons.jaeger.name
の値に一致する Jaeger リソースが存在する場合は、Service Mesh コントロールプレーンは既存のインストールを使用するように設定されます。既存の Jaeger リソースを使用して Jaeger インストールを完全にカスタマイズします。
2.3.4.8.3.4. 可視化
Kiali および Grafana は、ServiceMeshControlPlane
リソースの addons
セクションで設定されます。
spec: addons: grafana: enabled: true install: {} # customize install kiali: enabled: true name: kiali install: {} # customize install
Grafana および Kiali のインストールは、それぞれの install
フィールドでカスタマイズできます。リソース制限などのコンテナーのカスタマイズは、spec.runtime.components.kiali
および spec.runtime.components.grafana
で設定されます。name の値に一致する既存の Kiali リソースが存在する場合、Service Mesh コントロールプレーンはコントロールプレーンで使用するように Kiali リソースを設定します。accessible_namespaces
一覧や Grafana、Prometheus、およびトレースのエンドポイントなどの Kiali リソースの一部のフィールドは上書きされます。既存のリソースを使用して Kiali インストールを完全にカスタマイズします。
2.3.4.8.3.5. リソース使用状況とスケジューリング
リソースは spec.runtime.<component>
で設定されます。以下のコンポーネント名がサポートされます。
コンポーネント | 説明 | サポート対象バージョン |
---|---|---|
セキュリティー | Citadel コンテナー | v1.0/1.1 |
galley | Galley コンテナー | v1.0/1.1 |
pilot | Pilot/Istiod コンテナー | v1.0/1.1/2.0 |
mixer | istio-telemetry および istio-policy コンテナー | v1.0/1.1 |
| istio-policy コンテナー | v2.0 |
| istio-telemetry コンテナー | v2.0 |
| 各種アドオンと共に使用する oauth-proxy コンテナー | v1.0/1.1/2.0 |
| サイドカーインジェクター Webhook コンテナー | v1.0/1.1 |
| 一般的な Jaeger コンテナー: すべての設定が適用されない可能性があります。Jaeger インストールの完全なカスタマイズは、既存の Jaeger リソースを Service Mesh コントロールプレーンの設定に指定することでサポートされます。 | v1.0/1.1/2.0 |
| Jaeger エージェントに固有の設定 | v1.0/1.1/2.0 |
| Jaeger allInOne に固有の設定 | v1.0/1.1/2.0 |
| Jaeger コレクターに固有の設定 | v1.0/1.1/2.0 |
| Jaeger elasticsearch デプロイメントに固有の設定 | v1.0/1.1/2.0 |
| Jaeger クエリーに固有の設定 | v1.0/1.1/2.0 |
prometheus | prometheus コンテナー | v1.0/1.1/2.0 |
kiali | Kiali コンテナー: Kiali インストールの完全なカスタマイズは、既存の Kiali リソースを Service Mesh コントロールプレーン設定に指定してサポートされます。 | v1.0/1.1/2.0 |
grafana | Grafana コンテナー | v1.0/1.1/2.0 |
3scale | 3scale コンテナー | v1.0/1.1/2.0 |
| WASM 拡張キャッシュコンテナー | V2.0: テクノロジープレビュー |
コンポーネントによっては、リソースの制限およびスケジューリングをサポートするものもあります。詳細は、パフォーマンスおよびスケーラビリティー を参照してください。
2.3.4.8.4. アプリケーションとワークロードを移行するための次の手順
アプリケーションのワークロードを新規のメッシュに移動し、古いインスタンスを削除してアップグレードを完了します。
2.3.5. データプレーンのアップグレード
コントロールプレーンをアップグレードした後も、データプレーンは引き続き機能します。ただし、Envoy プロキシーに更新を適用し、プロキシー設定に変更を適用するには、アプリケーション Pod とワークロードを再起動する必要があります。
2.3.5.1. アプリケーションおよびワークロードの更新
移行を完了するには、メッシュ内のすべてのアプリケーション Pod を再起動して、Envoy サイドカープロキシーおよびそれらの設定をアップグレードします。
デプロイメントのローリング更新を実行するには、以下のコマンドを使用します。
$ oc rollout restart <deployment>
メッシュを設定するすべてのアプリケーションに対してローリング更新を実行する必要があります。