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 内のワークロードの大部分をメッシュに含める必要がある場合に最適なアプローチです。

手順

  1. 次のコマンドを使用して、Istio コントロールプレーンのリビジョン名を確認します。

    $ oc get istiorevisions

    次の例のような出力が表示されるはずです。

    出力例

    NAME      TYPE    READY   STATUS    IN USE   VERSION   AGE
    default   Local   True    Healthy   False    v1.23.0   4m57s

    リビジョン名はデフォルトなので、正確なリビジョン名を参照せずにデフォルトのインジェクションラベルを使用できます。

  2. 次のコマンドを使用して、目的の 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

  3. インジェクションラベルを info namespace に適用するには、CLI で次のコマンドを実行します。

    $ oc label namespace info istio-injection=enabled
    namespace/info labeled
  4. サイドカーインジェクションが適用されていることを確認するには、info namespace に既存のワークロードを再デプロイします。すべてのワークロードのローリング更新を実行するには、次のコマンドを使用します。

    $ oc -n info rollout restart deployments

検証

  1. 次のコマンドを実行して、新しい 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 内で、特定のワークロードをサイドカーインジェクションから除外できます。

注記

この例はデモンストレーションのみを目的としています。情報アプリケーションが適切に機能するには、すべてのワークロードがメッシュの一部である必要があります。

手順

  1. アプリケーションの Deployment リソースをエディターで開きます。この場合、ratings-v1 サービスを除外します。
  2. サイドカーインジェクションを無効にするには、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 が作成されます。

検証

  1. 次のコマンドを実行して、更新された 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 リソース名が必要です。

手順

  1. 次のコマンドを実行して、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 を使用します。

  2. 次のコマンドを実行して、すでに実行中のワークロードで 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

  3. アプリケーションの Deployment リソースをエディターで開きます。この場合は、ratings-v1 サービスを更新します。
  4. 適切な Pod インジェクションまたはリビジョンラベルを含めるように、Deploymentspec.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 が作成されます。

検証

  1. 次のコマンドを実行して、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

  2. メッシュに追加する他のワークロードで繰り返します。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.