Contents
Linkerdによるクラスタ間通信の概要
複数Kubernetesクラスターを管理する際、サービス間の通信はネットワーク設計の最大の課題です。LinkerdはService Meshとして、mTLS認証やグローバルなサービス発見機能でこの課題を解決します。特にv2.xでは「クラスターリング(Cluster Mesh)」機能により、複数クラスター間のネットワーク抽象化が可能に。公式ドキュメントでは「Multi-Cluster Services」や「ServiceEntry」といったキーワードで検索可能です。
Linkerdのインストールと基本構成
Kubernetesクラスタ間での通信を実現するには、まずLinkerdを各クラスターに導入する必要があります。Control Plane(管理コンポーネント)とData Plane(プロキシコンテナ)の配置ルールを理解し、クラスターリングを有効化する手順を確認しましょう。
各クラスターへのLinkerdデプロイ手順
- Linkerdのバージョン確認:
linkerd versionを実行してv2.xがインストールされているか確認 - クラスタースコープでのインストール:
linkerd install --skip-namespace --set profile=ambientでControl Planeを配置 - Data Planeの自動注入:
kubectl label ns <namespace> linkerd.io/inject=enabledでNamespaceにプロキシを注入
クラスターリング構成の検証方法
- 各クラスターで
linkerd checkコマンドを実行し、ネットワーク接続性を確認(注意: Multi-Cluster環境では非推奨) kubectl get svc -n linkerdでControl Planeコンポーネントのステータスを確認
mTLS認証とサービスメッシュスコープ
LinkerdはデフォルトでmTLSによる暗号化通信を実現します。複数クラスター間での信頼関係を構築するには、Identityコンポーネントの設定が不可欠です。
自動生成されたIdentityとTrust Anchorの設定
- IdentityはKubernetes ServiceAccountに自動生成されるため、
linkerd-identityのロールベース制御が重要 - 信頼できるルート証明書(Trust Anchor)を
/etc/linkerd2/tls/root-ca.crtに配置
Cross-Cluster通信時の認証フロー
- クライアントクラスターのServiceAccountから証明書取得
- 証明書がServerクラスターのTrust Anchorと照合される
- 両方のプロキシがTLS接続を確立
Scopeの境界管理方法
- Namespaceレベル:
linkerd.io/scopeラベルで通信範囲を指定 - Clusterレベル: クラスターアクセス制限に
NetworkPolicyを併用
DNS設定とServiceEntryの活用
複数クラスター間でのサービス発見には、DNS設定とServiceEntryリソースが不可欠です。特にグローバルなサービスディスカバリー構成は、通信遅延を削減する鍵となります。
クラスターアクセス向けのDNSレコード設計
- クラスター固有ドメイン:
svc.cluster.localを各クラスターで個別に設定 - グローバルDNS: DNSレゾルバに
/etc/resolv.confを共通化(例: 全クラスターで同じDNSサーバーを使用する設定を追加)
ServiceEntryによる外部サービス連携
| タイプ | 説明 | 使用ケース |
|---|---|---|
| ClusterIP | 内部クラスターのサービスのみ参照 | 同一クラスター内通信 |
| ExternalName | 外部DNS名へのマッピング | 異なるクラスター間通信 |
グローバルなサービスディスカバリー構成
linkerd-identityコンポーネントと連携し、/etc/linkerd2/service-entries.jsonにリソースを登録
通信ポリシーのカスタマイズ
LinkerdではTrafficPolicyやRouteリソースでQoS設定やルーティング制御が可能です。特にラベルセレクタによる条件分岐は、動的なトラフィック制御に適しています。
TrafficPolicyによるQoS設定
|
1 2 3 4 5 6 7 8 9 |
apiVersion: linkerd.io/v1beta1 # ←修正済み(v1alpha2→v1beta1) kind: TrafficPolicy metadata: name: qos-policy spec: protocol: TCP port: 80 timeout: 30s |
Routeリソースを使ったルーティング制御
- ラベルセレクタでトラフィックを分割する例:
match: { labels: { app: "payment" } }
グローバルなメトリクス収集構成
linkerd-vizをインストールし、Prometheus経由でメトリクスを可視化
トラブルシューティングと監視
通信エラーが発生した際は、ログ確認とCLIツールの活用が重要です。メッシュ内トラフィックの可視化も維持管理に必須です。
通信エラー時のログ確認手順
linkerd -n <namespace> logsでプロキシロガーを確認kubectl logs -l linkerd.io/identityでIdentityコンポーネントのエラーをチェック
Linkerd CLIによる状態診断
linkerd checkでインストール状況の検証(注意: Multi-Cluster環境では非推奨)linkerd viz metricsでメトリクスデータの可視化
公式ドキュメント参照ガイド
Linkerd v2.xの設定やクラスターリングに関する詳細な手順は、公式ドキュメントを参照してください。サポートチケットが必要な場合は、公式サポートページから申請可能です。
CTA: 公式ドキュメントを参照しつつ、本ガイドに従ってLinkerdによるクラスタ間通信を構築してみましょう。