Service Mesh (ASM) には、新しい Pod にサイドカープロキシを自動的に追加するサイドカーインジェクターが含まれています。インジェクションポリシーを設定することで、どの Pod がサイドカーを受け取るかを制御し、リソースをより効率的に使用し、管理を簡素化できます。また、クラスターのサイズと負荷に合わせて、インジェクターのリソース構成を調整することもできます。
前提条件
ASM インスタンスにクラスターを追加しました。
自動インジェクションポリシーの設定
名前空間のラベル、または Pod のラベルとアノテーションを使用して、どの Pod がサイドカーを受け取るかを制御できます。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、対象の ASM インスタンス名をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Sidecar Proxy injection ページの Injection strategy configuration management セクションで、自動インジェクションポリシーを設定します。
サイドカーは、Pod が The labels of the pod's namespace must meet the conditions. と The pod's own labels/annotations must meet the conditions. の両方の条件に一致する場合にのみ、自動的にインジェクトされます。
一致条件
説明
The labels of the pod's namespace must meet the conditions.
Pod の名前空間のラベルに関する条件です。
-
Include istio-injection: enabled:Pod の名前空間に istio-injection: enabled ラベルが含まれている場合、その Pod は自動インジェクションの対象となります。
-
Pod の名前空間に istio-injection: disabled ラベルがない場合、サイドカーがインジェクトされます。
The pod's own labels/annotations must meet the conditions.
Pod のラベルまたはアノテーションに関する条件です。
-
Pod に sidecar.istio.io/inject: "false" ラベルまたはアノテーションがない場合、サイドカーがインジェクトされます。
-
Include sidecar.istio.io/inject: "true" or Selected by AlwaysInjectSelector:Pod に sidecar.istio.io/inject: "true" ラベルまたはアノテーションが含まれている場合、その Pod は自動インジェクションの基準を満たします。
説明-
v1.12 より前の ASM インスタンスでは、自動インジェクションは Pod アノテーションのマッチングによってのみサポートされます。
-
v1.12 以降の ASM インスタンスでは、自動インジェクションは Pod ラベルと Pod アノテーションの両方のマッチングによってサポートされます。
ラベルはアノテーションよりも優先されます。例えば、Pod に sidecar.istio.io/inject: "true" ラベルと sidecar.istio.io/inject: "false" アノテーションの両方がある場合、Pod は sidecar.istio.io/inject: "true" ラベルを持つと見なされます。
-
説明名前空間に istio-injection: disabled ラベルがある場合、または Pod に sidecar.istio.io/inject: false ラベルがある場合を除きインジェクトするポリシーを設定すると、ASM はシステムコンポーネントを保護するために kube-system 名前空間に自動的に istio-injection: disabled ラベルを追加します。
-
-
(任意) Injection strategy configuration management セクションの下にある Show Advanced Settings をクリックして、高度なオプションを設定します。
パラメーター
説明
The label selector which selector pods to be injected istio-proxy (AlwaysInjectSelector)
設定可能な Pod ラベルセレクターです。このセレクターに一致する Pod は、sidecar.istio.io/inject:"true" ラベルまたはアノテーションが付与されているかのように、常にインジェクトされます。
The label selector which selector pods which will never be injected (NeverInjectSelector)
設定可能な Pod ラベルセレクターです。このセレクターに一致する Pod は、sidecar.istio.io/inject:"false" ラベルまたはアノテーションが付与されているかのように、決してインジェクトされません。
説明AlwaysInjectSelector と NeverInjectSelector はどちらも Pod ラベルセレクターであり、同じ方法で設定されます。各セレクターは、複数のラベル選択式を持つことができ、1行に1つの式を記述します。Pod のラベルがいずれかの式に一致する場合、その Pod は選択されます。
各ラベル選択式は、3つの部分で構成されます。
-
キー:一致させる Pod ラベルのキー。
-
オペレーター:一致演算子。以下の4つのオペレーターが利用可能です。
-
In:Pod のラベルの値が指定された値のセットに含まれている場合に一致します。
-
NotIn:Pod のラベルの値が指定された値のセットに含まれていない場合に一致します。
-
Exists:Pod が指定されたキーを持つラベルを持っている場合に一致します。
-
DoesNotExist:Pod が指定されたキーを持つラベルを持っていない場合に一致します。
-
-
値:In または NotIn オペレーターを使用する際に照合する値のセット。
-
-
ページ下部の Update Settings をクリックします。
サイドカーインジェクターの設定
サイドカーインジェクターは、データプレーンの Kubernetes クラスターにデプロイされる admission webhook サービスです。サイドカープロキシを自動的にインジェクトするものであり、それ自体はサイドカープロキシではありません。サイドカーインジェクターのサービスとワークロードは、Kubernetes クラスターの istio-system 名前空間にデプロイされ、その名前は istio-sidecar-injector で始まります。多数の Pod を同時にインジェクトする際の可用性を確保するために、サイドカーインジェクターコンポーネントのリソース設定とレプリカ数を調整できます。サイドカーインジェクターの admission webhook サービスに対するメトリック監視とアラートルールは、「Container Service のアラート管理」および「kube-apiserver コンポーネントの監視メトリック」を参照して設定してください。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、対象の ASM インスタンス名をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Sidecar Proxy injection ページの Injection service セクションでサイドカーインジェクターを設定し、ページ下部の Update Settings をクリックします。
パラメーター
説明
サイドカーエージェントインジェクションサービスのリソース設定
サイドカーインジェクターコンテナの Limits on Resources と Required Resources を設定します。
-
Limits on Resources:サイドカーインジェクターコンテナの CPU とメモリのリソース制限を設定します。CPU リソース制限の単位はコア、メモリリソース制限の単位は MiB です。
-
Required Resources:サイドカーインジェクターコンテナの CPU とメモリのリソースリクエストを設定します。CPU リソースリクエストの単位はコア、メモリリソースリクエストの単位は MiB です。
pod replicas
サイドカーインジェクターのレプリカ数。
説明サイドカーインジェクターのレプリカ数を増やすと、多数の Pod を同時にインジェクトする際のサイドカーインジェクションサービスの可用性が向上します。高可用性を実現するには、レプリカ数を 2 以上に設定してください。
Rewrite App Probe
インジェクション中に Pod のヘルスチェックを書き換えるかどうかを指定します。ヘルスチェックの書き換えを有効にする必要があるかどうかを判断するには、「サービスメッシュ内のアプリケーションのヘルスチェックリダイレクトを有効にする」をご参照ください。
Sidecar-injector NodeSelector
サイドカーインジェクター Pod がデプロイされる場所を制御するためのノードラベルを指定します。
[一致ラベルを追加] をクリックし、データプレーンクラスターのノードラベルの Name と Value を入力して、デプロイメントノードを指定します。
-
例1:特定の Pod のインジェクションを無効化
-
自動インジェクションポリシーを設定します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、対象の ASM インスタンス名をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Sidecar Proxy injection ページの Injection strategy configuration management セクションで、設定を構成します。
以下の設定では、istio-injection: enabled ラベルを持つ名前空間内のすべての Pod にサイドカーが自動的にインジェクトされます。ただし、Pod に sidecar.istio.io/inject: "false" ラベルまたはアノテーションがある場合を除きます。
パラメーター
説明
The labels of the pod's namespace must meet the conditions.
Include istio-injection: enabled を選択します。
The pod's own labels/annotations must meet the conditions.
Not Include sidecar.istio.io/inject: "false" or Selected by NeverInjectSelector を選択します。
-
-
グローバル名前空間を作成し、自動インジェクションを有効にします。
-
ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウから を選択します。表示されたページで [作成] をクリックします。
-
新しい名前空間 パネルで、名前空間の Name (例:test1) を入力します。Tag の横にある Add をクリックし、Name を istio-injection、Value を enabled に設定し、[OK] をクリックします。
-
ページ上部の 同期自動注入 をクリックして、グローバル名前空間をデータプレーンの Kubernetes クラスターに同期します。
-
-
アプリケーションを作成します。
-
データプレーンの Container Service for Kubernetes (ACK) クラスターの `test1` 名前空間に `details` アプリケーションをデプロイします。詳細については、「ASM インスタンスに関連付けられたクラスターにアプリケーションをデプロイする」をご参照ください。
-
アプリケーションの Pod にサイドカープロキシがインジェクトされているか確認します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
展開 ページの上部で、名前空間 を test1 に設定し、details アプリケーションの名前をクリックします。
ポッド タブで、`details-v1` Pod に2つのイメージ (Istio サイドカープロキシイメージ (
proxyv2) とアプリケーションイメージ (examples-bookinfo-details-v1)) が含まれていることが確認できます。ステータスが 実行中 であれば、サイドカーが正常にインジェクトされたことを示します。
-
-
Pod にラベルを追加して、自動インジェクションを無効にします。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
展開 ページの test1 名前空間で、`details` アプリケーションを見つけ、アクション 列の [その他] > [YAML の表示] をクリックします。
-
編集 ダイアログボックスで YAML 構成を変更し、更新 をクリックします。
-
ASM バージョン 1.12.4 以降:labels パラメーターに、キーが
sidecar.istio.io/inject、値が"false"のラベルをsidecar.istio.io/inject: 'false'として追加します。spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: details version: v1 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: sidecar.istio.io/inject: "false" app: details version: v1 -
ASM バージョン 1.12.4 未満:annotations パラメーターに、キーが
sidecar.istio.io/inject、値が"false"のアノテーションをsidecar.istio.io/inject: "false"として追加します。
-
-
`test1` 名前空間で自動インジェクションが有効なままで、`details` サービス Pod の自動インジェクションが無効になっていることを確認します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
展開 ページの上部で、名前空間 を test1 に設定し、`details` アプリケーションの名前をクリックします。
ポッド タブで、`details-v1` Pod が 実行中 の状態であり、
docker.io/istio/examples-bookinfo-details-v1:1.16.2イメージのみを含んでいることが確認できます。これにより、この Pod に Istio サイドカーがインジェクトされなかったことが確認できます。
例2:Pod ごとのインジェクション設定
名前空間全体ではなく、個々の Pod に対してインジェクションポリシーを設定できます。
-
自動インジェクションポリシーを設定します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、対象の ASM インスタンス名をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Injection strategy configuration management ページで、Injection strategy configuration management セクションの設定を行い、ページ下部の Update Settings をクリックします。
以下の設定では、istio-injection: disabled ラベルを持つ名前空間の Pod を除き、任意の名前空間で sidecar.istio.io/inject: "true" ラベルを持つ Pod にサイドカーが自動的にインジェクトされます。
パラメーター
説明
The labels of the pod's namespace must meet the conditions.
Not include istio-injection: disabled を選択します。
The pod's own labels/annotations must meet the conditions.
Include sidecar.istio.io/inject: "true" or Selected by AlwaysInjectSelector を選択します。
-
-
ACK クラスターに、ラベルなしで test2 という名前の名前空間を作成します。詳細については、「名前空間とクォータの管理」をご参照ください。
-
ACK クラスターの `test2` 名前空間に `reviews` アプリケーションを作成します。詳細については、「ASM インスタンスに関連付けられたクラスターにアプリケーションをデプロイする」をご参照ください。
-
Pod にラベルを追加して、自動インジェクションを有効にします。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
展開 ページの上部で、名前空間 を test2 に設定します。`reviews` サービスの行で、アクション 列の [その他] > [YAML の表示] をクリックします。
-
編集 ダイアログボックスで、labels パラメーターの下に
sidecar.istio.io/inject: "true"ラベルを追加し、[更新] をクリックします。説明ラベルを使用して自動 Pod インジェクションを設定するには、Service Mesh ASM のバージョンが 1.12.4 以降である必要があります。インスタンスのアップグレード方法の詳細については、「ASM インスタンスのアップグレード」をご参照ください。
spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: reviews version: v1 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: reviews sidecar.istio.io/inject: 'true' version: v1
-
Pod の自動インジェクションポリシーが正常に設定されたことを確認します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
展開 ページの上部で、名前空間 を test2 に設定し、`reviews` アプリケーションの名前をクリックします。
ポッド タブで、`reviews-v1` Pod のイメージリストに Istio サイドカープロキシイメージ (
proxyv2) とアプリケーションコンテナイメージ (examples-bookinfo-reviews-v1) の両方が含まれていることが確認できます。ステータスが 実行中 であれば、サイドカーが正常にインジェクトされたことを示します。
関連ドキュメント
-
インジェクションポリシーは新しく作成された Pod にのみ適用されます。ポリシーを有効にするには、実行中の Pod を再起動する必要があります。詳細については、「Pod の再起動」をご参照ください。
-
コントロールプレーンのアップグレード後も、Istio 対応アプリケーションが古いバージョンのサイドカープロキシを使用している場合は、「サイドカープロキシのアップグレード」を参照してアップグレードしてください。
-
サイドカープロキシのリソース消費、トラフィックインターセプションポリシー、DNS プロキシ、ライフサイクルを、グローバル、名前空間、ワークロード、Pod などのさまざまなレベルで設定できます。詳細については、「サイドカープロキシの設定」をご参照ください。