3.3. サイドカーインジェクションの有効化
サイドカーインジェクションを設定するためのさまざまなアプローチを示すために、次の手順では Bookinfo アプリケーションを使用します。
前提条件
-
Red Hat OpenShift Service Mesh Operator をインストールし、
Istioリソースを作成し、Operator によって Istio がデプロイされている。 -
IstioCNIリソースが作成され、Operator によって必要なIstioCNIPod がデプロイされている。 - メッシュの一部となる namespace を作成し、これらが Istio コントロールプレーンによって検出可能となっている。
-
オプション: メッシュに含めるワークロードをデプロイしている。次の例では、Bookinfo は
infonamespace にデプロイされていますが、サイドカーインジェクション (手順 5) は設定されていません。詳細は、「Bookinfo アプリケーションのデプロイ」を参照してください。
3.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インジェクションラベルを
infonamespace に適用するには、CLI で次のコマンドを実行します。$ oc label namespace info istio-injection=enabled namespace/info labeledサイドカーインジェクションが適用されていることを確認するには、
infonamespace に既存のワークロードを再デプロイします。すべてのワークロードのローリング更新を実行するには、次のコマンドを使用します。$ 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 55s
3.3.2. メッシュからワークロードを除外する リンクのコピーリンクがクリップボードにコピーされました!
すべてのワークロードに対してインジェクションが有効になっている namespace 内で、特定のワークロードをサイドカーインジェクションから除外できます。
この例はデモンストレーションのみを目的としています。info アプリケーションが適切に機能するには、すべてのワークロードがメッシュの一部である必要があります。
手順
-
アプリケーションの
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
3.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リソースの最上位レベルの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- メッシュに追加する他のワークロードで繰り返します。