ニュース
マイクロサービスによる超分散環境を管理する「Istio」のメリットは?
2018年8月30日 06:00
日本アイ・ビー・エム株式会社(日本IBM)は24日、IBM自身も開発に参画しているオープンソースプロジェクト「Istio」の最新動向やメリットなど、メディア向けに解説した。
Istioは、IBM、Google、Lyftが2017年5月に最初のパブリックリリースを発表したマイクロサービスの管理フレームワークで、2018年7月31日には、正式版となる「Istio 1.0」がリリースされている。
クラウドネイティブコンピューティングに必要な技術要素
「ビジネスイノベーションに必要なITの要件とは、ビジネスのニーズに即座に対応できるアプリケーション開発の『スピード』、変更や保守が容易にできる『柔軟性』。そして、これらを兼ね備えたモダンなITの技術トレンドは、クラウドネイティブコンピューティングだ」と、日本IBM IBMクラウド事業本部 テクニカル・セールス エグゼクティブ・テクニカル・スペシャリストの樽澤広亨氏は切り出す。
そして同氏は、クラウドネイティブコンピューティングを実現する技術要素として「コンテナ化」「動的なオーケストレーション」「マイクロサービス指向」の3つを挙げた。
1つ目の「コンテナ化」は、Dockerに代表されるコンテナエンジンを用いた仮想化技術だ。アプリケーションとミドルウェアを、コンテナと呼ばれる小さな単位でパッケージングすることで、迅速なデプロイを可能にする。また、OSとハードウェアはコンテナから隠ぺいされており、コンテナエンジンが動く環境であれば、どこにでも移行することができる。
2つ目の「動的なオーケストレーション」は、Kubernetesなどの、コンテナ管理を自動化するオーケストレーションエンジンを指している。システムの規模が大きくなるに従い、複数のコンテナをクラスタ化して利用することも多くなる。しかし、異なるホストで稼働しているコンテナ同士の通信はNATを経由しなければならないなど、扱うコンテナ数が増えれば増えるほど管理は複雑化していく。そのため規模の大きなシステムでは、コンテナのパッケージ管理、クラスタリング、スケジューリングなど、コンテナをクラスタ化する際に必要な処理を自動化できるオーケストレーションエンジンが必要になる。
そして樽澤氏が挙げた3つ目の技術要素である「マイクロサービス指向」とは、マイクロサービスと呼ばれる独立した小さなソフトウェアを組み合わせ、アプリケーションを構成するアーキテクチャの採用だ。
マイクロサービスは、それぞれが独立したプラガブルなソフトウェアであり、特定のマイクロサービスに追加や変更を行ってもほかには影響しないため、アプリケーション全体の停止を最小限に抑えることができる。既存のモノリス(1枚岩)なアプリケーションとは異なり、スケーラビリティや変更に対する柔軟性が高い。
スピードの点においても、マイクロサービスごとに別チームが同時並行で開発可能であり、ユーザーのニーズに合わせて必要な機能を追加したり変更したりといった、アジャイル開発やDevOpsを進めやすい。また、マイクロサービスごとに異なるプログラミング言語を使用できるので、それぞれのチームが得意な言語で開発することも可能だ。
なお、コンテナおよびそのオーケストレーションはクラウドプラットフォーム(基盤)の、マイクロサービス・アーキテクチャは、クラウドネイティブなアプリケーション(業務)の技術要素である。
樽澤氏は「クラウドネイティブコンピューティングには、基盤と業務の両方が必要で、その両方に注力することが大事。クラウドベンダーはこれまで、プラットフォームには注力してきたが、アプリケーションにはあまり力を入れてこなかった。ところが、最近ではモダンなITシステムの技術トレンドとして、マイクロサービス・アーキテクチャが注目されるようになり、クラウドネイティブなアプリケーション開発の主流となりつつある」と説明した。
煩雑なマイクロサービス管理の課題を解決する「Istio」
マイクロサービスで構成されるアプリケーションは、サービス間を接続するネットワークが網の目のように張り巡らされている。そのため、構成するマイクロサービスの数が増えると、管理が複雑化することが課題となってくる。
また可用性や負荷分散のため、マイクロサービスを複数のホストで稼働させるケースも多く、場合によってはマルチクラウド、あるいはハイブリッドクラウドといった複数のクラウドにマイクロサービスが分散されることもある。何百、場合によっては何千というマイクロサービスで構成されるようなアプリケーションでは、すべての要素を人力で管理することは困難で、可用性やセキュリティにも大きく影響する。
このような課題を解決するために登場したのがIstioだ。
Istioは、マイクロサービス間を接続するネットワークのルーティング、ロードバランシング、通信の暗号化、認証/認可、監視などを担うプラットフォーム。アプリケーション開発者が超分散システムであることを意識することなく開発できるよう、あるいは運用者が機能リリースのための煩雑なデプロイ作業から解放されるよう、Istioはマイクロサービスとネットワークの間に、インフラとサービスデプロイメントのレイヤである「サービスメッシュ」を提供する。
ちなみに、Istioとはギリシャ語で“帆”を意味する単語であるという。
樽澤氏は「クラウドは分散コンピューティングではあるが、マイクロサービス・アーキテクチャを採用することで、これまで経験したことがないような超分散環境に直面することになる。Istioは企業システムを安定稼働させるよう、サービスメッシュを最適化する。このような仕組みを使わずに管理することは現実的ではない」と説明する。
Istioは、Kubernetes環境の上でマイクロサービスを管理する。Pod(Kubernetesの管理単位。IPアドレスを共有するため、Podはホストに相当する)内にサイドカー型プロキシの「Envoy」を配置し、マイクロサービス間の通信をすべてEnvoy経由で行う。
ルーティングやロードバランシングといった制御ロジックもEnvoyに組み込まれる。すべてのEnvoyは、コントロールプレーンで管理される。コントロールプレーンは、Envoyの構成管理を行う「Pilot」、アクセス制御やポリシー設定を行う「Mixer」、セキュリティのためのMutual TLSの認証を行う「Citadel」で構成されている。
なお、EnvoyはもともとLyftが開発し、オープンソース化したサービスプロキシだ。IstioがEnvoyを採用した理由について樽澤氏は「C++11で書かれており、非常に軽微で高速」と説明した。
樽澤氏はIstioについて「プラットフォーム非依存」「アプリケーション非依存」であることを強調し、「既存コードに追加や変更は必要ない」と述べる。また、現状はKubernetes環境で動作しているが、Istioはプラットフォーム非依存を掲げており、Mesosなど複数のプラットフォームを想定しているという。同様に、Envoy以外のプロキシをサポートする可能性もあるとした。
Istioによるトラフィック管理のユースケース
Istioで可能になることとして樽澤氏は、「トラフィック管理」「セキュリティ」「監視」を挙げている。
特にトラフィック管理については、ルーティング、ロードバランシング、タイムアウト/再試行、ブルー/グリーンデプロイメント、カナリアリリース、A/Bテスト、フォールトインジェクション(Chaos Engineering)、サーキットブレーカなどが可能になると説明し、ユースケースをいくつか説明した。
ブルー/グリーンデプロイメントとは、サービスを停止することなく新たなサービスをリリースする手法。現行本番環境「ブルー」とは別に次期本番環境「グリーン」を用意し、あるタイミングでエンドユーザーのアクセス先をブルーからグリーンに切り替えることで、システムを停止することなく継続的にサービスをリリースできる。
カナリアリリースとは、アクセスの90%を本番系システムへ、10%を開発中の次期システムへと経路を振り分ける。その結果、次期システムの稼働に問題がないようであれば、すべてのアクセスを次期システムへと切り替える手法。リクエストの内容によって、例えばテストユーザーだけを次期システムに振り分けるといった「コンテンツベースドルーティング」と呼ばれる運用もできる。
フォールトインジェクションは、カオスエンジニアリングとも呼ばれる手法。意図的なネットワークの遅延やエラーコードを送信することで、システムの耐障害性テストを実施する。
サーキットブレーカは、一定回数マイクロサービスの呼び出しに失敗した(応答が返ってこない)場合、プロキシサーバーが即座にエラーを返し、システムリソースのブロックやシステム全体のダウンを防ぐ手法だ。
プロキシサーバーはエラーを返すだけではなく、バックエンドで呼び出し先のマイクロサービスのヘルスチェック(死活をモニタリング)し、障害回復を確認次第、自動的にエラーを返すことをやめて通常の動作に戻る。
IstioとIBM Cloudの統合
IBM Cloudでは、IBM Cloud Kubernetes Services(IKS)および、IBM Cloud Private(ICP)上で、Istio 1.0をサポートし、Istio 1.0のHelmチャート(Kubernetes用のパッケージマネージャ)も提供している。
IKSはIBM CloudデータセンターでホストされるKubernetesで、2017年5月にリリースされ、2017年12月には東京データセンターでもリリースされた。ICPはオンプレミス・データセンターで稼働するKubernetesサービスで、2017年10月にリリースされている。ICPはIBM Cloudや他社のパブリッククラウドにデプロイすることも可能だ。
IBMのクラウドネイティブ関連のオープンテクノロジーへの貢献について、樽澤氏は、Cloud Native Computing Foundation(CNCF)の創設メンバーであり、現在もプラチナメンバーであること、現在のChair of Governing BoardがIBMのTodd Moore氏であることなどを紹介。
さらにIstioプロジェクトにおいては、創設メンバーであり、主要な開発メンバーだと説明する。そのほかにも、Kubernetes上でコンテナとサーバーレスを両立するインフラを実現する「Knative」は、Googleとの協業プロジェクトとなっている。
樽澤氏は「IBMは今後もオープンテクノロジーに貢献し、お客さまには最新機能をいち早くリリースする」と述べ、オープンテクノロジーへの貢献が、IBM Cloudのアドバンテージにつながっていることを強調した。