Service Mesh (ASM) には、新しい Pod にサイドカープロキシを自動的にインジェクトするサイドカーインジェクターが含まれています。ラベルを使用してどの Pod にサイドカーが必要かを選択することで、特定のニーズに合わせてインジェクションポリシーを設定できます。これにより、リソースをより効率的に使用し、管理を簡素化できます。クラスターのサイズと負荷に基づいて、インジェクターのリソース構成を調整して、実行に十分なリソースを確保することもできます。
前提条件
ACK クラスターが ASM インスタンスに追加されていること。詳細については、「ASM インスタンスにクラスターを追加する」をご参照ください。
自動インジェクションポリシーの設定
Pod の名前空間のラベル、Pod のラベル、または Pod のアノテーションを使用して、サイドカーインジェクションの対象となる Pod を照合できます。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[インジェクションポリシー設定] ページの [インジェクションポリシー設定管理] セクションで、自動インジェクションポリシーを設定します。
サイドカーは、Pod が [Pod 名前空間ラベルの条件] と [Pod ラベル/アノテーションの条件] の両方に一致する場合にのみ、Pod に自動的にインジェクトされます。
照合条件
説明
Pod 名前空間ラベルの条件
Pod が存在する名前空間のラベルの照合条件。
Istio-injection: Enabled を含む: Pod の名前空間に istio-injection: enabled ラベルが含まれている場合、Pod は自動インジェクション条件を満たします。
Istio-injection: Disabled を含まない: Pod の名前空間に istio-injection: disabled ラベルが含まれていない場合、Pod は自動インジェクション条件を満たします。
Pod ラベル/アノテーションの条件
Pod 自体のラベルまたはアノテーションの照合条件。
Sidecar.istio.io/inject: "false" を含まない: Pod に sidecar.istio.io/inject: "false" ラベルまたはアノテーションがない場合、Pod は自動インジェクション条件を満たします。
Sidecar.istio.io/inject: "true" を含む: Pod に sidecar.istio.io/inject: "true" ラベルまたはアノテーションがある場合、Pod は自動インジェクション条件を満たします。
説明バージョン 1.12 より前の ASM インスタンスでは、自動インジェクションは Pod アノテーションの照合によってのみサポートされます。
バージョン 1.12 以降の ASM インスタンスでは、自動インジェクションは Pod ラベルとアノテーションの両方の照合によってサポートされます。
ラベルはアノテーションよりも照合の優先度が高くなります。たとえば、Pod に sidecar.istio.io/inject: "true" ラベルと sidecar.istio.io/inject: "false" アノテーションの両方がある場合、Pod は sidecar.istio.io/inject: "false" アノテーションではなく、sidecar.istio.io/inject: "true" ラベルでマークされます。
説明名前空間に [Istio-injection: Disabled] ラベルが含まれず、Pod に [Sidecar.istio.io/inject: False] ラベルが含まれないポリシーを設定すると、ASM は自動的に [Istio-injection: Disabled] ラベルを kube-system 名前空間に追加します。これにより、システムコンポーネントが影響を受けないようにします。
(オプション) [インジェクションポリシー設定管理] セクションの下にある [詳細オプションの表示] をクリックして、詳細オプションを設定します。
設定項目
説明
サイドカーインジェクション用の Pod ラベルセレクター (AlwaysInjectSelector)
AlwaysInjectSelector は設定可能な Pod ラベルセレクターです。AlwaysInjectSelector によって選択された Pod は、sidecar.istio.io/inject:"true" ラベルまたはアノテーションを持つものとして扱われます。
サイドカーインジェクションを防止するための Pod ラベルセレクター (NeverInjectSelector)
NeverInjectSelector は設定可能な Pod ラベルセレクターです。NeverInjectSelector によって選択された Pod は、sidecar.istio.io/inject:"false" ラベルまたはアノテーションを持つものとして扱われます。
説明AlwaysInjectSelector と NeverInjectSelector はどちらも Pod ラベルセレクターであり、同じ方法で設定されます。各セレクターは複数行を持つことができ、各行はラベル選択式です。Pod のラベルが式のいずれかに一致する場合、Pod が選択されます。
各ラベル選択式には 3 つの部分があります。
キー: 照合に使用される Pod のラベルのキー。
オペレーター: Pod ラベルを照合するために使用されるオペレーター。次の 4 つのオペレーターのいずれかを選択できます。
In: Pod のラベル値が指定された値のリストにある場合に式が一致します。
NotIn: Pod のラベル値が指定された値のリストにない場合に式が一致します。
Exists: 指定されたキーが Pod のラベルに存在する場合に式が一致します。
DoesNotExist: 指定されたキーが Pod のラベルに存在しない場合に式が一致します。
値: オペレーターに In または NotIn を選択した場合は、照合する値のリストを指定します。
ページの下部で、[設定の更新] をクリックします。
サイドカーインジェクターの設定
サイドカーインジェクターは、データプレーン Kubernetes クラスターにデプロイされるアドミッション Webhook サービスです。これはサイドカープロキシではなく、サイドカープロキシを自動的にインジェクトする役割を担います。サイドカーインジェクターのサービスとワークロードは、Kubernetes クラスターの istio-system 名前空間にデプロイされ、その名前は istio-sidecar-injector で始まります。多くの Pod が同時にインジェクトされる場合にその可用性を確保するために、サイドカーインジェクターコンポーネントのリソース設定とレプリカ数を調整できます。サイドカーインジェクターのアドミッション Webhook サービスに対して、モニタリングメトリックとアラートルールを設定することをお勧めします。詳細については、「コンテナサービスのアラート管理」および「kube-apiserver コンポーネントのメトリック」をご参照ください。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[インジェクションポリシー設定] ページの [サイドカーインジェクター設定管理] セクションで、サイドカーインジェクターを設定します。その後、ページの下部で [設定の更新] をクリックします。
設定項目
説明
サイドカーインジェクターのリソース構成
サイドカーインジェクターコンテナーの [リソース制限] と [必須リソース] を設定します。
リソース制限: サイドカーインジェクターコンテナーの CPU とメモリのリソース制限を設定します。CPU の単位はコア、メモリの単位は MiB です。
必須リソース: サイドカーインジェクターコンテナーが必要とする CPU とメモリのリソースを設定します。CPU の単位はコア、メモリの単位は MiB です。
Pod レプリカ数
サイドカーインジェクター Pod のレプリカ数を設定します。
説明レプリカ数を増やすと、多くの Pod が同時にインジェクトされる際のサイドカーインジェクションサービスの可用性が向上します。Pod のレプリカ数を 2 以上に設定することをお勧めします。
ヘルスチェックの再書き込み
インジェクション中に Pod のヘルスチェックを再書き込みするかどうかを指定します。ヘルスチェックの再書き込みを有効にするかどうかを判断するには、「サービスメッシュ内のアプリケーションのヘルスチェックリダイレクトを有効にする」をご参照ください。
サイドカーインジェクターのデプロイメントノード選択
ラベルを照合して、サイドカーインジェクター Pod がデプロイされるノードを選択します。
[一致ラベルの追加] をクリックし、データプレーンクラスターノードのラベルの [名前] と [値] を入力して、特定のデプロイメントノードを照合します。
例 1: 名前空間内の特定の Pod の自動インジェクションを無効にし、他の Pod では有効にする
自動インジェクションポリシーを設定します。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[インジェクションポリシー設定] ページの [インジェクションポリシー設定管理] セクションで、関連情報を設定します。
次の設定は、istio-injection: enabled ラベルを持つ名前空間内のすべての Pod にサイドカープロキシが自動的にインジェクトされることを示しますが、Pod に sidecar.istio.io/inject: "false" ラベルまたはアノテーションがある場合を除きます。
設定項目
説明
Pod 名前空間ラベルの条件
[Istio-injection:enabled を含む] を選択します。
Pod ラベル/アノテーションの条件
[Sidecar.istio.io/injection: "false" を含まない] を選択します。
グローバル名前空間を作成し、その自動インジェクションを有効にします。
ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウで を選択します。表示されたページで、[作成] をクリックします。
[名前空間の作成] パネルで、名前空間の [名前] を入力します。この例では、test1 を使用します。[ラベル] の右側にある [追加] をクリックします。[名前] を istio-injection に、[値] を enabled に設定します。その後、[OK] をクリックします。
ページの上部で [自動インジェクションを Kubernetes クラスターに同期] をクリックして、グローバル名前空間をデータプレーン Kubernetes クラスターと同期します。
アプリケーションを作成します。
データプレーン ACK クラスターの test1 名前空間に details アプリケーションを作成します。詳細については、「ASM インスタンスに関連付けられたクラスターにアプリケーションをデプロイする」をご参照ください。
サイドカープロキシがアプリケーションの Pod にインジェクトされているかどうかを確認します。
ACK コンソールにログインします。左のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、を選択します。
[デプロイメント] ページの上部で、[名前空間] を test1 に設定し、details アプリケーションの名前をクリックします。
[Pod] タブで、Pod に Proxy イメージが含まれていることがわかります。これは、サイドカープロキシが正常にインジェクトされたことを示します。

Pod にラベルを追加して、自動インジェクションを無効にします。
ACK コンソールにログインします。左のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、を選択します。
[ステートレス] ページで、test1 名前空間の details アプリケーションの [アクション] 列にある [その他] > [YAML の表示] をクリックします。
[YAML の編集] ダイアログボックスで、YAML 構成を変更し、[更新] をクリックします。
ASM のバージョンが 1.12.4 以降の場合は、labels パラメーターにキー
sidecar.istio.io/injectと値"false"を持つラベル、つまりsidecar.istio.io/inject: 'false'を追加します。
ASM のバージョンが 1.12.4 より前の場合は、annotations パラメーターの下にキー
sidecar.istio.io/injectと値"false"を持つアノテーション、つまりsidecar.istio.io/inject: "false"を追加します。
test1 名前空間で自動インジェクションが有効になっているにもかかわらず、details サービスの Pod で自動インジェクションが無効になっていることを確認します。
ACK コンソールにログインします。左のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、を選択します。
[デプロイメント] ページの上部で、[名前空間] を test1 に設定し、details アプリケーションの名前をクリックします。
[Pod] タブで、Pod に Proxy イメージが含まれていないことがわかります。これは、test1 名前空間で自動インジェクションが有効になっているにもかかわらず、details サービスの Pod で自動インジェクションが無効になっていることを示します。

例 2: 個々の Pod の自動インジェクションポリシーを設定する
名前空間レベルで自動インジェクションポリシーを設定したくない場合は、個々の Pod に対して設定できます。以下の手順でこの操作を実行する方法を説明します。
自動インジェクションポリシーを設定します。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
[インジェクションポリシー設定管理] ページの [インジェクションポリシー設定管理] セクションで、関連情報を設定します。その後、ページの下部で [設定の更新] をクリックします。
次の設定は、sidecar.istio.io/inject: "true" ラベルを持つすべての Pod にサイドカープロキシが自動的にインジェクトされることを示します。ただし、istio-injection:disabled ラベルを持つ名前空間内のどの Pod にもサイドカープロキシはインジェクトされません。
設定項目
説明
Pod 名前空間ラベルの条件
[Istio-injection:disabled を含まない] を選択します。
Pod ラベル/アノテーションの条件
[Sidecar.istio.io/injection: "true" を含む] を選択します。
ACK クラスターで、ラベルのない test2 という名前の名前空間を作成します。詳細については、「名前空間とクォータの管理」をご参照ください。
ACK クラスターの test2 名前空間に reviews アプリケーションを作成します。詳細については、「ASM インスタンスに関連付けられたクラスターにアプリケーションをデプロイする」をご参照ください。
Pod にラベルを追加して、自動インジェクションを有効にします。
ACK コンソールにログインします。左のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、を選択します。
[ステートレス] ページの上部で、[名前空間] を test2 に設定します。reviews サービスの [アクション] 列で、[その他] > [YAML の表示] をクリックします。
[YAML の編集] ダイアログボックスで、labels パラメーターの下に
sidecar.istio.io/inject: "true"ラベルを追加します。その後、[更新] をクリックします。説明ラベルを使用して Pod の自動インジェクションを設定するには、Service Mesh (ASM) インスタンスがバージョン 1.12.4 以降である必要があります。インスタンスのスペックアップ方法の詳細については、「ASM インスタンスのスペックアップ」をご参照ください。

自動インジェクションポリシーが Pod に正常に設定されていることを確認します。
ACK コンソールにログインします。左のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、を選択します。
[ステートレス] ページの上部で、[名前空間] を test2 に設定し、reviews アプリケーションの名前をクリックします。
[Pod] タブで、Pod に Proxy イメージが含まれていることがわかります。これは、自動インジェクションポリシーが Pod に正常に設定されていることを示します。

関連ドキュメント
サイドカーインジェクションポリシーを有効にするには、実行中の Pod を再起動する必要があります。詳細については、「Pod の再起動」をご参照ください。
コントロールプレーンをスペックアップした後も、Istio が有効になっているアプリケーションが古いバージョンのサイドカープロキシを使用している場合は、サイドカープロキシをスペックアップする必要があります。詳細については、「サイドカープロキシのスペックアップ」をご参照ください。
グローバル、名前空間、ワークロード、Pod などのさまざまなレベルで、サイドカープロキシのリソース使用量、トラフィックインターセプトポリシー、DNS プロキシ、およびライフサイクルを設定できます。詳細については、「サイドカープロキシの設定」をご参照ください。