自動 Envoy インジェクションを使用した Google Kubernetes Engine Pod の設定オプション

このガイドでは、自動 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-