すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:Istio に Bookinfo アプリケーションをデプロイする

最終更新日:Dec 28, 2024

Istio は、トラフィック管理、可観測性、セキュリティ、およびポリシー機能を提供するオープンソースのサービスメッシュです。Kubernetes と統合された Istio は、コンテナアプリケーションの管理と制御を改善し、アプリケーションのパフォーマンス、セキュリティ、および信頼性を向上させるのに役立ちます。このトピックでは、Istio を使用して、VNode を使用して Elastic Container Instance に接続されているセルフマネージド Kubernetes クラスターに Bookinfo アプリケーションをデプロイする方法について説明します。

背景情報

Istio は、マイクロサービス間のトラフィックを管理し、ネットワーク通信とセキュリティリスクを処理するために使用されるオープンソースのサービスメッシュプラットフォームです。Istio は Kubernetes と統合して、標準的で安全なトラフィック管理を提供し、デプロイと O&M 作業を簡素化できます。

Bookinfo は、オンライン書店のあるカタログエントリを模倣し、本の説明、ISBN やページ数などの詳細、レビューなどの情報を表示します。Bookinfo は異種アプリケーションであり、さまざまな Istio 機能を示すためにさまざまな言語で記述された 4 つのマイクロサービスで構成されています。Bookinfo のエンドツーエンドアーキテクチャ:

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 のデプロイ をご覧ください。

準備

  1. Istio をインストールします。詳細については、Getting Started をご覧ください。

  2. 名前空間を作成し、名前空間にラベルを設定します。

    kubectl create namespace istio-test
    kubectl label namespace istio-test istio-injection=enabled

手順

Bookinfo アプリケーションをデプロイする

  1. bookinfo.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

    説明

    次の YAML サンプルコードでは、ポッドを VNode にスケジュールするために nodeSelectors が追加されています。eci-profile を設定して、ポッドを VNode にスケジュールすることもできます。詳細については、VNode へのポッドのスケジュールeci-profile を使用した VNode へのポッドのスケジュール をご覧ください。

    bookinfo.yaml ファイルを展開する

    # Copyright Istio Authors
    #
    #   Licensed under the Apache License, Version 2.0 (the "License");
    #   you may not use this file except in compliance with the License.
    #   You may obtain a copy of the License at
    #
    #       http://www.apache.org/licenses/LICENSE-2.0
    #
    #   Unless required by applicable law or agreed to in writing, software
    #   distributed under the License is distributed on an "AS IS" BASIS,
    #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    #   See the License for the specific language governing permissions and
    #   limitations under the License.
    
    ##################################################################################################
    # このファイルは、Bookinfo サンプルのサービス、サービスアカウント、およびデプロイメントを定義します。
    #
    # 4 つの Bookinfo サービスすべて、対応するサービスアカウント、およびデプロイメントを適用するには、次を実行します。
    #
    #   kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    #
    # あるいは、任意のリソースを個別にデプロイすることもできます。
    #
    #   kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -l service=reviews # reviews サービス
    #   kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -l account=reviews # reviews ServiceAccount
    #   kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -l app=reviews,version=v3 # reviews-v3 デプロイメント
    ##################################################################################################
    
    ##################################################################################################
    # 詳細サービス
    ##################################################################################################
    # ... (rest of the translated yaml file)
    
  2. Bookinfo アプリケーションをデプロイします。

    kubectl -n istio-test apply -f bookinfo.yaml

    次のコマンド出力が返されます。

    istio-1

  3. Bookinfo のステータスを表示します。

    kubectl -n istio-test get pods -o wide

    次のコマンド出力が返されます。

    istio-2

  4. Bookinfo のマイクロサービスを確認します。

    kubectl -n istio-test get services

    次のコマンド出力が返されます。

    istio-3

Istio ゲートウェイをデプロイする

  1. bookinfo-gateway.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

    bookinfo-gateway.yaml ファイルを展開する

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway # istio デフォルトコントローラーを使用
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: bookinfo
    spec:
      hosts:
      - "*"
      gateways:
      - bookinfo-gateway
      http:
      - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        route:
        - destination:
            host: productpage
            port:
              number: 9080
  2. Istio ゲートウェイをデプロイします。

    kubectl -n istio-test apply -f bookinfo-gateway.yaml

    次のコマンド出力が返されます:istio-4

  3. Istio ゲートウェイを表示します。

    kubectl -n istio-test get gateway

    次のコマンド出力が返されます。

    istio-5

Bookinfo のマイクロサービスを検証する

  1. Istio ゲートウェイのホストアドレスを取得します。

    クラスタータイプに基づいて Istio Ingress サービスを選択します。このトピックでは、Istio Ingress サービスとして LoadBalancer を選択します。

    kubectl -n istio-system get service istio-ingressgateway

    次のコマンド出力が返されます。

    istio-6

    返されたメッセージの istio-ingressgateway パラメーターは、Istio Ingress Gateway のホストアドレス(IP:Port 形式)を示します。このトピックでは、ホストアドレスは 10.96.XX.XX:80 です。

  2. テストポッドを作成して、Bookinfo のマイクロサービスを検証します。

    1. test-pod.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

      test-pod.yaml ファイルを展開する

      apiVersion: v1
      kind: Pod
      metadata:
        name: centos
      spec:
        nodeSelector:    
          k8s.aliyun.com/vnode: "true"
        tolerations:      
        - key: k8s.aliyun.com/vnode
          operator: "Equal"
          value: "true"
          effect: "NoSchedule"
        containers:
        - name: eip
          image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/centos:7
          command:
          - bash
          - -c
          - sleep inf
    2. ポッドをデプロイします。

      kubectl apply -f test-pod.yaml
  3. テストポッドにログオンし、次のコマンドを実行して 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 上で実行されています。コマンド出力の例:

    istio-7