0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

図解!LinkerdのmTLS確立フロー - Service Account TokenからPod間mTLS通信が完成するまでのプロセス

Last updated at Posted at 2025-07-31

🚀 全体の流れ - たった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 リソースの権限のみ!
  • 実際のコードはここでチェックできるよ

🔍 詳細な検証フローはこうなってる!

  1. Token送信: LinkerdプロキシがIdentity Serviceにaudience: identity.l5d.ioを持つService Account Tokenを送信(これがパスポート代わり!)
  2. TokenReview API実行: Identity ControllerがKubernetesのTokenReview APIを叩いて、トークンの正当性をガッチリ検証
  3. 証明書の発行: 検証OKなら、そのプロキシ専用の証明書とプライベートキーを即座に発行!

Trust Anchorsによる初期信頼の確立 - これがミソ!

ここがLinkerdの賢いところ!プロキシには最初からIdentity ControllerのCA証明書(Trust Anchors)が環境変数として仕込まれてる。これはProxy Injectorが自動的に注入してくれるから、開発者は何もしなくてOK。

これによって実現できること:

  • 🚫 証明書を持たない初期状態でもIdentity Serviceの正当性を検証可能
  • 🛡️ 中間者攻撃を完全にブロック
  • ✅ 最初の接続から完璧な安全性を確保

証明書の自動管理でラクラク運用

発行された証明書は/var/run/linkerd/identity/end-entityにマウントされたオンメモリボリュームに保存される。メモリ上だから高速だし、Pod終了時には自動的に消えるからセキュアだ!


まとめ: Linkerdのこの仕組み、よくできてる。開発者は何も意識しなくても、自動的にmTLSでガチガチにセキュアな通信ができちゃうんだから。これぞクラウドネイティブの真骨頂!🚀

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?