BookinfoデモでIstioを体感する
Bookinfoアプリケーション
今回はIstioが提供しているサンプル・アプリケーション「Bookinfo」を利用して、Istioの機能の一端を体験してみましょう。Bookinfoは、書籍の紹介とレビューを表示する参照系アプリケーションで、マイクロサービス・アーキテクチャー(Microservices Architecture、MSA)に基づき、4つのサービスから構成されています(図1)。MSAらしく各サービスはそれぞれ異なるプログラミング言語で実装されています(Polyglot)。
各サービスの概略は、以下の通りです。
- productpage:Pythonで実装されたBackend for Frontendサービスです。ユーザーからのリクエストを受け取ると、detailsサービスとreviewsサービスを呼び出して、それぞれ書籍情報とレビュー情報を入手し、Webページを返します
- details:書籍情報を管理するサービスであり、Rubyで実装されています
- reviews:書籍のレビュー投稿を管理するサービスであり、Javaで実装されています。ratingsサービスを呼び出して、書籍のレイティング(評価)を取得します
- ratings:書籍のレイティング情報を管理するサービスです。Nodeで実装されています
ブラウザー上のユーザー体験は、「The Comedy of Errors」という書籍の情報とレビュー結果が表示されるというシンプルなものです。その一方で、Bookinfoは3つのバージョンのreviewsサービスの実装を包含しており、レイティングの表示内容は、バージョンごとに以下のように変わります。
- V1:レイティングを表示しない(図2)
- V2:レイティングを黒い星で表示する(図3)
- V3:レイティングを赤い星で表示する(図4)
すなわち、レイティングが黒い星で表現されていたら、「V2のreviewsサービスが呼ばれているな」と直感的に分かります。トラフィック管理のデモンストレーションの確認に最適なアプリケーションとなっているのです。IstioのWebサイト(https://istio.io/)には、Bookinfoアプリケーションを利用して学習するためのドキュメントが公開されています。本稿では、Tasks > Traffic Managementのドキュメントを基にして、Istioの利用方法を解説していきます。
作業の流れ
実際にBookinfoアプリケーションを使う前に、次にあげる3つの準備作業が必要となります。
- Kubernetes環境(クラスターとデスクトップ)の準備
- Istioの導入
- Bookinfoアプリケーションの導入
2018年10月時点で、Istioは、導入先のオーケストレーション・フレームワークとしてKubernetesとConsulをサポートしていますが、今回はKubernetesを利用します。これを含め、本稿では下記の環境を前提に説明を進めます。
- Kubernetes 1.10.8
- Istio 1.0.2
- Kubernetesクラスター環境:IBM CloudのKubernetesサービスであるIBM Cloud Kubernetes Service(IKS)
- Kubernetes&Istioを操作するデスクトップ環境:Ubuntu 16.04
KubernetesとIstioのいずれも、2018年10月時点での安定したバージョンを選択していますが、他のバージョンであっても大きな違いはありません。またKubernetesクラスターの作成手順は、各Kubernetesサービス独自の手順に基づいて実施する必要がありますが、それ以外についてはKubernetesのコマンド・ライン・インターフェースであるkubectlを介した、Kubernetesサービス実装に依存しない標準的な手順で実施いただけます。他のKubernetesサービスを利用した場合でも、操作手順や動作に違いはありません。
Kubernetes環境(クラスターとデスクトップ)の準備
ご利用されるKubernetesサービスの手順に基づいて、Kubernetesクラスターとデスクトップ環境を準備します。利用されるKubernetesサービスのマニュアルを参照の上で、環境をセットアップしてください。IstioのWebサイト(https://istio.io/docs/setup/kubernetes/)には、Kubernetesの各実装ごとにIstio導入のHints&Tipsが記載されていますので、これらの情報も確認しておくと良いでしょう。
参考までに、本稿で利用するIBM Cloud Kubernetes Service(以下、IKS)を前提に、Kubernetesデスクトップとクラスターのセットアップ手順を説明します。まず、こちらのWebサイト(https://console.bluemix.net/docs/cli/index.html#overview)の手順に従って、IBM CloudとIKS、Kubernetesの操作に必要なコマンド・ライン・インターフェース(CLI)を導入します(註1)。最終的に、以下に挙げるコンポーネントが導入されます。
- Homebrew(Macのみ)
- Git
- Docker
- Helm
- kubectl
- curl
- IBM Cloud Developer Toolsプラグイン
- IBM Cloud Functionsプラグイン
- IBM Cloud Container Registryプラグイン
- IBM Cloud Kubernetes Serviceプラグイン
- sdk-genプラグイン
註1:
IBM Cloudのオンライン・マニュアル(コンソールのヘッダーに「資料」という名称で表示されています)の各ページのURLは変更される可能性があります。もし本稿で示したIBM Cloudオンライン・マニュアルが無効となっている場合には、オンライン・マニュアルの検索機能で「IBM Cloud CLI」等適当な文字列で検索してみてください。
デスクトップ環境の準備ができたら、次に示す流れに沿って、IKS上にKubernetesクラスターを作成します(IBM Cloudの従量課金(PAYG)アカウントまたはサブスクリプション・アカウントをご用意ください。2018年10月時点、ライト・アカウントではKubernetesクラスターを作成することはできません)。まずブラウザーでIBM Cloudコンソール(https://console.bluemix.net/)にアクセスし、ログインします。ダッシュボードが表示されますが、ヘッダー・メニューで「カタログ」をクリックします。そして表示されたカタログ・ページの左側のペインで「コンテナー」をクリックします(図5)。
カタログ・ページの右側のペインに表示される「IBM Cloud Kubernetes Service」タイルをクリックします(図6)。
Kubernetesクラスター・ページが表示されます(図7)。右上あるいは右下に表示される「作成」ボタンをクリックします。
すると、新規クラスターの作成ページが表示されます(図8、図9)ので、必要項目を入力していきます。それぞれのフィールドの意味は次の通りです。フィールドの入力を終えたら、「作成」ボタンをクリックします。
- ロケーション:IBM Cloudのリージョン(データセンターの集合体)を選びます。東京を選択します
- クラスター・タイプ:無料と標準があります(東京リージョンは標準タイプしかありません)。Istioはそれなりにコンピューティング・リソースを必要とするので、標準を選択します
- 可用性:可用性のレベルを指定します。データセンター障害に耐えうる複数ゾーンと、単一のデータセンターから成る単一ゾーンがあります。今回はテスト用途なので、単一ゾーンを選択します。
- Worker Zone:データセンターを指定します。今回はTok04を選択します。
- Kubernetesのバージョン:Kubernetesのバージョンを選択します。今回は1.10.8を使用します。
- ハードウェアの分離:独立した物理サーバーを占有使用するシングル・テナント・モデル(「仮想 - 占有」あるいは「ベア・メタル」)あるいは物理サーバーを他のテナントと共有使用するマルチ・テナント・モデル(「仮想 - 共有」)のいずれかを指定します。今回は「仮想 - 共有」を使います。
- フレーバー:利用するマシンの仕様を指定します。Istioはそれなりにコンピューティング・リソースを必要とするので、「4コア 16GB RAM」を選択します。
- クラスター名:任意の名称を付与します。ここでは「tok04std」としています。
入力を済ませて「作成」ボタンをクリックすると、画面が変わり、Kubernetesクラスターの詳細画面が表示されます(図10)。画面上部のクラスター名の横に、現在のクラスターの状況が表示され、「要求中」「デプロイ中」「保留中」など刻一刻と変化していきます。数分~十数分後、状況が「デプロイ中」から緑のインジケーターを伴った「通常」に変わったら、クラスター作成は正常に終了したことになります。
デスクトップ環境からIKSのKubernetesクラスターには、次のような流れで接続します。まずIBM Cloudにログインします。
ibmcloud login -u <IBM Cloudのアカウント名> -p <IBM Cloudのアカウントのパスワード> -o <IBM Cloudで利用する組織名> -s <IBM Cloudで利用するスペース名>
続いて、利用するIBM Cloudのリージョン(データセンターの位置する組織)をセットします。東京はap-northリージョン(北アジア太平洋地域)に位置するので、次のようにコマンドを実行します。
ibmcloud cs region-set ap-north
次にクラスター構成情報を取得します。
ibmcloud cs cluster-config <クラスター名>
すると、Kubectlのコンテクスト情報を含むYAMLファイルが得られます。コマンド実行結果の標準出力メッセージを参考にして、環境変数に設定します(図11)。
export KUBECONFIG=<YAMLファイルへのパス>
以上でIKSを用いたKubernetes環境の準備は整いました。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- コンテナ上のマイクロサービスの認証強化 ~IstioとKeycloak~
- Kubernetesをサービスメッシュ化するIstioとは?
- サービスメッシュを使ってみよう
- コンテナ上のマイクロサービスの認証強化 ~QuarkusとKeycloak~
- コンテナ上のマイクロサービスの認証強化 ~StrimziとKeycloak~
- Kubernetesの新しいネットワーク機能、Gateway APIを理解する(前編)
- CloudNative Days Fukuoka 2023、GoogleによるGKE上のGateway APIの解説セッションを紹介
- Kubeflowを構築する
- コマンドラインツールを用いずにCI/CDを行うGitOpsとは?
- NGINX Ingress Controllerの柔軟なアプリケーション制御、具体的なユースケースと設定方法を理解する