ゼロダウンタイムKubernetesのためのクラスタフェデレーション
Linkerdのサービスメッシュを活用し、複数のKubernetesクラスタをフェデレーションすることで、ダウンタイムゼロの運用を実現する方法を解説。クラスタ間のトラフィックルーティングやフェイルオーバー戦略について、具体的な設定例とともに紹介する。
背景メモ
LinkerdはCNCF(Cloud Native Computing Foundation)がホストするオープンソースのサービスメッシュ。サービスメッシュとは、Kubernetesクラスター内のマイクロサービス間通信を統制・監視するためのインフラ層で、暗号化、トラフィック分割、可観測性などをアプリケーションコードの変更なしに追加できる。
この記事では、Linkerdの「フェデレーション機能」に焦点が当てられている。Kubernetesの文脈で「フェデレーション」とは、複数の独立したクラスター(例:東京とシンガポール、あるいはステージング環境と本番環境)をあたかも1つの論理的なネットワークのように接続する手法を指す。
注目すべき点は「ゼロダウンタイム」という目標。従来のクラスター間連携では、DNSの切り替えやロードバランサーの設定変更時に数秒〜数分のダウンタイムが発生しうる。Linkerdのフェデレーションは、相互TLSと透過的なHTTPルーティングを用いて、クラスター間のトラフィックを途切れなく移行させる設計となっている。
背景として、Kubernetesのマルチクラスター運用は急速に一般化しているが(地理的冗長化、クラウドベンダーロックイン回避、開発と本番の分離など)、標準的なKubernetesだけではクラスター間の安全なサービス間通信を容易に実現できない。LinkerdやIstioなどのサービスメッシュがこのギャップを埋めている。