1.11. Service Mesh のアップグレード

Red Hat OpenShift Service Mesh の最新機能にアクセスするには、最新バージョンである 2.3.2 にアップグレードしてください。

1.11.1. バージョニングについて

Red Hat は、製品リリースにセマンティックバージョニングを使用します。セマンティックバージョニングは、X.Y.Z 形式の 3 つのコンポーネント番号になります。

  • X はメジャーバージョンを表します。メジャーリリースは通常、アーキテクチャーの変更、API の変更、スキーマの変更、および同様のメジャー更新など、何らかの最新の変更を意味します。
  • Y はマイナーバージョンを表します。マイナーリリースには、下位互換性を維持しながら、新しい機能が含まれています。
  • Z はパッチバージョン (z-stream リリースとも呼ばれます) を表します。パッチリリースは、Common Vulnerabilities and Exposures (CVE) に対処し、バグ修正をリリースするために使用されます。通常、新機能はパッチリリースの一部としてリリースされません。

1.11.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 値を手動で変更することの両方が必要です。メジャーアップグレードには後方互換性のない変更が含まれている可能性があるため、手動による追加の変更が必要になる場合があります。

1.11.1.2. Service Mesh のバージョンについて

ご使用のシステムにデプロイした Red Hat OpenShift Service Mesh のバージョンを理解するには、各コンポーネントのバージョンがどのように管理されるかを理解する必要があります。

  • Operator バージョン: 最新の Operator バージョンは 2.3.2 です。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) のバージョン番号が一致しない可能性があります。

1.11.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 分散トレースプラットフォーム)
  • logging.openshift.io/ (Red Hat Elasticsearch)

アップグレードの前に、ユーザーが作成したカスタムリソースで、それらが Operator によって管理されることを示すラベルまたはアノテーションを確認します。Operator によって管理されないカスタムリソースからラベルまたはアノテーションを削除します。

バージョン 2.0 にアップグレードする場合、Operator は SMCP と同じ namespace で、これらのラベルを持つリソースのみを削除します。

バージョン 2.1 にアップグレードする場合、Operator はすべての namespace で、これらのラベルを持つリソースを削除します。

1.11.2.1. アップグレードに影響する可能性のある既知の問題

アップグレードに影響する可能性がある既知の問題には、次のものがあります。

  • 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 など) ゲートウェイのデプロイメントを完全に手動で管理します。

1.11.3. Operator のアップグレード

Service Mesh に最新のセキュリティー修正、バグ修正、およびソフトウェア更新プログラムを適用し続けるには、Operator を最新の状態に保つ必要があります。パッチの更新は、Operator をアップグレードすることで開始されます。

重要

Operator のバージョンは、お使いのサービスメッシュのバージョンを 判別しません。デプロイされた Service Mesh コントロールプレーンのバージョンによって、Service Mesh のバージョンが決まります。

Red Hat OpenShift Service Mesh Operator は Service Mesh コントロールプレーンの複数のバージョンをサポートするため、Red Hat OpenShift Service Mesh Operator を更新しても、デプロイされた ServiceMeshControlPlanespec.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 が更新されるタイミングと方法が決まります。

表1.4 更新チャネルおよび承認ストラテジーのインタラクション

 バージョン付けされたチャネル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 分散トレースプラットフォーム Operator をアップグレードすると、OLM 調整プロセスがクラスターをスキャンし、管理対象インスタンスを新しい Operator のバージョンにアップグレードします。たとえば、Red Hat OpenShift 分散トレースプラットフォーム Operator をバージョン 1.30.2 からバージョン 1.34.1 に更新する場合、Operator は分散トレースプラットフォームの実行中のインスタンスをスキャンし、それらも 1.34.1 にアップグレードします。

Red Hat OpenShift Service Mesh の特定のパッチバージョンにとどまるには、自動更新を無効にして、Operator のその特定のバージョンにとどまる必要があります。

Operator のアップグレードに関する詳細は、Operator Lifecycle Manager ドキュメントを参照してください。

1.11.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 に直接更新することはできません。

サービスメッシュコントロールプレーンをアップグレードすると、Operator が管理するすべてのリソース (ゲートウェイなど) もアップグレードされます。

複数のバージョンのコントロールプレーンを同じクラスターにデプロイできますが、Red Hat OpenShift Service Mesh は、サービスメッシュのカナリアアップグレードをサポートしていません。つまり、spec.version の値が異なるさまざまな SCMP リソースを使用できますが、同じメッシュを管理することはできません。

エクステンションの移行に関する詳細は、ServiceMeshExtension から WasmPlugin リソースへの移行 を参照してください。

1.11.4.1. バージョン 2.2 から 2.3 へのアップグレードに伴う変更

Service Mesh コントロールプレーンをバージョン 2.2 から 2.3 にアップグレードすると、次の動作変更が導入されます。

  • このリリースでは、WasmPlugin API を使用する必要があります。2.2 で非推奨化された ServiceMeshExtension API のサポートが廃止されました。ServiceMeshExtension API の使用中にアップグレードを試みると、アップグレードは失敗します。

1.11.4.2. バージョン 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 が廃止されました。

1.11.4.3. バージョン 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.3

動作上の変更

  • AuthorizationPolicy の更新

    • PROXY プロトコルでは、ipBlocks および notIpBlocks を使用してリモート IP アドレスを指定する場合は、代わりに remoteIpBlocks および notRemoteIpBlocks を使用するように設定を更新します。
    • ネストされた JSON Web Token(JWT) 要求のサポートが追加されました。
  • EnvoyFilter の重大な変更

    • typed_config を使用する必要があります。
    • Xds v2 はサポート対象外になりました。
    • フィルター名が非推奨になりました。
  • 以前のバージョンのプロキシーは、新しいプロキシーから 1xx または 204 ステータスコードを受信すると、503 ステータスコードを報告する場合があります。

1.11.4.4. 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 がある。

手順

  1. ServiceMeshControlPlane リソースが含まれるプロジェクトに切り替えます。この例では、istio-system が Service Mesh コントロールプレーンプロジェクトの名前です。

    $ oc project istio-system
  2. v2 ServiceMeshControlPlane リソース設定をチェックし、これが有効であることを確認します。

    1. 以下のコマンドを実行して、ServiceMeshControlPlane リソースを v2 リソースとして表示します。

      $ oc get smcp -o yaml
      ヒント

      Service Mesh コントロールプレーン設定をバックアップします。

  3. .spec.version フィールドを更新し、設定を適用します。

    以下に例を示します。

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
    spec:
      version: v2.3

    または、コマンドラインの代わりに Web コンソールを使用して Service Mesh コントロールプレーンを編集することもできます。OpenShift Container Platform Web コンソールで、Project をクリックし、入力したプロジェクト名を選択します。

    1. OperatorsInstalled Operators をクリックします。
    2. ServiceMeshControlPlane インスタンスを見つけます。
    3. YAML view を選択し、直前の例のように YAML ファイルのテキストを更新します。
    4. Save をクリックします。

1.11.4.5. 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 で機能を使用するために実行する必要のある手順があります。
1.11.4.5.1. Red Hat OpenShift Service Mesh のアップグレード

Red Hat OpenShift Service Mesh をアップグレードするには、新規の namespace に Red Hat OpenShift Service Mesh ServiceMeshControlPlane 2.0 リソースのインスタンスを作成する必要があります。次に、設定後にマイクロサービスアプリケーションおよびワークロードを古いメッシュから新規のサービスメッシュに移動します。

手順

  1. v1 ServiceMeshControlPlane リソース設定をチェックし、これが有効であることを確認します。

    1. 以下のコマンドを実行して、ServiceMeshControlPlane リソースを v2 リソースとして表示します。

      $ oc get smcp -o yaml
    2. 無効なフィールドについての情報は、出力の spec.techPreview.errored.message フィールドを確認してください。
    3. v1 リソースに無効なフィールドがある場合、リソースは調整されず、v2 リソースとして編集することはできません。v2 フィールドへの更新はすべて、元の v1 設定で上書きされます。無効なフィールドを修正するには、リソースの v1 バージョンを置き換えるか、パッチを適用するか、または編集できます。リソースを修正せずに削除することもできます。リソースの修正後に調整でき、リソースの v2 バージョンを変更または表示できます。
    4. ファイルを編集してリソースを修正するには、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
    5. パッチを使用してリソースを修正するには、oc patch を使用します。

      $ oc patch smcp.v1.maistra.io <smcp_name> --type json --patch '[{"op": "replace","path":"/spec/path/to/bad/setting","value":"corrected-value"}]'
    6. コマンドラインツールで編集してリソースを修正するには、oc edit を使用します。

      $ oc edit smcp.v1.maistra.io <smcp_name>
  2. Service Mesh コントロールプレーン設定をバックアップします。ServiceMeshControlPlane リソースが含まれるプロジェクトに切り替えます。この例では、istio-system が Service Mesh コントロールプレーンプロジェクトの名前です。

    $ oc project istio-system
  3. 以下のコマンドを実行して、現在の設定を取得します。<smcp_name> は ServiceMeshControlPlane リソースのメタデータに指定されます (例: basic-install または full-install)。

    $ oc get servicemeshcontrolplanes.v1.maistra.io <smcp_name> -o yaml > <smcp_name>.v1.yaml
  4. ServiceMeshControlPlane を、開始点としての設定についての情報が含まれる v2 のコントロールプレーンバージョンに変換します。

    $ oc get smcp <smcp_name> -o yaml > <smcp_name>.v2.yaml
  5. プロジェクトを作成します。OpenShift Container Platform コンソールの Project メニューで、New Project をクリックし、プロジェクトの名前 (例: istio-system-upgrade) を入力します。または、CLI からこのコマンドを実行できます。

    $ oc new-project istio-system-upgrade
  6. v2 ServiceMeshControlPlanemetadata.namespace フィールドを新規のプロジェクト名で更新します。この例では、istio-system-upgrade を使用します。
  7. version フィールドを 1.1 から 2.0 に更新するか、または v2 ServiceMeshControlPlane でこれを削除します。
  8. 新規 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 をクリックします。次に、入力したプロジェクト名を選択します。

    1. OperatorsInstalled Operators をクリックします。
    2. Create ServiceMeshControlPlane をクリックします。
    3. YAML view を選択し、取得した YAML ファイルのテキストをフィールドに貼り付けます。apiVersion フィールドが maistra.io/v2 に設定されていることを確認し、metadata.namespace フィールドを新規 namespace (例: istio-system-upgrade) を使用するように変更します。
    4. Create をクリックします。
1.11.4.5.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 インストールに使用する必要があります。

1.11.4.5.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 で生成されました。

1.11.4.5.2.2. アノテーションの変更

v2.0 では、以下のアノテーションに対応しなくなりました。これらのアノテーションのいずれかを使用している場合は、これを v2.0 Service Mesh コントロールプレーンに移行する前にワークロードを更新する必要があります。

  • sidecar.maistra.io/proxyCPULimitsidecar.istio.io/proxyCPULimit に置き換えられました。ワークロードで sidecar.maistra.io アノテーションを使用していた場合は、代わりに sidecar.istio.io を使用するようにこれらのワークロードを変更する必要があります。
  • sidecar.maistra.io/proxyMemoryLimitsidecar.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 コントロールプレーンのワークロードで利用不可になります。
1.11.4.5.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 またはポリシーの接続を設定する場合にのみ使用されます。
1.11.4.5.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.actionALLOW に設定されます。

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.modeOFF に設定されている場合、AuthorizationPolicy が要求に適用されない限り、デフォルトのポリシーが ALLOW であるためリソースは必要ありません。
  • spec.mode が ON に設定されている場合、spec: {} を設定します。メッシュ内のすべてのサービスに対して AuthorizationPolicy ポリシーを作成する必要があります。
  • spec.modeON_WITH_INCLUSION に設定されている場合、 spec: {} が組み込まれている各 namespace に指定された状態で AuthorizationPolicy を作成する必要があります。AuthorizationPolicy では、個別のサービスを含めることはサポートされません。ただし、サービスのワークロードに適用される AuthorizationPolicy が作成されるとすぐに、明示的に許可されない他のすべての要求は拒否されます。
  • spec.modeON_WITH_EXCLUSION に設定されている場合、これは AuthorizationPolicy によってサポートされません。グローバル DENY ポリシーを作成できますが、namespace またはワークロードのいずれかに適用できる allow-all ポリシーがないため、メッシュ内のすべてのワークロードに対して AuthorizationPolicy を作成する必要があります。

AuthorizationPolicy には、ServiceRoleBinding が提供する機能と同様の、設定が適用されるセレクターと、ServiceRole が提供する機能と同様の、適用する必要のあるルールの両方の設定が含まれます。

ServiceMeshRbacConfig (maistra.io/v1)

このリソースは、Service Mesh コントロールプレーンの namespace で security.istio.io/v1beta1 AuthorizationPolicy リソースを使用して置き換えられます。このポリシーは、メッシュ内のすべてのワークロードに適用されるデフォルトの認証ポリシーになります。特定の移行の詳細については、上記の RbacConfig を参照してください。

1.11.4.5.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 では利用できません。

1.11.4.5.2.6. 相互 TLS の変更

ワークロード固有の PeerAuthentication ポリシーで mTLS を使用する場合、ワークロードポリシーが namespace/グローバルポリシーと異なる場合にトラフィックを許可するために、対応する DestinationRule が必要になります。

自動 mTLS はデフォルトで有効にされますが、spec.security.dataPlane.automtlsServiceMeshControlPlane リソースで false に設定して無効にできます。auto mTLS を無効にする場合、サービス間の適切な通信のために DestinationRules が必要になる場合があります。たとえば、1 つの namespace について PeerAuthentication を STRICT に設定すると、DestinationRule が namespace のサービスに TLS モードを設定しない限り、他の namespace のサービスがそれらにアクセスできなくなります。

mTLS について詳細は、相互トランスポート層セキュリティー (mTLS) の有効化 を参照してください。

1.11.4.5.2.6.1. その他の mTLS の例

bookinfo サンプルアプリケーションで mTLS For productpage サービスを無効にするために、Policy リソースは Red Hat OpenShift Service Mesh v1.1 に対して以下の方法で設定されました。

Policy リソースの例

apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: productpage-mTLS-disable
  namespace: <namespace>
spec:
  targets:
  - name: productpage

bookinfo サンプルアプリケーションで 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

bookinfo サンプルアプリケーションで 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

bookinfo サンプルアプリケーションの 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

1.11.4.5.3. 設定レシピ

これらの設定レシピを使用して、以下の項目を設定することができます。

1.11.4.5.3.1. データプレーンでの相互 TLS

データプレーン通信の相互 TLS は、ServiceMeshControlPlane リソースの spec.security.dataPlane.mtls で設定されます。これはデフォルトは false になります。

1.11.4.5.3.2. カスタム署名キー

Istiod は、サービスプロキシーによって使用されるクライアント証明書とプライベートキーを管理します。デフォルトで、Istiod は署名用に自己署名証明書を使用しますが、カスタム証明書とシークレットキーを設定できます。署名するキーの設定方法についての詳細は、外部認証局キーおよび証明書の追加 を参照してください。

1.11.4.5.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 インストールを完全にカスタマイズします。

1.11.4.5.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 インストールを完全にカスタマイズします。

1.11.4.5.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

mixer.policy

istio-policy コンテナー

v2.0

mixer.telemetry

istio-telemetry コンテナー

v2.0

global.ouathproxy

各種アドオンと共に使用する oauth-proxy コンテナー

v1.0/1.1/2.0

sidecarInjectorWebhook

サイドカーインジェクター Webhook コンテナー

v1.0/1.1

tracing.jaeger

一般的な Jaeger コンテナー: すべての設定が適用されない可能性があります。Jaeger インストールの完全なカスタマイズは、既存の Jaeger リソースを Service Mesh コントロールプレーンの設定に指定することでサポートされます。

v1.0/1.1/2.0

tracing.jaeger.agent

Jaeger エージェントに固有の設定

v1.0/1.1/2.0

tracing.jaeger.allInOne

Jaeger allInOne に固有の設定

v1.0/1.1/2.0

tracing.jaeger.collector

Jaeger コレクターに固有の設定

v1.0/1.1/2.0

tracing.jaeger.elasticsearch

Jaeger elasticsearch デプロイメントに固有の設定

v1.0/1.1/2.0

tracing.jaeger.query

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

wasmExtensions.cacher

WASM 拡張キャッシュコンテナー

V2.0: テクノロジープレビュー

コンポーネントによっては、リソースの制限およびスケジューリングをサポートするものもあります。詳細は、パフォーマンスおよびスケーラビリティー を参照してください。

1.11.4.5.4. アプリケーションとワークロードを移行するための次の手順

アプリケーションのワークロードを新規のメッシュに移動し、古いインスタンスを削除してアップグレードを完了します。

1.11.5. データプレーンのアップグレード

コントロールプレーンをアップグレードした後も、データプレーンは引き続き機能します。ただし、Envoy プロキシーに更新を適用し、プロキシー設定に変更を適用するには、アプリケーション Pod とワークロードを再起動する必要があります。

1.11.5.1. アプリケーションおよびワークロードの更新

移行を完了するには、メッシュ内のすべてのアプリケーション Pod を再起動して、Envoy サイドカープロキシーおよびそれらの設定をアップグレードします。

デプロイメントのローリング更新を実行するには、以下のコマンドを使用します。

$ oc rollout restart <deployment>

メッシュを設定するすべてのアプリケーションに対してローリング更新を実行する必要があります。