1.10. サイドカーコンテナーの挿入の有効化
サービスが含まれる namespace をメッシュに追加したら、次の手順は、アプリケーションのデプロイメントリソースでサイドカーの自動挿入を有効にします。デプロイメントごとにサイドカーコンテナーの自動挿入を有効にする必要があります。
Bookinfo サンプルアプリケーションをインストールした場合は、アプリケーションがデプロイされ、インストール手順の一部としてサイドカーが注入されています。独自のプロジェクトおよびサービスを使用している場合は、アプリケーションを OpenShift Container Platform にデプロイします。詳細は、OpenShift Container Platform のドキュメント Understanding Deployment and DeploymentConfig objects を参照してください。
1.10.1. 前提条件
- メッシュにデプロイされたサービス(Bookinfo サンプルアプリケーションなど)。
- デプロイメントリソースファイル。
1.10.2. サイドカーコンテナーの自動挿入の有効化
アプリケーションをデプロイする場合は、deployment
オブジェクトで spec.template.metadata.annotations
のアノテーション sidecar.istio.io/inject
を true
に設定して、インジェクションをオプトインする必要があります。オプトインにより、サイドカーの挿入が OpenShift Container Platform エコシステム内の複数のフレームワークが使用する、ビルダー Pod などの他の OpenShift Container Platform 機能に干渉しないようにします。
前提条件
- サービスメッシュの一部である namespace と、サイドカーの自動注入が必要なデプロイメントを特定しておく。
手順
デプロイメントを見つけるには、
oc get
コマンドを使用します。$ oc get deployment -n <namespace>
たとえば、
bookinfo
namespaxce の ratings-v1 マイクロサービスのデプロイメントファイルを表示するには、次のコマンドを使用して YAML 形式でリソースを表示します。oc get deployment -n bookinfo ratings-v1 -o yaml
- エディターでアプリケーションのデプロイメント設定の YAML ファイルを開きます。
次の例に示すように、
spec.template.metadata.annotations.sidecar.istio/inject
を Deployment YAML に追加し、sidecar.istio.io/inject
をtrue
に設定します。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'
- デプロイメント設定ファイルを保存します。
ファイルをアプリケーションが含まれるプロジェクトに追加し直します。
$ oc apply -n <namespace> -f deployment.yaml
この例では、
bookinfo
はratings-v1
アプリを含むプロジェクトの名前であり、deployment-ratings-v1.yaml
は編集したファイルです。$ oc apply -n bookinfo -f deployment-ratings-v1.yaml
リソースが正常にアップロードされたことを確認するには、以下のコマンドを実行します。
$ 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 サイドカーアイコンがない
アプリケーション ページでは、サイドカーがない 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 機能を設定します。