OpenShift Service Mesh 3.0 is a Technology Preview feature only
Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. This documentation is a work in progress and might not be complete or fully tested.2.3. サイドカーコンテナーの挿入の有効化
サイドカーインジェクションを設定するためのさまざまなアプローチを示すために、次の手順では Bookinfo アプリケーションを使用します。
前提条件
-
Red Hat OpenShift Service Mesh Operator をインストールし、
Istio
リソースを作成し、Operator によって Istio がデプロイされている。 -
IstioCNI
リソースが作成され、Operator によって必要なIstioCNI
Pod がデプロイされている。 - メッシュの一部となる namespace を作成し、これらが Istio コントロールプレーンによって検出可能となっている。
-
オプション: メッシュに含めるワークロードをデプロイしている。次の例では、Bookinfo は
info
namespace にデプロイされていますが、サイドカーインジェクション (手順 5) は設定されていません。
2.3.1. namespace ラベルによるサイドカーインジェクションの有効化
この例では、namespace 内のすべてのワークロードがサイドカープロキシーインジェクションを受け取ります。これは、namespace 内のワークロードの大部分をメッシュに含める必要がある場合に最適なアプローチです。
手順
次のコマンドを使用して、Istio コントロールプレーンのリビジョン名を確認します。
$ oc get istiorevisions
次の例のような出力が表示されるはずです。
出力例
NAME TYPE READY STATUS IN USE VERSION AGE default Local True Healthy False v1.23.0 4m57s
リビジョン名はデフォルトなので、正確なリビジョン名を参照せずにデフォルトのインジェクションラベルを使用できます。
次のコマンドを使用して、目的の namespace ですでに実行されているワークロードで
1/1
コンテナーがREADY
と表示されていることを確認します。これにより、Pod がサイドカーなしで実行されていることが確認されます。$ oc get pods -n info
次の例のような出力が表示されるはずです。
出力例
NAME READY STATUS RESTARTS AGE details-v1-65cfcf56f9-gm6v7 1/1 Running 0 4m55s productpage-v1-d5789fdfb-8x6bk 1/1 Running 0 4m53s ratings-v1-7c9bd4b87f-6v7hg 1/1 Running 0 4m55s reviews-v1-6584ddcf65-6wqtw 1/1 Running 0 4m54s reviews-v2-6f85cb9b7c-w9l8s 1/1 Running 0 4m54s reviews-v3-6f5b775685-mg5n6 1/1 Running 0 4m54s
インジェクションラベルを
info
namespace に適用するには、CLI で次のコマンドを実行します。$ oc label namespace info istio-injection=enabled namespace/info labeled
サイドカーインジェクションが適用されていることを確認するには、
info
namespace に既存のワークロードを再デプロイします。すべてのワークロードのローリング更新を実行するには、次のコマンドを使用します。$ oc -n info rollout restart deployments
検証
次のコマンドを実行して、新しい Pod に
2/2
コンテナーがREADY
と表示されていることを確認し、サイドカーインジェクションが成功したことを確認して、ロールアウトを検証します。$ oc get pods -n info
次の例のような出力が表示されるはずです。
出力例
NAME READY STATUS RESTARTS AGE details-v1-7745f84ff-bpf8f 2/2 Running 0 55s productpage-v1-54f48db985-gd5q9 2/2 Running 0 55s ratings-v1-5d645c985f-xsw7p 2/2 Running 0 55s reviews-v1-bd5f54b8c-zns4v 2/2 Running 0 55s reviews-v2-5d7b9dbf97-wbpjr 2/2 Running 0 55s reviews-v3-5fccc48c8c-bjktn 2/2 Running 0 55sz
2.3.2. メッシュからワークロードを除外する
すべてのワークロードに対してインジェクションが有効になっている namespace 内で、特定のワークロードをサイドカーインジェクションから除外できます。
この例はデモンストレーションのみを目的としています。情報アプリケーションが適切に機能するには、すべてのワークロードがメッシュの一部である必要があります。
手順
-
アプリケーションの
Deployment
リソースをエディターで開きます。この場合、ratings-v1
サービスを除外します。 サイドカーインジェクションを無効にするには、
Deployment
リソースのspec.template.metadata.labels
セクションを変更して、ラベルsidecar.istio.io/inject: false
を含めます。kind: Deployment apiVersion: apps/v1 metadata: name: ratings-v1 namespace: info labels: app: ratings version: v1 spec: template: metadata: labels: sidecar.istio.io/inject: 'false'
注記Deployment
の最上位レベルのlabels
セクションにラベルを追加しても、サイドカーインジェクションには影響しません。デプロイメントを更新するとロールアウトがトリガーされ、更新された Pod を含む新しい ReplicaSet が作成されます。
検証
次のコマンドを実行して、更新された Pod にサイドカーコンテナーが含まれておらず、
1/1
コンテナーがRunning
と表示されていることを確認します。$ oc get pods -n info
次の例のような出力が表示されるはずです。
出力例
NAME READY STATUS RESTARTS AGE details-v1-6bc7b69776-7f6wz 2/2 Running 0 29m productpage-v1-54f48db985-gd5q9 2/2 Running 0 29m ratings-v1-5d645c985f-xsw7p 1/1 Running 0 7s reviews-v1-bd5f54b8c-zns4v 2/2 Running 0 29m reviews-v2-5d7b9dbf97-wbpjr 2/2 Running 0 29m reviews-v3-5fccc48c8c-bjktn 2/2 Running 0 29m
2.3.3. Pod ラベルによるサイドカーインジェクションの有効化
このアプローチにより、namespace 内のすべてのワークロードに適用するのではなく、サイドカーインジェクションに個々のワークロードを含めることができるため、サービスメッシュの一部となる必要があるワークロードが少数であるシナリオに最適です。この例では、サイドカーインジェクションのリビジョンラベルの使用法も示しており、ここでは Istio
リソースは my-mesh
という名前で作成されます。同じクラスター内に複数の Istio コントロールプレーンが存在する場合、またはリビジョンベースのコントロールプレーンのアップグレード中は、一意の Istio
リソース名が必要です。
手順
次のコマンドを実行して、Istio コントロールプレーンのリビジョン名を確認します。
$ oc get istiorevisions
次の例のような出力が表示されるはずです。
出力例
NAME TYPE READY STATUS IN USE VERSION AGE my-mesh Local True Healthy False v1.23.0 47s
リビジョン名は
my-mesh
なので、サイドカーインジェクションを有効にするには、リビジョンラベルistio.io/rev=my-mesh
を使用します。次のコマンドを実行して、すでに実行中のワークロードで
1/1
コンテナーがREADY
と表示され、Pod がサイドカーなしで実行されていることを確認します。$ oc get pods -n info
次の例のような出力が表示されるはずです。
出力例
NAME READY STATUS RESTARTS AGE details-v1-65cfcf56f9-gm6v7 1/1 Running 0 4m55s productpage-v1-d5789fdfb-8x6bk 1/1 Running 0 4m53s ratings-v1-7c9bd4b87f-6v7hg 1/1 Running 0 4m55s reviews-v1-6584ddcf65-6wqtw 1/1 Running 0 4m54s reviews-v2-6f85cb9b7c-w9l8s 1/1 Running 0 4m54s reviews-v3-6f5b775685-mg5n6 1/1 Running 0 4m54s
-
アプリケーションの
Deployment
リソースをエディターで開きます。この場合は、ratings-v1
サービスを更新します。 適切な Pod インジェクションまたはリビジョンラベルを含めるように、
Deployment
のspec.template.metadata.labels
セクションを更新します。この場合、istio.io/rev: my-mesh
は以下のようになります。kind: Deployment apiVersion: apps/v1 metadata: name: ratings-v1 namespace: info labels: app: ratings version: v1 spec: template: metadata: labels: istio.io/rev: my-mesh
注記Deployment’s top-level `labels
セクションにラベルを追加しても、サイドカーインジェクションには影響しません。デプロイメントを更新するとロールアウトがトリガーされ、更新された Pod を含む新しい ReplicaSet が作成されます。
検証
次のコマンドを実行して、ratings-v1 Pod のみに
2/2
コンテナーがREADY
と表示されるようになり、サイドカーの正常なインジェクションを示すことを確認します。$ oc get pods -n info
次の例のような出力が表示されるはずです。
出力例
NAME READY STATUS RESTARTS AGE details-v1-559cd49f6c-b89hw 1/1 Running 0 42m productpage-v1-5f48cdcb85-8ppz5 1/1 Running 0 42m ratings-v1-848bf79888-krdch 2/2 Running 0 9s reviews-v1-6b7444ffbd-7m5wp 1/1 Running 0 42m reviews-v2-67876d7b7-9nmw5 1/1 Running 0 42m reviews-v3-84b55b667c-x5t8s 1/1 Running 0 42m
- メッシュに追加する他のワークロードで繰り返します。