1.10. サイドカーコンテナーの挿入の有効化

サービスが含まれる namespace をメッシュに追加したら、次の手順は、アプリケーションのデプロイメントリソースでサイドカーの自動挿入を有効にします。デプロイメントごとにサイドカーコンテナーの自動挿入を有効にする必要があります。

Bookinfo サンプルアプリケーションをインストールした場合は、アプリケーションがデプロイされ、インストール手順の一部としてサイドカーが注入されています。独自のプロジェクトおよびサービスを使用している場合は、アプリケーションを OpenShift Container Platform にデプロイします。詳細は、OpenShift Container Platform のドキュメント Understanding Deployment and DeploymentConfig objects を参照してください。

1.10.1. 前提条件

1.10.2. サイドカーコンテナーの自動挿入の有効化

アプリケーションをデプロイする場合は、deployment オブジェクトで spec.template.metadata.annotations のアノテーション sidecar.istio.io/injecttrue に設定して、インジェクションをオプトインする必要があります。オプトインにより、サイドカーの挿入が OpenShift Container Platform エコシステム内の複数のフレームワークが使用する、ビルダー Pod などの他の OpenShift Container Platform 機能に干渉しないようにします。

前提条件

  • サービスメッシュの一部である namespace と、サイドカーの自動注入が必要なデプロイメントを特定しておく。

手順

  1. デプロイメントを見つけるには、oc get コマンドを使用します。

    $ oc get deployment -n <namespace>

    たとえば、bookinfo namespaxce の ratings-v1 マイクロサービスのデプロイメントファイルを表示するには、次のコマンドを使用して YAML 形式でリソースを表示します。

    oc get deployment -n bookinfo ratings-v1 -o yaml
  2. エディターでアプリケーションのデプロイメント設定の YAML ファイルを開きます。
  3. 次の例に示すように、spec.template.metadata.annotations.sidecar.istio/inject を Deployment YAML に追加し、sidecar.istio.io/injecttrue に設定します。

    bookinfo deployment-ratings-v1.yaml のスニペットの例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      namespace: bookinfo
      labels:
        app: ratings
        version: v1
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: 'true'

  4. デプロイメント設定ファイルを保存します。
  5. ファイルをアプリケーションが含まれるプロジェクトに追加し直します。

    $ oc apply -n <namespace> -f deployment.yaml

    この例では、bookinforatings-v1 アプリを含むプロジェクトの名前であり、deployment-ratings-v1.yaml は編集したファイルです。

    $ oc apply -n bookinfo -f deployment-ratings-v1.yaml
  6. リソースが正常にアップロードされたことを確認するには、以下のコマンドを実行します。

    $ oc get deployment -n <namespace> <deploymentName> -o yaml

    以下に例を示します。

    $ oc get deployment -n bookinfo ratings-v1 -o yaml

1.10.3. サイドカーインジェクションの検証

Kiali コンソールは、アプリケーション、サービス、ワークロードにサイドカープロキシーがあるかどうかを検証するためのいくつかの方法を提供します。

図1.3 サイドカーバッジがない

グラフ ページには、次のグラフに サイドカー がないことを示すノードバッジが表示されます。

  • App graph
  • Versioned app graph
  • Workload graph

図1.4 サイドカーアイコンがない

Missing Sidecar icon

アプリケーション ページでは、サイドカーがない namespace 内のアプリケーションの 詳細 列に Missing Sidecar アイコンが表示されます。

ワークロード ページでは、サイドカーがない namespace 内のアプリケーションの 詳細 列に Missing Sidecar アイコンが表示されます。

サービス ページでは、サイドカーがない namespace 内のアプリケーションの 詳細 列に Missing Sidecar アイコンが表示されます。サービスのバージョンが複数ある場合は、サービスの詳細 ページを使用して、Missing Sidecar アイコンを表示します。

ワークロードの詳細 ページには、アプリケーションログとプロキシーログを表示および相互に関連付けることができる特別な統合 Logs タブがあります。Envoy ログは、アプリケーションワークロードのサイドカーインジェクションを検証する別の方法として表示できます。

ワークロードの詳細 ページには、Envoy プロキシーであるか、Envoy プロキシーが注入されたワークロード用の Envoy タブもあります。このタブには、クラスターリスナールートブートストラップ設定、および メトリック のサブタブなど、組み込みの Envoy ダッシュボードが表示されます。

Envoy アクセスログを有効にする方法については、トラブルシューティング のセクションを参照してください。

Envoy ログの表示については、Kiali コンソールでのログの表示 を参照してください。

1.10.4. アノテーションによるプロキシー環境変数の設定

Envoy サイドカープロキシーの設定は、ServiceMeshControlPlane によって管理されます。

デプロイメントの Pod アノテーションを injection-template.yaml ファイルに追加することにより、アプリケーションのサイドカープロキシーで環境変数を設定できます。環境変数がサイドカーコンテナーに挿入されます。

injection-template.yaml の例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: resource
spec:
  replicas: 7
  selector:
    matchLabels:
      app: resource
  template:
    metadata:
      annotations:
        sidecar.maistra.io/proxyEnv: "{ \"maistra_test_env\": \"env_value\", \"maistra_test_env_2\": \"env_value_2\" }"

警告

独自のカスタムリソースを作成するときは、maistra.io/ ラベルとアノテーションを含めないでください。これらのラベルとアノテーションは、リソースが Operator によって生成および管理されていることを示しています。独自のリソースの作成時に Operator が生成したリソースからコンテンツをコピーする場合は、maistra.io/ で始まるラベルやアノテーションを含めないでください。これらのラベルまたはアノテーションを含むリソースは、次回の調整時に Operator によって上書きまたは削除されます。

1.10.5. サイドカープロキシーの更新

サイドカープロキシーの設定を更新するには、アプリケーション管理者はアプリケーション Pod を再起動する必要があります。

デプロイメントで自動のサイドカーコンテナー挿入を使用する場合、アノテーションを追加または変更してデプロイメントの Pod テンプレートを更新することができます。以下のコマンドを実行して Pod を再デプロイします。

$ oc patch deployment/<deployment> -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt": "'`date -Iseconds`'"}}}}}'

デプロイメントで自動のサイドカーコンテナー挿入を使用しない場合、デプロイメントまたは Pod で指定されたサイドカーコンテナーイメージを変更して Pod を再起動し、サイドカーコンテナーを手動で更新する必要があります。

1.10.6. 次のステップ

ご使用の環境用に Red Hat OpenShift Service Mesh 機能を設定します。