Contents
Linkerdによるマイクロサービス可観測性の概要
LinkerdはKubernetes向けサービスメッシュとして、メトリクス・トレース・ログの統合的な観測機能を提供します。この機能により、複雑化したマイクロサービス環境での障害特定やパフォーマンスモニタリングが劇的に改善されます。特に、Linkerd v2.15以降では、メトリクスの集約やトレースの自動収集をさらに強化し、運用負荷の軽減に貢献しています。以下で具体的な設定手順と導入上のポイントについて説明します。
Linkerdのデプロイメント設定手順
Kubernetes環境でのLinkerd導入には、公式推奨されるHelm chartが用いられます。以下の手順に従って導入を進めることで、安定した観測機能を構築可能です。
Helm chartによるインストール手順
-
Helmリポジトリの追加
bash
helm repo add linkerd https://linkerd.io/charts/
helm repo update -
パッケージのダウンロードと初期設定
bash
helm pull linkerd/linkerd2 --version 2.15.0
tar -xzf linkerd2-2.15.0.tgz -
カスタム設定ファイルの作成(values.yaml)
yaml
identity:
issuer: https://oidc.linkerd.cluster.local
prometheus:
metricsPort: 9418
クラスターコンフィギュレーションの基本設定
Linkerdのデプロイには、ConfigMapやRBACなどクラスター全体の設定が不可欠です。以下の表に代表的なパラメータとその目的を示します。
| 設定項目 | 内容 | 必須か |
|---|---|---|
--namespace |
デプロイ対象のKubernetes名前空間(例: linkerd) | 〇 |
--set controlPlane.replicaCount=3 |
コントロールプレーンのレプリカ数設定 | 〇 |
--set metrics.enabled=true |
メトリクスアグリゲーションを有効化 | 〇 |
注意: 上記の設定値はあくまで一例であり、実際にはクラスタースケールや要求応答時間に応じて調整が必要です。
TLS mutual authenticationの有効化方法
サービス間通信におけるセキュリティ強化には、mTLS(mutual TLS)の導入が不可欠です。Linkerdではこの方式を採用することで、信頼性の高い通信環境を構築できます。
mTLSの仕組みとセキュリティ上の利点
- mTLSはクライアントとサーバーの両方が証明書で認証し合う方式です。
- 攻撃者が偽装してサービスにアクセスするリスクを低減します。
- サービスメッシュ内での通信を暗号化することで、データ漏洩を防ぎます。
LinkerdでのmTLS設定手順
-
Identity Issuerの設定
yaml
kind: IdentityIssuer
apiVersion: linkerd.io/v1alpha2
metadata:
name: default
spec:
issuer: https://oidc.linkerd.cluster.local -
TLSプロファイルのカスタマイズ
bash
linkerd profile apply --name=secure --mtls=true -
サービスにmTLSを適用するポリシー設定
yaml
kind: Policy
apiVersion: linkerd.io/v1alpha2
metadata:
name: mTLS-enforced
spec:
profiles:- name: secure
- name: secure
OpenTelemetry連携による分散トレーシング実装
LinkerdはOpenTelemetry Collectorと連携することで、分散トレースを効率的に構築可能です。この統合により、サービス間通信の遅延やエラー経路を可視化するためのデータ収集が可能になります。
OpenTelemetry Collectorとの統合設定
-
CollectorにLinkerd特有のメトリクス出力設定
yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
processors:
batch:
exporters:
otlphttp:
endpoint: http://otel-collector:4318/otlp/v1/traces
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp] -
Linkerdプロキシにトレースヘッダーの通過を有効化
bash
linkerd viz install --set proxy.trace=true
トレースデータの可視化例
Grafana TempoやJaegerなどへ出力することで、サービス間通信の遅延やエラー経路が直感的に把握可能です。以下はTempoへの接続設定の一例です:
|
1 2 3 4 |
exporters: tempo: endpoint: http://tempo:4317 |
導入手順: Tempoを導入するには、Kubernetes Helm chartを使用してデプロイします(公式ドキュメント)。
メトリクスアグリゲーションの最適化手法
Linkerdから収集されるメトリクスは、Prometheusとの連携でリアルタイム分析が可能です。この統合により、サービスのパフォーマンスや運用状況を効率的にモニタリングできます。
Prometheusとの統合設計
-
Linkerdのメトリクスエンドポイントと接続
yaml
scrape_configs:- job_name: 'linkerd'
static_configs:- targets: ['linkerd-prometheus:9418']
- targets: ['linkerd-prometheus:9418']
- job_name: 'linkerd'
-
レート制限による収集効率化
| 設定 | 概要 |
|---|---|
scrape_interval |
クラスターサイズに応じて10秒〜30秒に設定 |
max_samples |
メトリクスのフィルタリングで集約数を制限 |
高頻度メトリクスのフィルタリング戦略
-
ラベルによるフィルタリング:不要なラベルは削除し、収集対象を絞る。
yaml
relabel_configs:- source_labels: [name]
regex: '^(linkerd_proxy_request|linkerd_ksr)'
action: keep
- source_labels: [name]
-
タイムシリーズのアグリゲート:
sum()やavg()を活用し、レコード量を削減。
Grafanaでの可視化構築と実践ケース
Prometheusから収集したLinkerd特有のメトリクスをGrafanaで利用することで、サービス全体の状態が一目で確認できます。
メトリクスダッシュボードの作成手順
- GrafanaにPrometheusデータソースを追加
-
URL:
http://prometheus-server:9090(公式ドキュメント) -
Linkerdメトリクスから重要な指標を選択
linkerd_proxy_request_duration_millis{service="user-service"}(サービス遅延)linkerd_proxy_response_code_count{code="5xx", service="payment-service"}(エラーレート)
トレースデータの可視化設定例
- Tempoでのリクエスト経路表示:特定のトレーサーIDを入力すると、サービス間通信の流れが可視化されます。
- ダッシュボードに統合する:Grafanaで「Linkerd Metrics」や「OpenTelemetry Traces」のテンプレートをインポートし、複数ソースを結合。
参考: Tempo導入については公式ドキュメントをご覧ください。
公式ドキュメントと設定確認チェックリスト
導入後の運用では、mTLS設定・トレース出力先・メトリクスフィルタリングの3点を週次でレビューすることが推奨されます。詳細な手順や注意事項については、以下をご参照ください。