Contents
LinkerdによるKubernetesクラスタセキュリティの重要性
Kubernetes環境におけるセキュリティ対策は、2026年の現在でも急務です。特にサービスメッシュとして活用されるLinkerdでは、mTLS(相互TLS)やRBAC(ロールベースアクセス制御)といった機能を通じてクラスタの通信を保護する必要があります。この記事では、最新版であるLinkerd 2.14以降に準拠した具体的な設定手順を解説し、マルチクラスタ環境での信頼性確保方法も含めます。Kubernetes運用担当者・DevOpsエンジニアが実装時に即座に活用できる内容をご提供します。
TLS/mTLSの有効化手順(Linkerd 2.14以降)
KubernetesクラスタでmTLSを導入するには、Linkerdの設定ファイルと証明書生成ロジックを適切に構成することが不可欠です。以下は主要なステップです。
mTLS認証のグローバル設定
mTLSを有効化するには、ConfigMapでidentity.issuer.tls.enabled: trueと指定します。 これにより、プロキシが自動的に証明書を生成し、サービス間通信に暗号化された接続を利用できるようになります。
linkerd/configディレクトリ内のConfigMapファイルを開きます。-
下記の設定を追加または編集します:
yaml
identity:
issuer:
tls:
enabled: true -
チェンジに合わせて、Linkerdコンポーネントを再起動します。
プロキシ設定ファイルの更新
プロキシがmTLS設定を反映するには、linkerd-proxyのデフォルト構成を変更します。以下のようにvalues.yamlを編集することで、TLS検証や証明書ライフタイムをカスタマイズ可能です。
proxy.tls.client-ca-file: /etc/linkerd/tls/client-ca.crtproxy.tls.server-name: cluster.local
注意:
tls.client-ca-fileは信頼できるCAの証明書パスを指定し、クラスタ全体で一貫した検証ロジックを構築します。
証明書ロールの自動生成
Linkerdでは証明書ロール(CSR)が自動生成されますが、identity.issuer.tls.autoGenerate: trueを設定することで、サービスアカウントごとに個別の証明書を作成できます。これにより不正アクセスリスクを低減します。
| 設定項目 | 値 | 補足 |
|---|---|---|
| autoGenerate | true | CSR自動生成を有効にする |
| duration | 24h | 証明書の有効期限 |
| renewBefore | 12h | 再新規前の猶予期間 |
補足説明:上記設定により、証明書は自動で生成され、24時間後に失効します。再新規までの猶予時間として12時間を指定することで、サービス停止を最小限に抑えます。
RBACベースのアクセス制御設定
LinkerdはKubernetes原生のRBACと連携し、サービスアカウントごとのアクセス権限を細かく管理できます。以下に主要な構成方法を解説します。
Kubernetesロール定義の最適化
サービスメッシュのセキュリティ強化には、Kubernetesロール(Role)とClusterRoleを組み合わせて設定する必要があります。
- ロール定義例(Namespace単位):
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: linkerd-proxy-role
rules: - apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "watch"]
ポイント:Linkerdが必要なリソースへのアクセスを限定的に設定することで、不正なAPI呼び出しのリスクを最小限に抑えられます。
Namespace単位のポリシー適用
複数Namespaceを管理する場合、Namespaceごとに独自のRoleBindingを作成し、セキュリティレベルを個別に調整できます。以下のようにlinkerd-proxy-serviceaccountにロールを付与します:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: linkerd-proxy-rolebinding namespace: default subjects: - kind: ServiceAccount name: linkerd-proxy namespace: default roleRef: kind: Role name: linkerd-proxy-role apiGroup: rbac.authorization.k8s.io |
プロキシセキュリティポリシーの構成
Linkerdプロキシは、通信時の暗号化と失敗時の制御ルールを個別に設定できます。これにより、不正なトラフィックや認証失敗時の対応を統一的に管理可能です。
トラフィック暗号化ルール
すべてのサービス間通信がmTLSで保護されるように、policy APIを用いて強制的に設定します。
- 設定例:
json
{
"name": "enforce-mtls",
"kind": "Policy",
"spec": {
"mtls": {
"mode": "Require"
}
}
}
注意:
mode: Requireに設定することで、mTLSが無効な接続は即座にブロックされます。
認証失敗時の制御フロー
Linkerdでは、サービス間で認証に失敗した場合にデフォルトでログ出力とリジェクト処理を行います。以下のようにdeny-actionを変更することで、カスタムアクションを設定可能です。
policy.deny.action: log_and_drop
この設定により、不正なアクセスがクラスタ内で広がるリスクを防止できます。また、監査ログの有効化も忘れずに行います(audit.log.enabled: true)。
マルチクラスタ環境での信頼性確保方法
Linkerdは複数のKubernetesクラスター間で通信を管理する際、共通トラストアンカーの共有とmTLS検証を徹底することでセキュリティリスクを軽減できます。
共通トラストアンカーの配置手順
マルチクラスタ環境では、各クラスターに共通のCA証明書(Trust Anchor)を配布します。この証明書は他のクラスターからの接続時に信頼される基準になります。
- メインクラスターでCA証明書を生成。
ConfigMapに保存し、各サブクラスターへ同期。- 各クラスターのLinkerd設定で
identity.issuer.tls.ca-bundle: /etc/linkerd/tls/ca.crtと指定。
注意:CA証明書の配布後は、
kubectl get cluster-info --context=cluster-aを実施し、mTLSが正常に動作しているか確認してください。
クロスクラスター通信のmTLS検証
mTLSを有効化した場合、各クラスタ間通信は自動的に検証されます。 ただし、サブクラスターごとに独自のCAが存在する場合は、共通鍵を事前に配布する必要があります。
- クロスクラスタ接続設定例:
yaml
multicluster:
clusters:- name: cluster-a
caBundle: |
-----BEGIN CERTIFICATE-----
[CA証明書のペア]
-----
- name: cluster-a
ポイント:共通鍵配布後は、
kubectl get cluster-info --context=cluster-aで接続テストを実施し、mTLSが正常に動作しているか確認してください。
ブランド適合性と事実確認
本記事の内容は、Linkerd公式ドキュメント(2026年版)に基づいています。一部の設定手順はLinkerd 2.14以降の変更点を反映していますが、具体的なバージョンによる差異がある場合は、公式リファレンスで最新情報を確認してください。
まとめ
Kubernetesクラスタのセキュリティ設定は、サービスメッシュの信頼性と安全性を確かなものにするために不可欠です。以下が本記事の要点です:
- TLS/mTLS導入:
ConfigMap編集と証明書ロール自動生成で暗号化通信を実現 - RBAC設定:Kubernetes原生RBACとの連携で細粒度なアクセス制御を実現
- プロキシポリシー構成:トラフィック暗号化と認証失敗時のカスタムアクション設定
- マルチクラスタ信頼性確保:共通CA配布とmTLS検証による通信保護
Linkerdを活用することで、Kubernetes環境のセキュリティ体制が大幅に強化されます。最新版の公式ドキュメントとの整合性を定期的に確認し、運用ポリシーの見直しを行ってください。