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

Alibaba Cloud Service Mesh:サンプル アプリケーションをデプロイし、Ambient を有効にして暗号化通信を実装する

最終更新日:Oct 10, 2025

ASM インスタンスにイングレス ゲートウェイを追加した後、インスタンスに関連付けられたクラスタにアプリケーションをデプロイできます。 このトピックでは、サンプル アプリケーション Bookinfo を ASM インスタンスに関連付けられた ACK クラスタにデプロイする方法について説明します。

アプリケーションの説明

この例では、Bookinfo という名前の書籍レビュー アプリケーションを使用します。 次の図は、アプリケーションのマイクロサービスモデルを示しています。

Bookinfo アプリケーションは、次のマイクロサービスで構成されています。

  • Productpage: Details マイクロサービスと Reviews マイクロサービスを呼び出してページを生成します。

  • Details: 書籍に関する情報が含まれています。

  • Reviews: 書籍レビューが含まれており、Ratings マイクロサービスを呼び出す場合があります。

  • Ratings: 書籍レビューに基づいて生成された書籍の評価が含まれています。

Reviews マイクロサービスには、次のバージョンがあります。

  • バージョン 1 は、Ratings マイクロサービスを呼び出しません。

  • バージョン 2 は、Ratings マイクロサービスを呼び出し、1 ~ 5 個の黒い星で書籍を評価します。

  • バージョン 3 は、Ratings マイクロサービスを呼び出し、1 ~ 5 個の赤い星で書籍を評価します。

前提条件

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

  1. 次の内容で bookinfo.yaml ファイルを作成します。

    展開して YAML コンテンツを表示する

    apiVersion: v1
    kind: Service
    metadata:
      name: details
      labels:
        app: details
        service: details
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: details
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-details
      labels:
        account: details
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: details-v1
      labels:
        app: details
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: details
          version: v1
      template:
        metadata:
          labels:
            app: details
            version: v1
        spec:
          serviceAccountName: bookinfo-details
          containers:
          - name: details
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-details-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    ##################################################################################################
    # Ratings service
    ##################################################################################################
    # 評価サービス
    
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings
      labels:
        app: ratings
        service: ratings
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-ratings
      labels:
        account: ratings
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      labels:
        app: ratings
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ratings
          version: v1
      template:
        metadata:
          labels:
            app: ratings
            version: v1
        spec:
          serviceAccountName: bookinfo-ratings
          containers:
          - name: ratings
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-ratings-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    ##################################################################################################
    # Reviews service
    ##################################################################################################
    # レビューサービス
    
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews
      labels:
        app: reviews
        service: reviews
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-reviews
      labels:
        account: reviews
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v1
      labels:
        app: reviews
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v1
      template:
        metadata:
          labels:
            app: reviews
            version: v1
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v1:1.20.1
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews-v1
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
        version: v1
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v2
      labels:
        app: reviews
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v2
      template:
        metadata:
          labels:
            app: reviews
            version: v2
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v2:1.20.1
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews-v2
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
        version: v2
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v3
      labels:
        app: reviews
        version: v3
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v3
      template:
        metadata:
          labels:
            app: reviews
            version: v3
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v3:1.20.1
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews-v3
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
        version: v3
    ---
    ##################################################################################################
    # Productpage services
    ##################################################################################################
    # プロダクトページ サービス
    
    apiVersion: v1
    kind: Service
    metadata:
      name: productpage
      labels:
        app: productpage
        service: productpage
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: productpage
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-productpage
      labels:
        account: productpage
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: productpage-v1
      labels:
        app: productpage
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: productpage
          version: v1
      template:
        metadata:
          annotations:
            prometheus.io/scrape: "true"
            prometheus.io/port: "9080"
            prometheus.io/path: "/metrics"
          labels:
            app: productpage
            version: v1
        spec:
          serviceAccountName: bookinfo-productpage
          containers:
          - name: productpage
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-productpage-v1:1.20.1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
          volumes:
          - name: tmp
            emptyDir: {}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: productpage-v1
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: productpage
        version: v1
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings-v1
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
        version: v1
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: details-v1
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: details
        version: v1
  2. 次のコマンドを実行して、デフォルトの名前空間にサンプル アプリケーションをデプロイします。

    kubectl apply -f  bookinfo.yaml

イングレス ゲートウェイをデプロイおよび構成する

  1. bookinfo-gateway.yaml ファイルを作成します。

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: bookinfo-gateway
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
            - '*'
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: vs-demo
      namespace: default
    spec:
      hosts:
        - '*'
      http:
        - name: gw-to-productage
          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
      gateways:
        - bookinfo-gateway
  2. イングレス ゲートウェイをデプロイします。

    kubectl apply -f bookinfo-gateway.yaml

アプリケーションにアクセスする

設定したゲートウェイを介して Bookinfo productpage サービスに接続します。

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

    echo $(kubectl -n istio-system get istiogateway ingressgateway -o jsonpath="{.status.GatewayAddress[0]}")
  2. ブラウザで http://{イングレス ゲートウェイの IP アドレス}/productpage にアクセスして、Bookinfo アプリケーションを表示します。

    image

    ページを数回更新すると、[書籍レビュー] の下の評価が変化し、レビュー アプリケーションのバージョン v1、v2、v3 に対応していることがわかります。

Bookinfo の Ambient モードを有効にする

  1. ASM コンソール にログインします。 左側のナビゲーションウィンドウで、[Service Mesh] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、[ASM インスタンス] > [グローバル名前空間] を選択します。

  3. [デフォルト] 名前空間の [データプレーンモード] 列で、[Ambient メッシュモードに切り替える] をクリックします。

    [グローバル名前空間][データプレーンモード]
  4. ブラウザで http://{イングレスゲートウェイの IP アドレス}/productpage にアクセスし、Bookinfo アプリケーションを表示します。サービスが引き続きアクセス可能で、すべての Bookinfo アプリケーションポッド間で mTLS 暗号化が有効になっていることを確認できます。

メッシュトポロジーを表示する

  1. 監視メトリック収集を有効にします。

    1. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、[可観測性管理センター] > [監視メトリック] を選択します。

    2. [Prometheus のマネージドサービスにメトリックを収集する] をクリックします。 [送信] ダイアログボックスで、クラスタ名を選択し、[OK] をクリックします。

      セルフマネージド Prometheus を使用している場合は、この手順をスキップできます。
  2. メッシュトポロジーを有効にします。

    1. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、[可観測性管理センター] > [メッシュトポロジー] を選択します。

    2. [有効にする] をクリックします。 次のパラメータを使用してメッシュトポロジーを構成し、[有効化の確認] をクリックします。

      次の例は、ASM ゲートウェイを介してアクセスを構成する方法を示しています。

      構成項目

      値の例

      [サービスデプロイモード]

      Kubernetes クラスタ内のデータプレーン デプロイモード。

      マネージド デプロイモードを使用する場合、Serverless ASM ゲートウェイを介したアクセスのみがサポートされます。

      [可観測性クラスタ]

      c6118d720xxxxxxxxxxxxxx58410a9c7d0。

      [Prometheus スクレイプアドレス]

      このパラメータはこの例では無視されます。

      セルフマネージド Prometheus を使用している場合は、ここに読み取りアドレスを入力します。

      複数のクラスタが ASM に追加されている場合は、最初に 集約インスタンス を作成し、集約インスタンスの読み取りアドレスを入力する必要があります。

      [ID 認証 - ログイン方法]

      [トークン]

      [エントリ]

      [ASM]

      • [ASM ゲートウェイを選択]: イングレス ゲートウェイ名を選択します。この例では ingressgateway です。

      • [ASM ゲートウェイポートを選択]: 443 を選択します。

        ゲートウェイを編集して、メッシュトポロジー専用のポートを追加することもできます。
  3. テストトラフィックを送信して、トラフィックトポロジー図を生成します。

    export GATEWAY_ADDRESS=$(kubectl -n istio-system get istiogateway ingressgateway -o jsonpath="{.status.GatewayAddress[0]}")
    for i in $(seq 1 100); do
      echo "Request $i: $(curl -sSI -o /dev/null -w "%{http_code}" "http://${GATEWAY_ADDRESS}:80/productpage")"
    done
  4. [メッシュトポロジー] ページの [ログイン方法] セクションで、[ログイン トークンを表示] をクリックし、トークンコンテンツをコピーします。

  5. [トポロジーアドレス] の後にある [ASM メッシュトポロジーにアクセス] をクリックします。 [Kiali] ページで、コピーしたコンテンツを [トークン] 入力ボックスに貼り付けて、[ログイン] をクリックします。