Linkerd

Linkerdマルチクラスタ構築ガイド:前提・インストール・ServiceMirror設定

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

前提条件と環境整備

Linkerd のマルチクラスタ機能を有効化するには、Kubernetes クラスタのバージョンと CLI ツールが一定以上であること、そして各クラスタ間で IP アドレス空間が衝突しない 設計が不可欠です。この節ではそれらを確認・整備する手順を示します。

Kubernetes バージョンと CLI の要件

Linkerd 2.13(執筆時点の最新安定版)は Kubernetes API 1.27 以上 を前提に動作します。kubectl はクラスタの API サーバーと互換性があるバージョンであれば問題ありませんが、最低でも v1.27.x が推奨されます。

ポイント
* kubectl が古すぎると linkerd check の一部チェックが失敗します。必要に応じて公式サイトからアップデートしてください。

CIDR 設計のベストプラクティス

マルチクラスタ間で Service CIDRPod CIDR が重複すると、ServiceMirror が生成した Service が名前解決できなくなります。以下は 2 クラスタ構成を想定した典型的な設計例です(/16 のサブネットを使用)。

項目 クラスタ A クラスタ B
Pod CIDR 10.0.0.0/16 10.1.0.0/16
Service CIDR 10.96.0.0/16 10.112.0.0/16
必要ポート 4143 (gateway), 4191 (identity) の TCP 開放

備考
* 多くのマネージドサービスでは Service CIDR に /16 がデフォルトです。独自に拡張する場合は必ず重複チェックを行いましょう。


コントロールプレーンのインストール

本章では CLIHelm の両方で Linkerd コントロールプレーンをデプロイする手順を示します。どちらの方法でも、マルチクラスタ向けに必要な拡張機能(ServiceMirror・gateway)を有効化しています。

CLI (linkerd install) によるインストール

linkerd install は Helm と同等の設定が可能ですが、シンプルさと即時検証が利点です。以下はマルチクラスタ環境で推奨するオプションです。

  • --set extensions.serviceMirroring.enabled=true … ServiceMirror 拡張を有効化
  • --set identity.issuer.scheme=kubernetes … Kubernetes の ServiceAccount を利用した証明書発行(デフォルト)

注意
--disable-heartbeatgateway.tls.enabled といったフラグは Linkerd 2.x には存在しません。代わりに拡張機能の有効化は extensions.* 系の設定で行います。

Helm Chart を用いたインストール

CI/CD パイプラインへの組み込みやバージョン管理が必要な場合は Helm が便利です。公式チャートは linkerd/linkerd2 にあります。

ポイント
Helm の --set オプションは CLI と同様のキー構造を持ちます。バージョン指定 (--version) を忘れないようにしてください。

インストール後の検証

インストールが完了したら、必ず Linkerd のヘルスチェック を実行します。マルチクラスタではそれぞれのクラスタで個別に確認し、すべて PASS が出ることを目指します。


ServiceMirror と linkerd‑gateway の設定

ServiceMirror により、あるクラスタの Service が別クラスタから参照できるようになります。ここでは CRD 有効化マニフェスト適用外部アクセス可能な gateway デプロイ までを順に示します。

ServiceMirror 拡張機能の有効化

既に linkerd install の際に extensions.serviceMirroring.enabled=true を指定していますが、追加で gateway 用拡張 を有効にすると外部からのトラフィック受信が可能になります。

結果
servicemirror.linkerd.io/v1beta2gateway.linkerd.io/v1alpha1 の CRD が作成されます。

ServiceMirror と MirrorTarget のマニフェスト例

以下は orders サービスをクラスタ A からクラスタ B にミラーする最小構成です。targetClustercluster-b の名前(kubeconfig 上のコンテキスト名)で指定します。

効果
適用後、orders.prod.svc.cluster.local がクラスタ A に自動生成され、gateway 経由でクラスタ B の実体 Service へリクエストが転送されます。

TLS 終端付き linkerd‑gateway のデプロイ

外部からのトラフィックは TLS で暗号化し、gateway が終端します。Linkerd の gateway は linkerd-gateway デプロイメントと Service(LoadBalancer または NodePort)で構成します。

ポイント
extensions.gateway.tls.enable は Linkerd 2.13 の正しいキーです。
クラウドベンダーが自動で外部 IP を付与しない場合は、type: NodePort に切り替えて Ingress コントローラ等と組み合わせてください。


トラフィックフローと証明書自動ローテーション

マルチクラスタ構成では、トラフィックの流れ証明書管理 が特に重要です。ここではデータパスを簡潔に示し、Linkerd の mTLS 証明書自動ローテーション設定方法を解説します。

データフロー概要(テキスト版)

  1. クライアント Pod → サイドカー linkerd-proxy (送信側)
  2. Proxy が mTLS で暗号化し、ServiceMirror の ClusterIP に転送
  3. gateway (linkerd-gateway) が TLS を終端し、内部の ServiceMirror に渡す
  4. 受信側クラスタの linkerd-proxy が復号して 対象 Pod に配送

この流れにより、全ての往来が Linkerd のポリシーと可観測性(Viz)で管理されます。

証明書自動ローテーション設定

Linkerd 2.13 では identity.autoRotate.enabled が標準で提供されています。以下は 24 時間ごと に証明書を更新する例です(Helm と CLI の両方で同様に適用可能)。

Helm での設定

CLI(既存インストールへのパッチ)

効果
証明書が自動的に更新され、手作業でのローテーションや期限切れエラーを防げます。


認証・ポリシーの統一管理

マルチクラスタ環境では 信頼できる根本 CA共通 ServiceAccount を用意することで、各クラスタ間の認証が一本化できます。また、RBAC のスコープを最小限に抑えつつ全クラスターで同一ポリシーを適用する方法を示します。

Trust Anchor(根本 CA)の共有

Linkerd が生成した Identity Trust Root をエクスポートし、他クラスタへインポートします。これにより、どちらのクラスタでも同一 CA に署名された証明書が有効になります。

共通 ServiceAccount の作成

結果
shared-sa が使用するトークンは、どちらのクラスタでも同一 CA で検証できるため、相互認証がシームレスになります。

RBAC の統一例(ClusterRole + ClusterRoleBinding)

ポイント
ClusterRole は全名前空間に対して権限を付与しますが、対象は linkerd‑proxy が必要とする最小権限* に留めてください。


トラブルシューティングとデバッグ

マルチクラスタ構成でよく発生する問題と、Linkerd が提供する診断ツールを組み合わせた対処フローをまとめます。

linkerd diagnostics の活用方法

出力に PASS がすべて揃っていれば、コンポーネント間の依存関係は正常です。エラーが出た箇所だけを切り分けて次のステップへ進みます。

リアルタイムモニタリング:linkerd taplinkerd stat

コマンド 用途
linkerd tap deploy/orders -n prod --duration 60s 1 分間だけリクエストの詳細をリアルタイムで取得
linkerd stat svc/orders -n prod --window 5m 過去 5 分間の成功率・レイテンシを集計

これらは ServiceMirror 経由 のトラフィックも可視化できるため、問題発生時に即座にパターンを把握できます。

代表的なエラーと対処法

エラーメッセージ 主な原因 推奨対策
gateway not ready LoadBalancer が外部 IP を取得できない(クラウドプロバイダー設定) Service のアノテーションを確認し、必要なら service.beta.kubernetes.io/aws-load-balancer-type: external 等を追加
failed to resolve ServiceMirror targetCluster 名が誤っている、または対象クラスタで CRD が未作成 kubectl get servicemirror -A で名前を検証し、CRD の有無 (kubectl api-resources | grep ServiceMirror) を確認
mTLS handshake failed Identity 証明書のローテーション失敗、もしくは Trust Anchor が不一致 linkerd check --preidentity 項目を再チェックし、全クラスタで同一 CA が設定されているか確認

デバッグ手順
1. linkerd diagnostics → エラー箇所特定
2. 該当リソースの YAML (kubectl get <kind> -n <ns> <name> -o yaml) を取得し設定ミスを修正
3. 再度 linkerd check で検証、必要なら linkerd install --force で再適用


まとめ

  • 前提条件 – Kubernetes 1.27+、kubectl は同等かそれ以上、CIDR は /16 で重複を回避
  • インストール – CLI/Helm 両方の手順を示し、extensions.serviceMirroring.enabled=true を必ず設定
  • ServiceMirror と gateway – CRD 有効化 → マニフェスト適用 → TLS 終端 gateway のデプロイで構成完了
  • トラフィックと証明書管理 – データフローを把握し、identity.autoRotate.enabled=true で自動ローテーションを有効化
  • 認証・RBAC の統一 – Trust Anchor と共通 ServiceAccount を共有し、ClusterRole/Binding で最小権限付与
  • トラブルシューティングlinkerd diagnosticstapstat を組み合わせて迅速に原因特定

以上の手順とベストプラクティスを踏むことで、Linkerd のマルチクラスタ機能を 安全・安定・可観測 に運用できるようになります。ぜひ本ガイドを参考に、実際の環境へ適用してみてください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Linkerd