🚀 全体の流れ - たった6ステップでmTLSが自動化される!
💡 各ステップの詳細解説 - こんな感じで動いてる!
1️⃣ Mutating Webhookによる魔法のような自動注入
Pod作成時、LinkerdのWebhookが自動的に以下の設定を注入してくれる!
Trust Anchor証明書の環境変数設定:
# Trust Anchor証明書を環境変数に設定
- name: LINKERD2_PROXY_IDENTITY_TRUST_ANCHORS
value: |
-----BEGIN CERTIFICATE-----
MIIBijCCATCgAwIBAgIQavABIizI9PVGIyS/BHYGhz...
-----END CERTIFICATE-----
# Identity ServiceのエンドポイントをDNS名で指定
- name: LINKERD2_PROXY_IDENTITY_SVC_ADDR
value: linkerd-identity-headless.linkerd.svc.cluster.local.:8080
2️⃣ プロキシ起動時の認証情報セットアップ
プロキシがIdentity Serviceから証明書をゲットするための認証情報が自動で設定される!
env:
# プロキシIDの構築に必要な情報を環境変数から取得
- name: _pod_sa
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
- name: _pod_ns
valueFrom:
fieldRef:
fieldPath: metadata.namespace
# プロキシのアイデンティティを定義
- name: LINKERD2_PROXY_IDENTITY_LOCAL_NAME
value: $(_pod_sa).$(_pod_ns).serviceaccount.identity.linkerd.cluster.local
# Service Account Tokenの場所を指定
- name: LINKERD2_PROXY_IDENTITY_TOKEN_FILE
value: /var/run/secrets/tokens/linkerd-identity-token
volumes:
- name: linkerd-identity-token
projected:
defaultMode: 420
sources:
- serviceAccountToken:
audience: identity.l5d.io
expirationSeconds: 86400
path: linkerd-identity-token
3️⃣ 証明書の保管場所もバッチリ準備
取得した証明書はオンメモリボリュームに安全に保管される!
# 環境変数で証明書の保存先を指定
- name: LINKERD2_PROXY_IDENTITY_DIR
value: /var/run/linkerd/identity/end-entity
# プロキシコンテナでのマウント設定
volumeMounts:
- mountPath: /var/run/linkerd/identity/end-entity
name: linkerd-identity-end-entity
# 証明書保存用のオンメモリボリューム
volumes:
- name: linkerd-identity-end-entity
emptyDir:
medium: Memory
🔐 証明書配布の技術的実装 - セキュリティの要はここだ!
Service Account Tokenの賢い活用法
Linkerdは超スマート!KubernetesネイティブのService Account Tokenを使ってPodを認証するんだ。新しい認証システムを作るんじゃなくて、Kubernetesの仕組みを最大限活用してる。
Token検証プロセスの舞台裏
🛡️ RBAC権限設定でガチガチのセキュリティ
Identity ControllerのClusterRoleには少ない権限だけが設定されてる:
-
tokenreviews
リソースに対するcreate
権限とevent
リソースの権限のみ! - 実際のコードはここでチェックできるよ
🔍 詳細な検証フローはこうなってる!
-
Token送信: LinkerdプロキシがIdentity Serviceに
audience: identity.l5d.io
を持つService Account Tokenを送信(これがパスポート代わり!) -
TokenReview API実行: Identity ControllerがKubernetesの
TokenReview
APIを叩いて、トークンの正当性をガッチリ検証 - 証明書の発行: 検証OKなら、そのプロキシ専用の証明書とプライベートキーを即座に発行!
Trust Anchorsによる初期信頼の確立 - これがミソ!
ここがLinkerdの賢いところ!プロキシには最初からIdentity ControllerのCA証明書(Trust Anchors)が環境変数として仕込まれてる。これはProxy Injectorが自動的に注入してくれるから、開発者は何もしなくてOK。
これによって実現できること:
- 🚫 証明書を持たない初期状態でもIdentity Serviceの正当性を検証可能
- 🛡️ 中間者攻撃を完全にブロック
- ✅ 最初の接続から完璧な安全性を確保
証明書の自動管理でラクラク運用
発行された証明書は/var/run/linkerd/identity/end-entity
にマウントされたオンメモリボリュームに保存される。メモリ上だから高速だし、Pod終了時には自動的に消えるからセキュアだ!
まとめ: Linkerdのこの仕組み、よくできてる。開発者は何も意識しなくても、自動的にmTLSでガチガチにセキュアな通信ができちゃうんだから。これぞクラウドネイティブの真骨頂!🚀