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

Alibaba Cloud Service Mesh:複数のクラスターへのアクセスの単一エントリポイントとして機能する ASM サーバーレスゲートウェイを使用する

最終更新日:Jan 13, 2025

Service Mesh (ASM) を使用すると、同じ仮想プライベートクラウド (VPC) 内の複数の Kubernetes クラスターにアプリケーションサービスをデプロイし、これらのクラスターのインバウンドトラフィックのプロキシとしてサーバーレスイングレスゲートウェイを設定できます。 これにより、全体的なサービスの可用性が向上し、コンピューティングリソースのコストが削減されます。

前提条件

  • この例では、m1c1 と m1c2 の 2 つの Container Service for Kubernetes (ACK) クラスターが同じ VPC に作成されています。 詳細については、「ACK 専用クラスターを作成する」または「ACK マネージドクラスターを作成する」をご参照ください。

    説明

    クラスターを作成するときは、クラスターに高度なセキュリティグループを設定することをお勧めします。

  • v1.18.0.139 以降の ASM インスタンスが作成されています。 この例では、ASM インスタンス mesh1 が使用されています。 ASM インスタンスの作成方法の詳細については、「ASM インスタンスを作成する」をご参照ください。

手順 1:2 つのクラスターが相互に通信できることを確認する

デフォルトでは、同じ VPC 内の 2 つのクラスターは、高度なセキュリティグループに関連付けられている場合、相互に通信できます。 1 つのクラスターが基本セキュリティグループに関連付けられている場合、または 2 つのセキュリティグループが相互に通信できない場合は、クラスターのセキュリティグループルールを設定する必要があります。 詳細については、「セキュリティグループルールを管理する」をご参照ください。

手順 2:ASM インスタンスにクラスターを追加し、サーバーレスイングレスゲートウェイを作成する

2 つのクラスターを ASM インスタンスに追加した後、サーバーレスイングレスゲートウェイを作成します。

  1. 2 つのクラスターを ASM インスタンスに追加します。 詳細については、「ASM インスタンスにクラスターを追加する」をご参照ください。

  2. 次の YAML ファイルを使用して、サーバーレスイングレスゲートウェイを作成します。 詳細については、「イングレスゲートウェイを作成する」をご参照ください。

    展開してサーバーレスイングレスゲートウェイの YAML ファイルを表示

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      annotations:
        asm.alibabacloud.com/managed-by-asm: 'true'  // ASM によって管理されていることを示します
      name: ingressgateway
      namespace: istio-system
    spec:
      gatewayType: ingress
      dnsPolicy: ClusterFirst
      externalTrafficPolicy: Local
      hostNetwork: false
      ports:
        - name: http
          port: 80
          protocol: TCP
          targetPort: 80
        - name: https
          port: 443
          protocol: TCP
          targetPort: 443
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 2G
        requests:
          cpu: 200m
          memory: 256Mi
      rollingMaxSurge: 100%
      rollingMaxUnavailable: 25%
      runAsRoot: true
      serviceType: LoadBalancer

手順 3:Bookinfo アプリケーションをデプロイする

ASM を使用すると、クラスター全体にアプリケーションをデプロイできます。 Bookinfo アプリケーションのマイクロサービスを 2 つのクラスターにデプロイできます。

  1. 次の内容を使用して、m1c2 クラスターの bookinfo-m1c2.yaml ファイルで設定されたリソースを作成します。

    説明

    reviews マイクロサービスの v3 バージョンは、評価を赤い星で表示します。

    Bookinfo アプリケーションの YAML ファイルを表示

    # Details サービス
    apiVersion: v1
    kind: Service
    metadata:
      name: details
      labels:
        app: details
        service: details
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: details
    ---
    //以下省略
    
  2. 次のコマンドを実行して、reviews マイクロサービスの v3 バージョンを含まない Bookinfo アプリケーションを m1c2 クラスターにデプロイします。

    kubectl apply -f bookinfo-m1c2.yaml
  3. 次の内容を使用して、m1c1 クラスターの bookinfo-m1c1.yaml ファイルで設定されたリソースを作成します。

    YAML ファイルを表示

    # Reviews service
    apiVersion: v1
    kind: Service
    //以下省略
    
  4. 次のコマンドを実行して、reviews マイクロサービスの v3 バージョンと ratings マイクロサービスを m1c1 クラスターにデプロイします。

    kubectl apply -f bookinfo-m1c1.yaml

手順 4:仮想サービスと Istio ゲートウェイを追加する

  1. ASM インスタンスのデフォルト名前空間に bookinfo という名前の仮想サービスを作成します。 詳細については、「仮想サービスを管理する」をご参照ください。

    展開して仮想サービスの YAML ファイルを表示

    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. ASM インスタンスのデフォルト名前空間に bookinfo-gateway という名前の Istio ゲートウェイを作成します。 詳細については、「Istio ゲートウェイを管理する」をご参照ください。

    展開して Istio ゲートウェイの 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:
        - "*"
    
  3. ブラウザーのアドレスバーに http://{サーバーレスイングレスゲートウェイの IP アドレス}/productpage と入力し、ページを複数回更新します。

    reviews マイクロサービスの 3 つのバージョンにルーティングされるリクエストの比率が 1:1:1 に近いことがわかります。 reviews マイクロサービスの v3 バージョンは、他のマイクロサービスと同じクラスターにデプロイされていなくても、正常に有効になります。

(オプション) 手順 5:リクエストが常に reviews マイクロサービスの v3 バージョンにルーティングされるように指定する

デスティネーションルールと仮想サービスを定義して、Bookinfo アプリケーションのマイクロサービスをデプロイするためのポリシーを設定できます。 次の例では、リクエストが常に reviews マイクロサービスの v3 バージョンにルーティングされるように指定します。

  1. ASM インスタンスのデフォルト名前空間に reviews という名前のデスティネーションルールを作成します。 詳細については、「仮想サービスを管理する」をご参照ください。

    展開してデスティネーションルールの YAML ファイルを表示

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v3
        labels:
          version: v3
    
  2. ASM インスタンスのデフォルト名前空間に reviews という名前の仮想サービスを作成します。 詳細については、「仮想サービスを管理する」をご参照ください。

    展開して仮想サービスの YAML ファイルを表示

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
        - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v3
    
  3. ブラウザーのアドレスバーに http://{サーバーレスイングレスゲートウェイの IP アドレス}/productpage と入力し、ページを複数回更新します。

    リクエストが常に reviews マイクロサービスの v3 バージョンにルーティングされることがわかります。 この場合、評価は赤い星で表示されます。书评用红星