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

:準備

最終更新日:Apr 15, 2025

Service Mesh (ASM) は、Ambient Mesh モードと Alibaba Centralized Mesh Gateway (ACMG) モードの 2 つのサイドカーレスモードをサポートしています。このトピックでは、これら 2 つのモードでサンプルアプリケーションをデプロイする方法について説明します。サイドカーレスモードの機能をできるだけ早く体験できるように、事前に環境を準備することができます。

前提条件

  • 指定された条件を満たす Container Service for Kubernetes (ACK) クラスタが作成されていること。詳細については、「制限」の「サポートされている Kubernetes クラスタと構成」セクションをご参照ください。

  • ASM インスタンスが作成され、Ambient Mesh モードまたは ACMG モードで有効になっていること。

    [サービスメッシュの作成] ページの [データプレーンモード] セクションで、[ambient Mesh モードを有効にする] または [ACMG モードを有効にする] を選択します。ビジネス要件に基づいて他の設定を構成します。詳細については、「ASM インスタンスを作成する」をご参照ください。

  • ACK クラスタが ASM インスタンスに追加されていること。詳細については、「ASM インスタンスにクラスタを追加する」をご参照ください。

  • イングレスゲートウェイが作成されていること。詳細については、「イングレスゲートウェイを作成する」をご参照ください。

サンプルアプリケーションのデプロイ

この例では、Bookinfo アプリケーションをデプロイします。詳細については、「ASM インスタンスに追加された ACK クラスタにアプリケーションをデプロイする」をご参照ください。

ACK クラスタにサンプル アプリケーションをデプロイする

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

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

  3. Ambient Mesh モードまたは ACMG モードを有効にします。

    1. Ambient Mesh モード

      1. [グローバル名前空間] ページで、[default] 名前空間を見つけ、[データプレーンモード] 列の [ambient Mesh モードに切り替える] をクリックします。[送信] メッセージで、[OK] をクリックします。

    2. ACMG モード

      1. kubectl を使用して、kubeconfig ファイルの情報に基づいて ASM インスタンスに接続し、ACMG モードを有効にします。

        kubectl label namespace default istio.io/dataplane-mode=acmg
  4. GitHub の Istio リポジトリ から Bookinfo アプリケーションの YAML ファイルをダウンロードします。次に、次のコマンドを実行して、default 名前空間に Bookinfo アプリケーションをデプロイします。

    kubectl apply -f  bookinfo.yaml
  5. sleep アプリケーションをデプロイします。

    1. 次の内容を含む sleep.yaml ファイルを作成します。

      YAML ファイルを表示するには展開します

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "infinity"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. 次のコマンドを実行して、default 名前空間に sleep アプリケーションをデプロイします。

      kubectl apply -f  sleep.yaml
  6. notsleep アプリケーションをデプロイします。

    1. 次の内容を含む notsleep.yaml ファイルを作成します。

      YAML ファイルを表示するには展開します

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: notsleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: notsleep
        labels:
          app: notsleep
          service: notsleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: notsleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: notsleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: notsleep
        template:
          metadata:
            labels:
              app: notsleep
          spec:
            affinity:
              podAntiAffinity:
                preferredDuringSchedulingIgnoredDuringExecution:
                - weight: 100
                  podAffinityTerm:
                    labelSelector:
                      matchExpressions:
                      - key: app
                        operator: In
                        values:
                        - productpage
                    topologyKey: kubernetes.io/hostname 
            terminationGracePeriodSeconds: 0
            serviceAccountName: notsleep
            containers:
            - name: notsleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: notsleep-secret
                optional: true
      ---
    2. 次のコマンドを実行して、default 名前空間に notsleep アプリケーションをデプロイします。

      kubectl apply -f  notsleep.yaml

ASM インスタンスにメッシュリソースをデプロイする

  1. 以下の内容を含む bookinfo-gateway.yaml ファイルを作成します。

    この YAML ファイルは、Istio ゲートウェイと仮想サービスを作成するために使用されます。

    bookinfo-gateway.yaml ファイルを表示するには展開します

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway # use istio default controller
      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. kubectl を使用して kubeconfig ファイルの情報に基づいて ASM インスタンスに接続し、次のコマンドを実行してメッシュリソースをデプロイします。

    kubectl apply -f bookinfo-gateway.yaml

基本機能の確認

  1. 以下のコマンドを実行して、イングレスゲートウェイの環境変数を構成します。

    export GATEWAY_HOST=istio-ingressgateway.istio-system
    export GATEWAY_SERVICE_ACCOUNT=ns/istio-system/sa/istio-ingressgateway
  2. 以下のコマンドを実行して、Bookinfo アプリケーションがイングレスゲートウェイの有無にかかわらず正しく動作するかどうかをテストします。

    1. 次のコマンドを実行します。

      kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage" | grep -o "<title>.*</title>"

      期待される出力:

      <title>Simple Bookstore App</title>
    2. 次のコマンドを実行します。

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      期待される出力:

      <title>Simple Bookstore App</title>
    3. 次のコマンドを実行します。

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      期待される出力:

      <title>Simple Bookstore App</title>

      上記の出力は、Bookinfo アプリケーションがイングレスゲートウェイの有無にかかわらず正しく動作することを示しています。