Istio は、トラフィック管理、可観測性、セキュリティ、およびポリシー機能を提供するオープンソースのサービスメッシュです。Kubernetes と統合された Istio は、コンテナアプリケーションの管理と制御を改善し、アプリケーションのパフォーマンス、セキュリティ、および信頼性を向上させるのに役立ちます。このトピックでは、Istio を使用して、VNode を使用して Elastic Container Instance に接続されているセルフマネージド Kubernetes クラスターに Bookinfo アプリケーションをデプロイする方法について説明します。
背景情報
Istio は、マイクロサービス間のトラフィックを管理し、ネットワーク通信とセキュリティリスクを処理するために使用されるオープンソースのサービスメッシュプラットフォームです。Istio は Kubernetes と統合して、標準的で安全なトラフィック管理を提供し、デプロイと O&M 作業を簡素化できます。
Bookinfo は、オンライン書店のあるカタログエントリを模倣し、本の説明、ISBN やページ数などの詳細、レビューなどの情報を表示します。Bookinfo は異種アプリケーションであり、さまざまな Istio 機能を示すためにさまざまな言語で記述された 4 つのマイクロサービスで構成されています。Bookinfo のエンドツーエンドアーキテクチャ:
Productpage:詳細とレビューのマイクロサービスを呼び出してページを生成する Python マイクロサービス。Productpage マイクロサービスは、ログオンとログオフ機能を提供します。
Details:書籍情報を含む Ruby マイクロサービス。
Reviews:書籍レビューを含む Java マイクロサービス。Reviews マイクロサービスには、次の 3 つのバージョンがあります。
バージョン 1:Ratings マイクロサービスを呼び出しません。
バージョン 2:Ratings マイクロサービスを呼び出し、1 ~ 5 個の黒い星を使用して書籍を評価します。
バージョン 3:Ratings マイクロサービスを呼び出し、1 ~ 5 個の赤い星を使用して書籍を評価します。
Ratings:書籍レビューに基づいて生成された評価を提供する Node.js マイクロサービス。
詳細については、Istio をご覧ください。
前提条件
このトピックの説明は、セルフマネージド Kubernetes クラスターに適用されます。クラスターが以下の条件を満たしていることを確認してください。
セルフマネージド Kubernetes クラスターに VNode がデプロイされています。
セルフマネージド Kubernetes クラスターがデータセンターにデプロイされている場合、データセンターは Alibaba Cloud に接続されています。
セルフマネージド Kubernetes クラスターが Elastic Compute Service (ECS) インスタンスにデプロイされ、ネットワークプラグインが Flannel の場合、Kubernetes クラウドコントロールマネージャー (CCM) がクラスターにデプロイされていることを確認してください。これにより、Elastic Container Instance が実際のノード上のポッドと相互接続されます。詳細については、CCM のデプロイ をご覧ください。
準備
Istio をインストールします。詳細については、Getting Started をご覧ください。
名前空間を作成し、名前空間にラベルを設定します。
kubectl create namespace istio-test kubectl label namespace istio-test istio-injection=enabled
手順
Bookinfo アプリケーションをデプロイする
bookinfo.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。
説明次の YAML サンプルコードでは、ポッドを VNode にスケジュールするために nodeSelectors が追加されています。eci-profile を設定して、ポッドを VNode にスケジュールすることもできます。詳細については、VNode へのポッドのスケジュール と eci-profile を使用した VNode へのポッドのスケジュール をご覧ください。
Bookinfo アプリケーションをデプロイします。
kubectl -n istio-test apply -f bookinfo.yaml
次のコマンド出力が返されます。
Bookinfo のステータスを表示します。
kubectl -n istio-test get pods -o wide
次のコマンド出力が返されます。
Bookinfo のマイクロサービスを確認します。
kubectl -n istio-test get services
次のコマンド出力が返されます。
Istio ゲートウェイをデプロイする
bookinfo-gateway.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。
Istio ゲートウェイをデプロイします。
kubectl -n istio-test apply -f bookinfo-gateway.yaml
次のコマンド出力が返されます:
Istio ゲートウェイを表示します。
kubectl -n istio-test get gateway
次のコマンド出力が返されます。
Bookinfo のマイクロサービスを検証する
Istio ゲートウェイのホストアドレスを取得します。
クラスタータイプに基づいて Istio Ingress サービスを選択します。このトピックでは、Istio Ingress サービスとして LoadBalancer を選択します。
kubectl -n istio-system get service istio-ingressgateway
次のコマンド出力が返されます。
返されたメッセージの istio-ingressgateway パラメーターは、Istio Ingress Gateway のホストアドレス(
IP:Port
形式)を示します。このトピックでは、ホストアドレスは10.96.XX.XX:80
です。テストポッドを作成して、Bookinfo のマイクロサービスを検証します。
test-pod.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。
ポッドをデプロイします。
kubectl apply -f test-pod.yaml
テストポッドにログオンし、次のコマンドを実行して Bookinfo のマイクロサービスを検証します。
kubectl exec -it centos -- bash
curl -s http://10.96.XX.XX:80/productpage | grep -o "<title>.*</title>"
10.96.XX.XX:80
を手順 1 で取得したホストアドレスに置き換えます。<title>Simple BookStore App<title>
が返された場合、Istio は VNode 上で実行されています。コマンド出力の例: