KubeCon NA 2021からサービスメッシュの2セッションを紹介

KubeCon/CloudNativeCon NA 2021から、サービスメッシュに関連したセッションを2つ紹介する。1つ目はLinkerdの最新情報を紹介するセッション、2つ目はインドネシアの電子決済システムであるGoPayのエンジニアが紹介するKubernetes上でIstioを導入したユースケースのセッションだ。

動画:Overiew and State of Linkerd
Migrating to Service Mesh at Scale to Support Billions of Transaction

Linkerdのセッションは、Linkerdの開発元であるBuoyantのCTOであるOliver Gould氏が行ったもので、Linkerdの概要と最新情報を紹介する内容となっている。

GoPayのセッションは、Kubernetesにシステムを移行した後に自社製のProxyが技術的負債になってしまうという危機感から、オープンソースのサービスメッシュ(この場合はIstio)に移行した際の苦労話を紹介するものだ。

Linkerdの最新情報

セッションを行うBuoyantのOliver Gould氏セッションを行うBuoyantのOliver Gould氏

Linkerdは今回のキーノートセッションでもGraduationしたことが紹介されたように、早い段階でCNCFにホストされたプロジェクトで、約5年という時間を経て卒業したことになる。

Linkerdの概略Linkerdの概略

Linkerdの概略を紹介するこのスライドでは、多くのユーザー企業を抱えることのアピールに加えて、2017年にバージョン2がリリースされたことを記載している。これは、メモリーセーフなプログラミング言語であるRustを使ったサイドカープロキシー(データプレーン)を導入したことを意味している。BuoyantはRustコミュニティにも多くの貢献を行っており、非同期ライブラリーの開発を行っていることでも知られている。

Linkerdの特徴。観測性と信頼性、シンプルさが売りLinkerdの特徴。観測性と信頼性、シンプルさが売り

LinkerdはKubernetesに特化することでシンプルな使い勝手を追及しており、ウルトラライト、ウルトラファースト、つまり超軽量、超高速なソフトウェアとして実装されている。

超軽量であることは次のスライドでも紹介されているが、何よりもKubernetesに特化していることで、運用や管理のために新しいことを学習しなければいけないという無駄を省いている点がLinkerdのメリットと言える。

Less is MoreがモットーのLinkerdLess is MoreがモットーのLinkerd

特に可観測性(オブザーバービリティ)については、これまでデフォルトでインストールされていたPrometheusやGrafanaがViz-Extensionとしてオプション扱いになったことも大きく貢献していると言えるだろう。

コントロールプレーンと可視化のエクステンションに分かれているコントロールプレーンと可視化のエクステンションに分かれている

このスライドにあるApplicationにサイドカーとしてデプロイされるのが、Rustで書かれたLinkerd2-Proxyだ。

またPod間の通信を暗号化するmTLSについても、アプリケーションに一切手を加えずにすぐに使い始められることを強調し、セキュアな通信のために余計な労力が要らないことを解説した。

Pod間通信はmTLSで実装されるPod間通信はmTLSで実装される

クラスター間の通信にはMulti-Cluster Gatewayを導入している。これでマルチクラスター、オンプレミスとパブリッククラウドを連携させるような場合でも、セキュアな通信が可能となったことを紹介した。

マルチクラスター通信も可能にマルチクラスター通信も可能に

そしてLinkerdとIstioとの比較については次のスライドで解説されている。Istioが多くの機能を備えた汎用のソフトウェアであるのに比べて、LinkerdはKubernetes専用であることが大きな違いだろう。BuoyantのCEOであるWilliam Morgan氏は「Istioを使うということはIBMやCiscoが推薦するソフトウェアを使うということだ。IBMのソフトウェアを選んでクビになったエンジニアはいないだろう?」と述べているが、それもスライドにちゃんと記載されているのは微笑ましい。

IstioとLinkerdの違いIstioとLinkerdの違い

LinkerdとIstioの違いのひとつは性能だ。このスライドではサイドカーとしてPodにデプロイされたLinkerdとIstioを比較している。Proxyを入れてない場合(Baseline、黄色のバー)とLinkerd(青色のバー)、そしてIstio(オレンジ色のバー)のサイドカーを入れた場合のレイテンシー比較、CPUとメモリーの消費量などを比較して、Istioに比べてLinkerdが圧倒的に速く軽量であることが示されている。

LinkerdとIstioの性能比較LinkerdとIstioの性能比較

この比較は2021年4月にMicrosoftが買収を発表したKinvolkというベンチャーによる調査を元にしている。KinvolkはFlatcar Container LinuxというランタイムやLokomotiveというパブリッククラウドに依存しないセルフホストなKubernetesディストリビューションを開発していることでも知られている。

参考:Benchmarking Linkerd and Istio

またLinkerdバージョン2.11の新機能であるAuthorization Policyを紹介した。

新しいポリシーベースの認証機能を紹介新しいポリシーベースの認証機能を紹介

他にもこれからの開発予定として、ポリシーを使ったサーキットブレーカー、Proxyにおけるio-uringの実装などを紹介。

これから開発される新機能を紹介これから開発される新機能を紹介

コミュニティのアップデートとしては、Graduationの他にユースケースを共有するためのCommunity Anchor Programなどが用意されている。また細かい話だが、これまでSlackを使って行われていたチャット機能についてはDiscordに移行したようだ。以前からSlackではなくてDiscordに変えたいと言っていたWilliam Morgan氏の考えが実現したのだろう。

CNCFの新しいキャラクター、ロブスターのLinkyCNCFの新しいキャラクター、ロブスターのLinky

Gould氏が「今日はスペシャルゲストが来ている」と言って紹介したのが、ロブスターのLinkyだ。CNCFのインキュベーションから卒業したHelmにもHazelというキャラクターが与えられているが、すべての卒業したプロジェクトに設定されているわけではないようなので、キャラクターを用意されているのは意味があるのだろう。

KubeConのキーノートセッションで紹介されたLinkerdKubeConのキーノートセッションで紹介されたLinkerd

KubeConのキーノートでもIstioに比較して高速であることが強調されていた。

BuoyantのブースにいたCEOのWilliam Morgan氏BuoyantのブースにいたCEOのWilliam Morgan氏

Morgan氏は今回のKubeConについて「以前のカンファレンスとは違うけど、人が少ないぶんだけ深い話ができるようになっているし、企業としては良かったのでは。サービスメッシュについてもブームは過ぎたと思うが、導入は進んでいるし、Linkerdにとっては良い方向に向かっている」と語ってくれた。

Istioへのマイグレーションの事例

ここからはIstioのマイグレーションに関するセッションを紹介する。

これはインドネシアの電子決済システムであるGoPayのエンジニア2名がインドネシアからロサンゼルスにやって来て実施したセッションで、参加者もスピーカーもほぼ北米から来ていた今回のKubeConの中では異色のセッションと言えるだろう。

インドネシアの配車サービスのGojekのグループ企業であるGoPayによるセッションインドネシアの配車サービスのGojekのグループ企業であるGoPayによるセッション

GoPayは過去のKubeConでも講演を行っている。今回のセッションは、Kubernetesに移行した後にIstioを導入した際の苦労話と言った内容となっている。

Istioの導入は2020年からIstioの導入は2020年から

GoPayのシステム全体がKubernetesベースで開発されているという前提から、Envoyを使った自社製のProxyを使ってサービスメッシュを使っていた。しかしこれが技術的負債になってしまうというリスクを避けるために、Istioへの移行を行ったという。

1年かけて2%のワークロードしか移行できなかった1年かけて2%のワークロードしか移行できなかった

移行が進まない原因として、移行するための無駄な労力が必要だったことを挙げている。そのためにGoPayは、直接KubernetesやIstioの構成ファイルをデベロッパーに書かせるのではなく、Helmのチャートで一段階抽象化するレイヤーを用意することで、ダッシュボードからIstioの構成が生成されるように工夫したことを解説した。

Helmを使って抽象化Helmを使って抽象化

このスライドでわかることは、Helmによって抽象化することで、現在のKubernetesやIstioだけではなく今後、開発される新しいシステムにも応用することを目指しているようだ。

Helmによる抽象化を他のシステムに応用Helmによる抽象化を他のシステムに応用

結果として抽象化を実装したことで、4か月で50%以上のサービスがIstioに移行できたという。ここからわかるのは、Kubernetesだけでもデベロッパーにとっては新しく難しいという状況に加えて、Istioという新しいサービスメッシュのネットワークを直接触らせるのではなく、抽象化しないと使えないという事実だろう。逆に言えば、インフラストラクチャーチームにHelmを使って抽象化レイヤーを作れるだけのデベロッパーがいないと、この事例のような力技は使えない方法論だろう。

インフラの上に抽象化レイヤーを作ることが必須インフラの上に抽象化レイヤーを作ることが必須

また既存のシステムと新システムを並行して運用する場合、新しいシステムをデフォルトにしないと使い慣れた方法に頼ってしまうというエンジニアの傾向を認識することが必要だ。

とにかくシンプルでKubernetesに特化したLinkerdに対し、多機能で非Kubernetes環境でも使えるIstioを使いこなすためのコツを紹介するセッションとなった。

Original Post>