サイドカーインジェクション
Kubernetes で Pod にサイドカーコンテナを自動的に注入し、横断的関心事を透過的に追加する仕組み
サイドカーインジェクションとは
サイドカーインジェクション (Sidecar Injection) は、Kubernetes の Admission Webhook を使って、Pod の作成時にサイドカーコンテナを自動的に注入する仕組みである。開発者が Pod の定義を変更せずに、ログ収集、メトリクス、mTLS などの横断的関心事を透過的に追加できる。
Istio、Linkerd、AWS App Mesh などのサービスメッシュが代表的な利用例だ。
注入の仕組み
Kubernetes の Mutating Admission Webhook を利用して、Pod の作成リクエストをインターセプトし、サイドカーコンテナの定義を自動的に Pod spec に追加する。開発者は自分の YAML にサイドカーを記述する必要がなく、Webhook が透過的に注入する。
1. kubectl apply -f deployment.yaml
2. API Server が Pod 作成リクエストを受信
3. Mutating Admission Webhook がリクエストをインターセプト
4. Webhook がサイドカーコンテナの定義を Pod spec に追加 (JSON Patch)
5. 変更された Pod spec で Pod が作成される
[開発者の YAML] [実際に作成される Pod]
containers: containers:
- name: app - name: app
image: myapp:1.0 image: myapp:1.0
- name: istio-proxy ← 自動注入
image: envoy:1.28
Istio での設定
Namespace に istio-injection=enabled ラベルを付けると、その Namespace に作成される全 Pod に Envoy プロキシが自動注入される。
apiVersion: v1
kind: Namespace
metadata:
name: production
labels:
istio-injection: enabled
注入後の Pod 構成:
Pod
├── app (メインコンテナ)
│ └── localhost:3000 でリッスン
└── istio-proxy (自動注入されたサイドカー)
├── インバウンド/アウトバウンドトラフィックをインターセプト
├── mTLS による通信の暗号化
├── リトライ・タイムアウト・サーキットブレーカー
├── メトリクス収集 (Prometheus 形式)
└── 分散トレーシング (Jaeger/Zipkin)
Kubernetes 1.28 のネイティブサイドカー
Kubernetes 1.28 で initContainers に restartPolicy: Always を指定するネイティブサイドカーが導入された。従来の Admission Webhook による注入とは異なり、Kubernetes 自体がサイドカーのライフサイクルを管理する。
initContainers:
- name: log-collector
image: fluentbit:2.1
restartPolicy: Always # ← ネイティブサイドカー
メリット:
- メインコンテナより先に起動し、メインコンテナの終了後も動作する
- ログ収集エージェントがメインコンテナの起動前からログを収集できる
- Job の完了判定がサイドカーに影響されない
メリットとデメリット
メリットとデメリットを以下にまとめる。
| メリット | デメリット |
|---|---|
| アプリコードの変更不要 | Pod のリソース消費が増加 (Envoy: 50〜100MB) |
| 全 Pod に一貫した設定を適用 | デバッグが複雑化 (ネットワークの問題がサイドカー起因か判別しにくい) |
| 横断的関心事の一元管理 | サイドカーの起動順序に依存する問題 |
| セキュリティ (mTLS) の透過的な適用 | Webhook の障害が Pod 作成をブロック |
サイドカーインジェクションが不要なケース
すべてのサービスにサービスメッシュが必要なわけではない。サービス数が少ない (10 未満)、サービス間通信が単純、mTLS が不要な場合は、サイドカーのオーバーヘッドに見合わない。
サイドカーインジェクションについては関連書籍でも詳しく扱われている。
この記事は役に立ちましたか?
関連用語
Kubernetes
コンテナのデプロイ、スケーリング、管理を自動化するオープンソースのオーケストレーションプラットフォーム
サイドカーパターン
メインコンテナと同じ Pod に補助コンテナを配置し、横断的関心事を分離する設計パターン
サービスメッシュ
マイクロサービス間の通信を透過的に管理するインフラ層で、トラフィック制御・認証・監視を提供する
Pod
Kubernetes の最小デプロイ単位で、1 つ以上のコンテナをまとめて管理するリソース
Pod Disruption Budget
Kubernetes でメンテナンス時に同時に停止できる Pod 数を制限し、サービスの可用性を保証するリソース
Deployment
Kubernetes で Pod のレプリカ数、更新戦略、ロールバックを宣言的に管理するリソース
関連する記事
セキュリティ本ガイド - Web 開発者が読むべき技術書の選び方
Web セキュリティの基礎から実践まで学べる技術書の選び方マトリクスと、読了後にやるべき 3 つのアクションを紹介します。
OS・低レイヤー本ガイド - コンピュータの仕組みを学ぶ技術書の選び方
OS、コンパイラ、ネットワークなど低レイヤーを学べる技術書の 4 ジャンルと、どこから始めるべきかの指針、賞味期限の見極め方を紹介します。
技術書を Kindle で読むコツ - 電子書籍ならではの活用術
技術書を Kindle で効率的に読むための具体的なテクニックを紹介します。ハイライト、検索、フォントサイズの調整など、紙にはない電子書籍の強みを活かす方法。