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

Alibaba Cloud Service Mesh:レイヤー 7 ルーティングの事前準備

最終更新日:Mar 11, 2026

Service Mesh (ASM) のレイヤー 7 ルーティングは、URI パスおよびリクエストヘッダーに基づいてトラフィックをルーティングします。ルーティングルールを設定する前に、ASM 環境を構築し、ルーティングに関するチュートリアルで参照されるサンプルワークロードをデプロイしてください。

本トピックでは、以下の 2 つの手順について説明します:まず、ASM インスタンス、ACK クラスター、およびサイドカープロキシ注入が準備できていることを確認し、次に、ルーティングに関するチュートリアルで使用されるサンプルサービスをデプロイします。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

サンプルワークロードのデプロイ

レイヤー 7 ルーティングに関するチュートリアルでは、4 つのサンプルサービスを使用します。ご自身が実施する予定のチュートリアルで必要なサービスのみをデプロイしてください。

サービス目的リッスンポート
helloworldバージョンベースのルーティングおよびトラフィック分割のテスト用マルチバージョンサービス(v1、v2)ポート 5000
sleepメッシュ内の他のサービスに対してテストリクエストを送信するクライアント Pod(curl を含む)ポート 80
HTTPBinリクエストの詳細(ヘッダー、URI パス、メソッド)を呼び出し元にエコー返す HTTP テストエンドポイントポート 8000
NGINX基本的な URI パスルーティングのテスト用静的 Web サーバーポート 8000

kubeconfig ファイルを使用して kubectl をご利用の ACK クラスターに接続し、以下のセクションに従って操作を進めてください。

helloworld サービスのデプロイ

helloworld は、同一アプリケーションの v1 および v2 の 2 つのバージョンを実行します。これにより、バージョンベースのルーティングおよびトラフィック分割のテストに適しています。

  1. 以下の YAML を helloworld-application.yaml として保存します。

    helloworld-application.yaml を表示

    apiVersion: v1
    kind: Service
    metadata:
      name: helloworld
      labels:
        app: helloworld
    spec:
      ports:
      - port: 5000
        name: http
      selector:
        app: helloworld
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: helloworld
      labels:
        account: helloworld
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloworld-v1
      labels:
        apps: helloworld
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: helloworld
          version: v1
      template:
        metadata:
          labels:
            app: helloworld
            version: v1
        spec:
          serviceAccount: helloworld
          serviceAccountName: helloworld
          containers:
          - name: helloworld
            image: istio/examples-helloworld-v1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 5000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloworld-v2
      labels:
        apps: helloworld
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: helloworld
          version: v2
      template:
        metadata:
          labels:
            app: helloworld
            version: v2
        spec:
          serviceAccount: helloworld
          serviceAccountName: helloworld
          containers:
          - name: helloworld
            image: istio/examples-helloworld-v2
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 5000
  2. サービスをデプロイします。

    kubectl apply -f helloworld-application.yaml
  3. デプロイを確認します。期待される出力:アプリケーションコンテナとサイドカープロキシの両方が実行中であることを示すために、READY 列の値が 2/2 である必要があります。

    kubectl get pods -l app=helloworld
    NAME                              READY   STATUS    RESTARTS   AGE
    helloworld-v1-xxxxxxxxx-xxxxx     2/2     Running   0          30s
    helloworld-v2-xxxxxxxxx-xxxxx     2/2     Running   0          30s

sleep サービスのデプロイ

sleep はクライアント Pod として機能します。アイドル状態を維持し、メッシュ内の他のサービスに対してテストリクエストを送信するための curl 環境を提供します。

  1. 以下の YAML を sleep-application.yaml として保存します。

    sleep-application.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", "3650d"]
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - mountPath: /etc/sleep/tls
              name: secret-volume
          volumes:
          - name: secret-volume
            secret:
              secretName: sleep-secret
              optional: true
  2. サービスをデプロイします。

    kubectl apply -f sleep-application.yaml
  3. デプロイを確認します。期待される出力:

    kubectl get pods -l app=sleep
    NAME                     READY   STATUS    RESTARTS   AGE
    sleep-xxxxxxxxx-xxxxx    2/2     Running   0          30s

HTTPBin サービスのデプロイ

HTTPBin は、リクエストの詳細(ヘッダー、URI パス、メソッド)を呼び出し元にエコー返します。これを使用して、ルーティングルールがリクエストを正しい送信先に転送していることを検証できます。

  1. 以下の YAML を httpbin-application.yaml として保存します。

    httpbin-application.yaml を表示

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          serviceAccountName: httpbin
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  2. サービスをデプロイします。

    kubectl apply -f httpbin-application.yaml
  3. デプロイを確認します。期待される出力:

    kubectl get pods -l app=httpbin
    NAME                       READY   STATUS    RESTARTS   AGE
    httpbin-xxxxxxxxx-xxxxx    2/2     Running   0          30s

NGINX サービスのデプロイ

NGINX は静的コンテンツを提供します。基本的な URI パスルーティングを説明するチュートリアルで使用します。

  1. 以下の YAML を nginx.yaml として保存します。

    nginx.yaml を表示

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: nginx
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
        service: nginx
      name: nginx
    spec:
      ports:
        - name: http
          port: 8000
          protocol: TCP
          targetPort: 80
      selector:
        app: nginx
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
        version: v1
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
          version: v1
      template:
        metadata:
          labels:
            app: nginx
            version: v1
        spec:
          serviceAccountName: nginx
          containers:
            - image: 'nginx:1.7.9'
              name: nginx
              ports:
                - containerPort: 80
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
  2. サービスをデプロイします。

    kubectl apply -f nginx.yaml
  3. デプロイを確認します。期待される出力:

    kubectl get pods -l app=nginx
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-xxxxxxxxx-xxxxx    2/2     Running   0          30s

すべてのデプロイの確認

必要なサービスをデプロイした後、すべての Pod がサイドカープロキシ注入とともに実行中であることを確認します。

kubectl get pods

すべての Pod の READY 列には 2/2 と表示される必要があります。これは、アプリケーションコンテナと Istio サイドカープロキシの両方が注入され、実行中であることを確認するものです。