Contents
Linkerdによるマルチクラスター環境構築の概要
KubernetesとLinkerdは、マイクロサービスアーキテクチャを支える基盤として密接に関係しています。Linkerdはサービスメッシュとして機能し、ネットワーク通信のモニタリングやセキュリティ強化を行うことで、マルチクラスター環境におけるトラフィック制御を簡略化します。一方で、複数クラスター間での通信に伴う課題(例:認証不一致・ポリシーの分散管理)は、Linkerdが提供するグローバルなセキュリティ設定や統一されたトラフィック制御機能により解決可能です。本記事では、初心者向けにステップバイステップでマルチクラスター環境を構築する方法を解説します。
準備する前提条件と必要なツール
マルチクラスター構成の実装には、事前の環境整備が不可欠です。以下に必要な前提条件と選定すべきツールを整理しました。
Kubernetesクラスターの事前確認
- 2つ以上のKubernetesクラスター(例:AWS EKS、GCP GKE)を用意する
- 各クラスター間でネットワークポリシーが通じる状態を確認する(CIDR重複の回避など)
Linkerdのバージョン選定
| バージョン | 特徴 | 推奨用途 |
|---|---|---|
| Linkerd 2.15以上 | mTLSサポート強化、グローバルなシークレット管理機能搭載 | 新規導入推奨 |
| Linkerd 2.14以下 | クラスター外へのメッシュ拡張が限定的 | 継続運用時の保守 |
注意: Linkerdのバージョンはクラスター構成や利用するKubernetesバージョンに合わせて選定し、公式ドキュメントで互換性を確認してください。
TLSとRBACの認証設定
セキュアな通信環境を構築するには、TLSによる暗号化とRBAC(ロールベースアクセス制御)の適切な設定が不可欠です。以下に手順を示します。
証明書の発行手順
- 証明機関(CA)の準備: 自社CAまたはLet's Encryptを使用し、クラスタ間通信用の証明書を発行します。
-
Let's Encryptの場合、以下のように
certbotコマンドで証明書を取得可能です:
bash
certbot certonly --standalone -d example.com -
秘密鍵と証明書の配置: 各クラスターに
/etc/linkerd/tls.crtと/etc/linkerd/tls.keyとして保存し、読み取り専用でセキュリティグループを制限します。 - 注意: 証明書ファイルのパーミッションは
chmod 600 /etc/linkerd/*.crt && chmod 600 /etc/linkerd/*.keyで設定してください。
ロールベースアクセス制御(RBAC)の定義
- Linkerdサービスアカウントに適切な権限を付与:
yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: linkerd-cluster-role
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: edit
subjects: - kind: ServiceAccount
name: linkerd
namespace: linkerd
ポイント:
cluster-adminは過剰な権限を付与するため、セキュリティリスクがあります。editやviewなどの限定的なロールを使用してください。
mTLSの有効化とセキュリティ設定
mTLS(Mutual TLS)は、通信の両側で証明書を交換する技術であり、マルチクラスター環境では必須です。以下に導入手順を示します。
mTLSの概要と導入意義
- 従来のTLSとの違い: クライアント側にも証明書が求められ、通信相手の信頼性検証が可能になります。
- セキュリティ恩恵: 中間者攻撃や不正なサービス間通信を防ぎます。
リンクードドメイン間通信の暗号化
-
mTLS設定ファイルの作成:
yaml
apiVersion: linkerd.io/v1alpha2
kind: Identity
metadata:
name: default
namespace: linkerd
spec:
issuerRef:
name: cluster-issuer
kind: ClusterIssuer -
証明書の検証プロセス:
- 各クラスターに
linkerd-identityリソースを配置し、mTLS証明書交換フローが自動化されるようにします。 - ログで
"tls: handshake failure"というエラーが出る場合は、証明書の有効期限やIssuerの設定を確認してください。
proxy.defaultInboundPolicyの設定方法
Linkerdのproxy.defaultInboundPolicyは、デフォルトで受信通信を制御するネットワークポリシーです。以下に具体的な設定手順と例を示します。
デフォルトインバウンドポリシーの概要
- クラスター内で任意のサービスが他クラスターへのアクセスを許可できる状態(
allow-all)には、悪意のあるアクセスが侵入するリスクがあります。 deny-by-defaultに設定することで、明示的なポリシーがない限り通信を制限できます。
ネットワークポリシーの適用例
|
1 2 3 4 5 6 7 |
apiVersion: linkerd.io/v1alpha2 kind: ConfigMap metadata: name: proxy-config data: proxy.defaultInboundPolicy: "deny-by-default" |
補足: この設定は、クラスター全体に適用されます。一部サービスだけを除外する場合は
NetworkPolicyリソースで個別に定義してください。
LinkerdとAmbassador/Rancherの連携
Linkerdは他のKubernetes管理ツール(例:Ambassador、Rancher)とも連携可能です。以下に手順を比較します。
Ambassadorでの統合手順
- Ambassadorのデプロイ:
ambassadornamespaceでambassador/ambassadorイメージを使用し、Linkerdと通信するためのServiceMeshアダプターを有効化します。 - 注意: 画像名は最新バージョンに更新される可能性があるため、公式ドキュメントで確認してください。
- 設定ファイルの差分比較:
| 項目 | Ambassador標準 | Linkerd追加設定 |
|---|---|---|
meshConfig |
なし | enableProxy: true を定義 |
Rancher管理クラスターとの接続方法
- RancherのKubernetesバージョン確認: v2.6以上が推奨です。
- Linkerdリソースの自動デプロイ: Rancherのカタログ・アプリケーションからLinkerdをインストールすると、セキュリティポリシーが自動で設定されます。
実践例: Rancher + Linkerdでは、Rancherの
cluster-adminロールにlinkerdサービスアカウントを追加することで、一括管理が可能になります。ただし、権限過剰を避けるため、最小限の権限で運用してください。
よくある問題とトラブルシューティング
マルチクラスター環境構築時に発生する一般的な問題とその解決策を解説します。
認証失敗時のログ解析
- エラーメッセージ例:
"authentication required"or"tls: no valid certificate found" - 対処方法:
- 各クラスターの
/etc/linkerd/tls.crtファイルを確認し、証明書が正しく配置されているか。 kubectl logs <pod-name> -n linkerdでLinkerdコンテナログから詳細なエラー情報を取得。
ポリシー適用時のエラーメッセージ対処
- 例:
"NetworkPolicy denied connection" - 対応策:
bash
kubectl get networkpolicy -A | grep <service-name>
対象サービスにNetworkPolicyが設定されている場合、linkerd.io/inbound-policy: allowを明示的に記述してください。
まとめ
- TLSとRBACの厳密な管理はセキュリティの基盤となる
- mTLS有効化でマルチクラスター通信の信頼性が向上
proxy.defaultInboundPolicyを適切に設定してネットワークリスクを抑える- AmbassadorやRancherとの連携により、管理負荷を低減可能
実務での導入においては、検証環境で設定を試したうえで本番クラスターへ展開することをおすすめします。