このガイドでは、自動 Envoy サイドカー インジェクタの追加オプションとタスクについて説明します。
既存のワークロードにサイドカー プロキシを追加する
クラスタにサイドカー インジェクタをインストールすると、有効な名前空間で新しく作成された Pod にサイドカー プロキシが自動的に挿入されます。サイドカー インジェクタを有効にする前にワークロードが稼働している場合は、ワークロードを再起動してインジェクションを有効にする必要があります。
Deployment、DaemonSet、または StatefulSet コントローラによって管理される Pod では、次のコマンドを実行できます。
# Deployment kubectl rollout restart deployment/DEPLOYMENT_NAME --namespace NAMESPACE # DaemonSet kubectl rollout restart daemonset/DAEMONSET_NAME --namespace NAMESPACE # StatefulSet kubectl rollout restart statefulset/STATEFULSET_NAME --namespace NAMESPACE
上記のコントローラで Pod をデプロイしていない場合は、Pod を個別に削除する必要があります。これらの Pod は、新しいサイドカー プロキシで自動的に再作成されます。
kubectl delete pod POD_NAME -n NAMESPACE
各 Pod にサイドカー プロキシ コンテナが挿入されていることを確認します。
kubectl get pods -n NAMESPACE
たとえば、上記で作成した busybox クライアントの場合、2 個中 2 つの Pod が実行され、1 つは busybox アプリケーション用、もう 1 つは挿入された Envoy サイドカー プロキシ用に使用されています。
NAME READY STATUS RESTARTS AGE busybox-c54f578c9-c9fk4 2/2 Running 183 7d15h
インジェクションのオーバーライド
デフォルトでは、Namespace を有効にすると、すべての常駐 Pod に対してサイドカー プロキシ インジェクションが有効になります。また、特定のニーズに合わせて別のスコープに構成することもできます。たとえば、プロキシレス gRPC サービスのサイドカー プロキシ インジェクションを防ぐ場合は、オーバーライドが必要になります。
インジェクションのオーバーライドは、Namespace が有効な場合にのみ、Pod Annotations > NeverInjectSelector > AlwaysInjectSelector > Default Policy の順序で適用されます。
特定の Pod に対してインジェクションを有効または無効にする
次の Pod アノテーションを使用して、有効な Namespace 内の特定の Pod でインジェクションを有効または無効にします。
... metadata: annotations: sidecar.istio.io/inject: "true" / "false"
Pod の特定のグループに対してインジェクションを有効または無効にする
サイドカー インジェクタ自体は、Kubernetes ラベルセレクタの配列に従って、有効な Namespace での Pod の挿入を常に許可または禁止するように構成できます。たとえば、次のコマンドを使用すると、Pod に「run=client」というラベルが付いている場合にサイドカー プロキシを挿入しないように、サイドカー インジェクタを構成できます。
kubectl edit configmap -n istio-control istio-sidecar-injector ... config: |- policy: enabled alwaysInjectSelector: [] neverInjectSelector: - matchLabels: run: client ...
この構成を有効にするには、既存のサイドカー インジェクタ デプロイを再起動する必要があります。
サイドカー プロキシのメタデータの構成
Traffic Director の追加機能をサポートするために、サイドカー プロキシはカプセル化された Pod から特定のメタデータを継承できます。たとえば、次のアノテーションを Pod テンプレート仕様に含めると、挿入されたサイドカー プロキシに version=dev というラベルを適用できます。
... metadata: annotations: cloud.google.com/proxyMetadata: '{"version": "dev"}'
次に、構成フィルタリングにより、Traffic Director は、この version=dev ラベルと一致するプロキシとのみ構成のサブセットを共有します。
この構成を有効にするには、既存のデプロイを再起動する必要があります。
サポートされている Pod アノテーション
Traffic Director は、サイドカー インジェクション用に次の Pod アノテーションをサポートしています。サイドカー インジェクタの別のアノテーションも機能する可能性はありますが、Traffic Director がサポートするアノテーションは次のとおりです。破損や不安定を防ぐため、本番環境デプロイでは他のアノテーションに依存関係を作成しないでください。
アノテーション名 | 値 | 説明 |
---|---|---|
sidecar.istio.io/inject | 文字列で表現されるブール値。例: true |
Envoy サイドカーをワークロードに自動的に挿入するかどうかを指定します。 |
cloud.google.com/proxyMetadata | Key-Value ペアの JSON マップ。例: '{"version":
"dev"}' |
Envoy メタデータに追加する必要がある JSON マップ内の Key-Value ペアを指定します。 |
サイドカー インジェクタのアンインストール
サイドカー インジェクタをアンインストールするには、次のコマンドを使用します。
kubectl delete -f specs/ kubectl label namespace default istio-injection-