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

Alibaba Cloud Service Mesh:準備

最終更新日:Nov 06, 2025

レイヤー 7 ルーティングは、URI パス照合やリクエストヘッダー照合など、複数の機能をサポートしています。このトピックでは、レイヤー 7 ルーティングに関連する機能を実装するための準備について説明します。

前提条件

ステップ 1: データプレーンモードを Ambient Mesh に設定する

default という名前のグローバル名前空間のデータプレーンモードを Ambient Mesh に設定します。

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

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

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

ステップ 2: default 名前空間の Waypoint を有効にする

Ambient モードでは、レイヤー 7 の機能は Waypoint に依存します。このステップでは、default 名前空間のすべてのサービスの Waypoint を有効にします。

  1. Gateway リソースを作成します。ASM はこのリソースに基づいて Waypoint プロキシを作成します。

    kubectl apply -f - <<EOF
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: waypoint
    spec:
      gatewayClassName: istio-waypoint
      listeners:
      - name: mesh
        port: 15008
        protocol: HBONE
    EOF
  2. default 名前空間のすべてのサービスの Waypoint を有効にします。

    kubectl label namespace default istio.io/use-waypoint=waypoint --overwrite

ステップ 3: データプレーンクラスターにサービスをデプロイする

必要に応じて、helloworld、sleep、HTTPBin、NGINX、または mocka サービスをデプロイします。

helloworld サービスをデプロイする

  1. 次の内容を使用して、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: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-helloworld-v1:1.0
            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: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-helloworld-v2:1.0
            imagePullPolicy: IfNotPresent 
            ports:
            - containerPort: 5000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: helloworld-v1
      labels:
        app: helloworld-v1
    spec:
      ports:
      - port: 5000
        name: http
      selector:
        app: helloworld
        version: v1
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: helloworld-v2
      labels:
        app: helloworld-v2
    spec:
      ports:
      - port: 5000
        name: http
      selector:
        app: helloworld
        version: v2
  2. helloworld アプリケーションをデプロイします。

    kubectl apply -f helloworld-application.yaml

sleep サービスをデプロイする

  1. 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: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/curl:asm-sleep
            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. sleep アプリケーションをデプロイします。

    kubectl apply -f sleep-application.yaml

HTTPBin サービスをデプロイする

  1. 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: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/httpbin:0.1.0
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  2. httpbin アプリケーションをデプロイします。

    kubectl apply -f httpbin-application.yaml

NGINX サービスをデプロイする

  1. NGINX アプリケーションを作成できます。

    nginx.yaml ファイルを展開して表示

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: nginx
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: 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
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          serviceAccountName: nginx
          containers:
            - image: 'registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/nginx:1.28.0'
              imagePullPolicy: IfNotPresent
              name: nginx
              ports:
                - containerPort: 80
                  protocol: TCP
              resources:
                limits:
                  cpu: 500m
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
  2. nginx アプリケーションをデプロイします。

    kubectl apply -f nginx.yaml

mocka サービスをデプロイする

  1. mocka-application.yaml ファイルを作成します。

    mocka-application.yaml ファイルを展開して表示

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: mocka
      namespace: default
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mocka
      labels:
        app: mocka
        service: mocka
    spec:
      ports:
      - port: 8000
        name: http
      selector:
        app: mocka
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mocka-v1
      labels:
        app: mocka
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mocka
          version: v1
          ASM_TRAFFIC_TAG: v1
      template:
        metadata:
          labels:
            app: mocka
            version: v1
            ASM_TRAFFIC_TAG: v1
        spec:
          serviceAccountName: mocka
          containers:
          - name: default
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/asm-gobin:1.0.0
            imagePullPolicy: IfNotPresent
            env:
            - name: version
              value: v1
            - name: app
              value: mocka
            ports:
            - containerPort: 8000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mocka-v2
      labels:
        app: mocka
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mocka
          version: v2
          ASM_TRAFFIC_TAG: v2
      template:
        metadata:
          labels:
            app: mocka
            version: v2
            ASM_TRAFFIC_TAG: v2
        spec:
          serviceAccountName: mocka
          containers:
          - name: default
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/asm-gobin:1.0.0
            imagePullPolicy: IfNotPresent
            env:
            - name: version
              value: v2
            - name: app
              value: mocka
            ports:
            - containerPort: 8000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mocka-v1
      labels:
        app: mocka
        service: mocka
        version: v1
    spec:
      ports:
      - port: 8000
        name: http
      selector:
        app: mocka
        version: v1
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mocka-v2
      labels:
        app: mocka
        service: mocka
        version: v2
    spec:
      ports:
      - port: 8000
        name: http
      selector:
        app: mocka
        version: v2                
  2. mocka アプリケーションをデプロイします。

    kubectl apply -f mocka-application.yaml