Contents
Linkerd 日本語導入ガイド 初心者ステップバイステップ:Kubernetes環境でサービスメッシュを構築する
Linkerdは、安全性と信頼性に特化したサービスメッシュとして注目を集めています。Linkerd 日本語導入ガイド 初心者ステップバイステップでは、KubernetesクラスターへのCLI/Helmによる導入フローを中心に、実践的な手順を解説します。本記事で得られる知識は、DevOpsエンジニアが現環境でサービスメッシュの基本機能を体験するための基盤となるでしょう。
Kubernetes基礎知識:初心者向けに必要な前提概念
Kubernetes環境でのLinkerd導入には、いくつかの前提知識が不可欠です。特にノード・名前空間・Helmといったキーワードの理解が重要です。以下で簡潔に解説します。
ノード(Node)とは
- Kubernetesクラスターに物理/仮想マシンとして参加する計算リソース
kubectl get nodesで状態(Ready/NotReady)やバージョンを確認できる
名前空間(Namespace)とは
- 複数のユーザー・プロジェクトが共存する際の境界線
- リソース管理に役立ち、
--namespaceフラグで指定可能
Helmとは
- Kubernetesリソースをテンプレート化して一括デプロイ可能なパッケージマネージャ
- カスタマイズ可能なパラメータを持つチャート(Chart)を用いる
mTLSとサービスメッシュの関係性:初心者向けにわかりやすく解説
mTLSとは何か?
mTLS(Mutual Transport Layer Security)は、クライアントとサーバー間で双方向認証を行う暗号通信プロトコルです。通常のTLSではサーバーのみが証明書を保持しますが、mTLSでは両者が証明書を交換し、お互いの信頼性を確認することで安全性を高めます。
なぜサービスメッシュで重要なのか?
- クラスタ内通信(Pod間)の暗号化と認証を自動化
- 実装コストゼロでセキュリティ強化が可能
- 外部接続時の証明書管理の負担軽減
重要ポイント
mTLSはサービスメッシュの核となる機能です。Linkerdではデフォルトで有効化されており、自動ローテーションによってセキュリティリスクを最小限に抑えています。
Linkerd導入前の準備: Kubernetes環境の確認
LinkerdのインストールにはまずKubernetesクラスター環境が必須です。このセクションでは、手順を開始する前に確認すべき点と前提条件を整理します。
kubectlのインストール確認
Kubernetes操作に不可欠なkubectlコマンドが正しく動作しているかを事前に確認してください。以下のコマンドでバージョン確認が可能です。
|
1 2 |
kubectl version --short |
出力されるクライアントとサーバーのバージョンが一致しない場合、クラスター接続に問題が生じる可能性があります。最新版のインストールについてはkubectl公式ドキュメントを参照してください。
Kubernetesクラスター構築の前提条件
LinkerdはKubernetes v1.20以降で動作します。クラスターが既存の場合、kubectl get nodesでノード情報が表示されることを確認してください。以下が正常な出力例です。
|
1 2 3 4 |
NAME STATUS ROLES AGE VERSION node-1 Ready <none> 5d v1.23.6 node-2 Ready <none> 5d v1.23.6 |
クラスターが新規構築の場合、minikubeやkubeadmといったツールを活用してください。導入環境に応じた手順は別途確認が必要です。
CLI vs Helm: インストール方法比較
LinkerdのインストールにはCLIとHelmチャートの2つの方法があります。それぞれの特徴を比較し、適切な選択肢を選ぶポイントを解説します。
なぜCLIかHelmか?初心者向けの判断基準
- CLIは手順がシンプルで導入初期に最適
- Helmはカスタマイズ性が高く、複数環境管理やチーム開発に適す
CLIによる手動インストール手順
CLIでの導入はシンプルなコマンドで完了しますが、手動設定が必要です。以下の手順に従ってください。
-
Linkerdのリポジトリを追加
bash
curl --proto '=https' --tlsv1.2 -sSf https://linkerd.io/install.sh | sh
このコマンドでlinkerdCLIがインストールされます。 -
クラスターへの初期化
bash
linkerd install > linkerd-config.yaml
kubectl apply -f linkerd-config.yaml
管理用リソース(ConfigMapやDeployment)が自動生成されます。 -
インストール完了確認
bash
linkerd check
すべての項目に「✅」印が出れば正常です。
利点: 手順がシンプルで、導入初期においては理解しやすい
注意点: スケーリングや拡張性を考慮する場合はHelmが推奨
Helmチャートを使用した自動インストール
Helmチャートでは、テンプレートとパラメーターを活用して一括でデプロイできます。以下が手順です。
-
Helmのインストール
bash
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash -
Linkerd Helmチャートの追加
bash
helm repo add linkerd https://helm.linkerd.io/stable
helm repo update -
インストール実行
bash
helm install linkerd2 linkerd/linkerd2 --namespace linkerd --create-namespace -
完了確認
bash
kubectl -n linkerd get pods
linkerd-controllerやlinkerd-prometheusのPodが起動していることを確認してください。
利点: スケーリング時やリソース管理に最適
注意点: パラメータ設定を誤ると、ネットワーク通信に影響が出る可能性
CLIとHelmの比較表
| 項目 | CLI | Helmチャート |
|---|---|---|
| 導入手順 | 手動コマンド | テンプレート使用 |
| リソース管理 | 簡易的 | 柔軟性あり |
| パラメータ調整 | 制限あり | 多様なカスタマイズ |
| 運用性 | 個人向けに適する | チームでの運用に適 |
サービスメッシュプロキシの挿入確認
Linkerdはサービス通信を制御するために「プロキシ」をPod内に自動注入します。ここでは、linkerd injectコマンドで動作が確認できます。
linkerd inject コマンドの実行手順
-
テスト用アプリケーションの作成
bash
kubectl apply -f https://raw.githubusercontent.com/linkerd/linkerd2/main/manifests/examples/helloworld.yaml -
プロキシ注入処理を適用
bash
kubectl get pods helloworld-86754c49df-2j9gk -o yaml | linkerd inject - | kubectl apply -f -
これにより、linkerd-proxyがPodに追加されます。 -
注入後の状態確認
bash
kubectl describe pod helloworld-86754c9df-2j9gk
出力結果にlinkerd-proxyというコンテナ名が表示されれば成功です。
Podにプロキシが正常に組み込まれた検証方法
-
Podの詳細確認
bash
kubectl get pods helloworld-86754c9df-2j9gk -o jsonpath='{.spec.containers[*].name}'
出力例:helloworld linkerd-proxy -
ログ確認(オプション)
bash
kubectl logs helloworld-86754c9df-2j9gk -c linkerd-proxy
可視化ダッシュボード(viz)の導入
Linkerdのviz拡張によって、サービス通信の可視化が可能です。以下にインストール手順とアクセス方法を解説します。
vizチャートのインストール
-
vizチャートの追加
bash
helm repo add linkerd-viz https://helm.linkerd.io/stable
helm repo update -
インストール実行
bash
helm install linkerd-viz linkerd-viz/linkerd-viz --namespace linkerd --create-namespace -
Dashboardアクセス
インストール後、kubectl get svc -n linkerdでサービス情報が確認できます。linkerd-viz-dashboardというサービスが作成されます。 -
ブラウザでのアクセス
bash
kubectl port-forward svc/linkerd-viz-dashboard -n linkerd 9091:9091
http://localhost:9091にアクセスし、サービスの依存関係やネットワーク遅延を確認してください。
メトリクス視認性の検証方法
- メトリクスダッシュボード:
- サービスごとのリクエスト数、成功率、遅延などのデータが表示されます。
- メトリクス取得コマンド例:
bash
kubectl get metrics --namespace default
mTLS自動ローテーションの初期設定
LinkerdはデフォルトでmTLSを有効にしています。このセクションでは、信頼されたカットオフポリシーと自動証明書更新メカニズムについて解説します。
信頼されたカットオフポリシーの設定
- 自動更新:
linkerd install時に--set global.tls.autoGenerate=trueを指定すると、証明書が1年間有効になります。- 手動更新(例):
bash
kubectl delete secret linkerd-webhook-server-tls -n linkerd
linkerd installで再生成するか、カスタム証明書を指定可能です。
注意点
Linkerdの最新バージョンでは自動更新周期が変更されている可能性があります。公式ドキュメントで確認してください。
セキュリティ証明書の自動更新メカニズム
- 自動更新の仕組み:
- 証明書は1年ごとにローテーションされます。
- 手動介入要否:
- 通常の運用では介入は不要ですが、証明書発行機関(CA)が変更になった場合などは管理が必要です。
導入後確認事項とトラブルシューティング
Linkerd導入後のチェックポイントとよくあるエラー例を整理します。ここでの手順に従うことで、初期の問題を迅速に対応できます。
基本的なサービス動作テスト
-
アプリケーションの動作確認:
bash
curl -v http://helloworld.default.svc.cluster.local:8080
レスポンスがHello world!と表示されるかを確認してください。 -
通信経路の確認:
bash
kubectl get pod helloworld-86754c9df-2j9gk -o jsonpath='{.status.podIP}'
よくあるエラー例と対処法
| エラータイプ | 対応手順 |
|---|---|
| Linkerdコントローラーが起動しない | kubectl describe pod -n linkerdでログを確認し、リソース配分やポリシーの設定を再検証 |
| プロキシ注入失敗 | テンプレートファイルに誤りがないか再確認 |
| Dashboardアクセス不可 | kubectl port-forwardが正しく実行されているか確認 |
まとめ
- Linkerd導入の準備は、Kubernetes環境とCLI/Helmツールの確認から始める
- CLIは手軽さを重視し、Helmはチームでの運用に適す
linkerd injectでPodにプロキシが正しく挿入されているかを検証する- vizチャートによりサービスの可視化が可能
- mTLSによる自動ローテーション設定でセキュリティ強化が図れる
- インストール後のテストとエラー対応は、導入成功の鍵となる
本ガイドに従ってLinkerdを導入し、サービスメッシュの基本機能を実際に体験してみてください。操作性と信頼性が得られることで、DevOpsエンジニアとしてのスキルアップにもつながるでしょう。