2.11. サイドカーインジェクションの有効化
サービスが含まれる namespace をメッシュに追加したら、次のステップとして、アプリケーションの Deployment リソースで自動サイドカーインジェクションを有効にします。自動サイドカーインジェクションは、各デプロイメントに対して有効にする必要があります。
Bookinfo サンプルアプリケーションをインストールした場合は、アプリケーションがデプロイされ、インストール手順の一部としてサイドカーが注入されています。独自のプロジェクトおよびサービスを使用している場合は、アプリケーションを OpenShift Container Platform にデプロイします。
詳細は、OpenShift Container Platform のドキュメントの デプロイメントについて を参照してください。
Init Containers (Pod 内のアプリケーションコンテナーの前に実行される特殊なコンテナー) によって開始されたトラフィックは、デフォルトでサービスメッシュの外に移動できません。Init Container が実行する、メッシュ外のネットワークトラフィック接続の確立を必要とするアクションはすべて失敗します。
Init Container をサービスに接続する方法の詳細は Red Hat ナレッジベースソリューション initContainer in CrashLoopBackOff on pod with Service Mesh sidecar injected を参照してください。
2.11.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- メッシュにデプロイされたサービス (Bookinfo サンプルアプリケーションなど)。
- Deployment リソースファイル。
2.11.2. 自動サイドカーインジェクションの有効化 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションをデプロイする場合は、deployment
オブジェクトで spec.template.metadata.labels
の sidecar.istio.io/inject
ラベルを true
に設定して、インジェクションをオプトインする必要があります。オプトイン方式であるため、サイドカーインジェクションが、他の OpenShift Container Platform 機能 (OpenShift Container Platform エコシステム内の多数のフレームワークで使用されるビルダー Pod など) に干渉することはありません。
前提条件
- Service Mesh の一部である namespace と、自動サイドカーインジェクションが必要なデプロイメントを特定しておく。
手順
デプロイメントを見つけるには、
oc get
コマンドを使用します。oc get deployment -n <namespace>
$ oc get deployment -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
info
namespace の 'ratings-v1' マイクロサービスのDeployment
YAML ファイルを表示するには、次のコマンドを使用して YAML 形式でリソースを表示します。oc get deployment -n info ratings-v1 -o yaml
oc get deployment -n info ratings-v1 -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
エディターでアプリケーションの
Deployment
YAML ファイルを開きます。 次の例に示すように、
spec.template.metadata.labels.sidecar.istio/inject
を Deployment YAML ファイルに追加し、sidecar.istio.io/inject
をtrue
に設定します。info deployment-ratings-v1.yaml からのスニペットの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記自動サイドカーインジェクションを有効にするときに
annotations
パラメーターを使用することは非推奨となりました。代わりにlabels
パラメーターを使用してください。-
Deployment
YAML ファイルを保存します。 ファイルをアプリケーションが含まれるプロジェクトに追加し直します。
oc apply -n <namespace> -f deployment.yaml
$ oc apply -n <namespace> -f deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
info
はratings-v1
アプリを含むプロジェクトの名前であり、deployment-ratings-v1.yaml
は編集したファイルです。oc apply -n info -f deployment-ratings-v1.yaml
$ oc apply -n info -f deployment-ratings-v1.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リソースが正常にアップロードされたことを確認するには、以下のコマンドを実行します。
oc get deployment -n <namespace> <deploymentName> -o yaml
$ oc get deployment -n <namespace> <deploymentName> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc get deployment -n info ratings-v1 -o yaml
$ oc get deployment -n info ratings-v1 -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.11.3. サイドカーインジェクションの検証 リンクのコピーリンクがクリップボードにコピーされました!
Kiali コンソールは、アプリケーション、サービス、ワークロードにサイドカープロキシーがあるかどうかを検証するためのいくつかの方法を提供します。
図2.3 サイドカーバッジがない
グラフ ページには、次のグラフに サイドカー がないことを示すノードバッジが表示されます。
- App graph
- Versioned app graph
- Workload graph
図2.4 サイドカーアイコンがない
アプリケーション ページでは、サイドカーがない namespace 内のアプリケーションの 詳細 列に Missing Sidecar アイコンが表示されます。
ワークロード ページでは、サイドカーがない namespace 内のアプリケーションの 詳細 列に Missing Sidecar アイコンが表示されます。
サービス ページでは、サイドカーがない namespace 内のアプリケーションの 詳細 列に Missing Sidecar アイコンが表示されます。サービスのバージョンが複数ある場合は、サービスの詳細 ページを使用して、Missing Sidecar アイコンを表示します。
ワークロードの詳細 ページには、アプリケーションログとプロキシーログを表示および相互に関連付けることができる特別な統合 Logs タブがあります。Envoy ログは、アプリケーションワークロードのサイドカーインジェクションを検証する別の方法として表示できます。
ワークロードの詳細 ページには、Envoy プロキシーであるか、Envoy プロキシーが注入されたワークロード用の Envoy タブもあります。このタブには、Clusters、Listeners、Routes、Bootstrap、Config、および Metrics のサブタブなど、組み込みの Envoy ダッシュボードが表示されます。
Envoy アクセスログを有効にする方法は、トラブルシューティング のセクションを参照してください。
Envoy ログの表示は、Kiali コンソールでのログの表示 を参照してください。
2.11.4. アノテーションによるプロキシー環境変数の設定 リンクのコピーリンクがクリップボードにコピーされました!
Envoy サイドカープロキシーの設定は、ServiceMeshControlPlane
によって管理されます。
デプロイメントの Pod アノテーションを injection-template.yaml
ファイルに追加することにより、アプリケーションのサイドカープロキシーで環境変数を設定できます。環境変数がサイドカーコンテナーに注入されます。
injection-template.yaml の例
独自のカスタムリソースを作成するときは、maistra.io/
ラベルとアノテーションを含めないでください。これらのラベルとアノテーションは、リソースが Operator によって生成および管理されていることを示しています。独自のリソースの作成時に Operator が生成したリソースからコンテンツをコピーする場合は、maistra.io/
で始まるラベルやアノテーションを含めないでください。これらのラベルまたはアノテーションを含むリソースは、次回の調整時に Operator によって上書きまたは削除されます。
2.11.5. サイドカープロキシーの更新 リンクのコピーリンクがクリップボードにコピーされました!
サイドカープロキシーの設定を更新するには、アプリケーション管理者はアプリケーション Pod を再起動する必要があります。
デプロイメントで自動サイドカーインジェクションを使用する場合は、アノテーションを追加または変更することで、デプロイメント内の Pod テンプレートを更新できます。以下のコマンドを実行して Pod を再デプロイします。
oc patch deployment/<deployment> -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt": "'`date -Iseconds`'"}}}}}'
$ oc patch deployment/<deployment> -p '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt": "'`date -Iseconds`'"}}}}}'
デプロイメントで自動サイドカーインジェクションを使用しない場合は、デプロイメントまたは Pod で指定されたサイドカーコンテナーイメージを変更してサイドカーを手動で更新し、Pod を再起動する必要があります。
2.11.6. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
ご使用の環境用に Red Hat OpenShift Service Mesh 機能を設定します。