Cloud Service Mesh を使用してサイドカー プロキシを挿入する
このドキュメントでは、Cloud Service Mesh を使用してサイドカー プロキシ インジェクションを構成し、ネットワーク セキュリティ、信頼性、オブザーバビリティを強化する方法について説明します。これらの機能が、アプリケーションのプライマリ コンテナと分離されて抽象化され、同じ Pod 内に別のコンテナとして提供される、共通のプロセス外プロキシ(サイドカー)に実装されます。これにより、本番環境のアプリケーションを再設計することなくサービス メッシュに参加する Cloud Service Mesh の機能が提供されます。
自動サイドカー プロキシ インジェクション(自動インジェクション)は、Cloud Service Mesh がワークロードの Pod 用に構成した名前空間ラベルを検出すると実行されます。プロキシは、ワークロードのすべての受信トラフィックと送信トラフィックを傍受し、Cloud Service Mesh と通信します。
自動サイドカー インジェクションを有効にする
サイドカー プロキシの挿入には、Webhook ベースの自動サイドカー インジェクタを使用することをおすすめしますが、手動で Pod の Kubernetes 構成を更新することもできます。
自動挿入を有効にするには、デフォルトのインジェクション ラベルを使用して名前空間にラベルを付けるか(デフォルトのタグを設定した場合)、リビジョン ラベルを名前空間に追加します。追加するラベルは、(Fleet API または asmcli
で)マネージド Cloud Service Mesh をデプロイしたのか、クラスタ内コントロール プレーンをインストールしたのかによっても異なります。ラベルは、サイドカー インジェクタ Webhook によって使用され、挿入されたサイドカーを特定のコントロール プレーン リビジョンに関連付けます。
自動インジェクションを有効にするには:
クラスタ内
次のコマンドを使用して、
istiod
のリビジョン ラベルを探します。kubectl -n istio-system get pods -l app=istiod --show-labels
出力は次のようになります。
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-1232-2-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-1232-2,istio=istiod,pod-template-hash=5788d57586 istiod-asm-1232-2-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-1232-2,istio=istiod,pod-template-hash=5788d57586
出力の
LABELS
列で、接頭辞istio.io/rev=
に続くistiod
リビジョン ラベルの値をメモします。この例での値はasm-1232-2
です。リビジョン ラベルを名前空間に適用し、istio-injection ラベルを削除します(存在する場合)。次のコマンドで、
NAMESPACE
は自動インジェクションを有効にする名前空間の名前で、REVISION
は前の手順でメモしたリビジョン ラベルです。kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
出力中のメッセージ
"istio-injection not found"
は無視します。これは、今までは名前空間にistio-injection
ラベルが付加されていなかったことを示しており、Cloud Service Mesh の新規インストールまたは新規デプロイで想定されることです。名前空間にistio-injection
とリビジョン ラベルの両方があると自動インジェクション動作は未定義になるため、Cloud Service Mesh ドキュメント内のすべてのkubectl label
コマンドでは明示的に一方のみが設定されることになります。次のセクションの手順に沿って、該当する Pod を再起動します。
マネージド サービス メッシュ
利用可能なリリース チャンネルを探すには、次のコマンドを使用します。
kubectl -n istio-system get controlplanerevision
出力は次のようになります。
NAME AGE asm-managed 6d7h
出力で、
NAME
列の値は、Cloud Service Mesh バージョンで使用可能なリリース チャンネルに対応するREVISION
ラベルです。このラベルを名前空間に適用し、istio-injection
ラベルを削除します(存在する場合)。次のコマンドで、REVISION
は上記のリビジョン ラベルに置き換えます。NAMESPACE
は、自動インジェクションを有効にする名前空間の名前に置き換えます。kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
出力中のメッセージ
"istio-injection not found"
は無視します。これは、今までは名前空間にistio-injection
ラベルが付加されていなかったことを示しており、Cloud Service Mesh の新規インストールまたは新規デプロイで想定されることです。名前空間にistio-injection
とリビジョン ラベルの両方があると自動インジェクション動作は未定義になるため、Cloud Service Mesh ドキュメント内のすべてのkubectl label
コマンドでは明示的に一方のみが設定されることになります。次のセクションの手順に沿って、該当する Pod を再起動します。
オプションの Google 管理のデータプレーンをデプロイした場合、次のように
demo
名前空間にアノテーションを設定します。kubectl annotate --overwrite namespace YOUR_NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Pod を再起動してサイドカー プロキシを更新する
自動サイドカー インジェクションでは、Pod の再起動で既存の Pod のサイドカーを更新できます。
Pod を再起動する方法は、Pod が Deployment の一部として作成されたかどうかによって異なります。
Deployment を使用した場合は、サイドカー付きのすべての Pod を再起動する Deployment を再起動します。
kubectl rollout restart deployment -n YOUR_NAMESPACE
Deployment を使用していない場合、Pod を削除すると、自動的にサイドカー付きで再作成されます。
kubectl delete pod -n YOUR_NAMESPACE --all
名前空間内のすべての Pod にサイドカーが挿入されたことを確認します。
kubectl get pod -n YOUR_NAMESPACE
次に前のコマンドの出力例を示します。ここで、
READY
列はワークロードごとに 2 つのコンテナ(プライマリ コンテナとサイドカー プロキシのコンテナ)があることを示しています。NAME READY STATUS RESTARTS AGE YOUR_WORKLOAD 2/2 Running 0 20s ...
次のステップ
以下の詳細を確認してください。