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

Alibaba Cloud Service Mesh:ASMサーバーレスゲートウェイを使用して、システムの可用性と弾力性を向上させる

最終更新日:Jan 13, 2025

Service Mesh (ASM) サーバーレスゲートウェイは、ASMによって提供される新しいタイプのゲートウェイです。サーバーレスゲートウェイは、トラフィックの急増を処理し、システムの安定性を向上させながら、コンピューティングコストを低く抑えるのに役立ちます。データプレーン上のContainer Service for Kubernetes (ACK) クラスタで実行されるASMゲートウェイと比較して、ASMサーバーレスゲートウェイには、高い安定性、高い弾力性、低コストという利点があります。さらに、ASMサーバーレスゲートウェイはサーバーレス方式でデプロイされ、ASMによって管理されます。したがって、ASMサーバーレスゲートウェイはACKクラスタに依存しないため、高可用性です。このトピックでは、ASMサーバーレスゲートウェイの使用方法と、ASMサーバーレスゲートウェイに関連するログとメトリックについて説明します。

前提条件

シナリオ

ASMサーバーレスゲートウェイは、トラフィックの急増を処理し、システムの安定性を向上させながら、コンピューティングコストを低く抑えるのに役立ちます。ASMサーバーレスゲートウェイは、一般的に次のシナリオで使用されます。

  • オンライン教育やeコマースなど、トラフィックの変動が顕著なオンラインサービスの場合、ASMサーバーレスゲートウェイを使用してトラフィックの急増を処理できます。サーバーレスアーキテクチャにより、固定リソースの量を大幅に削減し、コンピューティングコストを削減できます。

  • 複数のクラスタがASMインスタンスに追加されている場合(たとえば、2つのACKクラスタがASMインスタンスに追加されている場合)、ASMサーバーレスゲートウェイは特定のACKクラスタとは無関係にデプロイされます。これにより、高可用性が実現します。

ステップ 1:ASMサーバーレスイングレスゲートウェイを作成する

YAMLファイルを使用することによってのみ、ASMサーバーレスイングレスゲートウェイを作成できます。データプレーン上のACKクラスタで実行されるASMゲートウェイと比較して、ASMサーバーレスゲートウェイには asm.alibabacloud.com/managed-by-asm: 'true' アノテーションが追加されています。データプレーン上のACKクラスタのIDを入力する必要はありません。ASMサーバーレスゲートウェイのメトリックを収集する場合、asm.alibabacloud.com/export-metrics アノテーションを追加して、メトリックをデータプレーン上の宛先ACKクラスタにエクスポートできます。

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

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

  3. [イングレスゲートウェイ] ページで、[YAMLから作成] をクリックし、作成するASMサーバーレスゲートウェイの名前を入力し、次のYAMLコードをYAMLコードエディターにコピーして、[作成] をクリックします。

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      annotations:
        asm.alibabacloud.com/managed-by-asm: 'true'
        asm.alibabacloud.com/export-metrics: 'ack-cluster-id'  # メトリックをエクスポートするためのアノテーション
      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

    注:作成したASMサーバーレスゲートウェイは、LoadBalancerとClusterIPサービスをサポートしています。 serviceTypeパラメータをClusterIPに設定する場合は、クライアントとゲートウェイのPodが相互接続されていることを確認してください。たとえば、デフォルトでは、同じ仮想プライベートクラウド (VPC) 内のPodは、Terwayプラグインを使用して相互にアクセスできます。

ステップ 2:トラフィックルールを作成する

  1. HTTPドメイン名を作成します。

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

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

    3. [イングレスゲートウェイ] ページで目的のゲートウェイをクリックします。ゲートウェイの概要ページの左側のナビゲーションペインで、[ドメイン/証明書] をクリックします。[ドメイン] タブで、[作成] をクリックします。

    4. [ドメインの追加] ページで、[ドメイン名]* に、[プロトコル][HTTP] に、[ポート名]http に、[ポート]80 に設定します。次に、[作成] をクリックします。

  2. productapgeサービスをインポートします。

    1. ゲートウェイの概要ページの左側のナビゲーションペインで、[アップストリームサービス] をクリックします。表示されるページで、[サービスのインポート] をクリックします。

    2. [サービスのインポート] ページで、[名前空間] ドロップダウンリストから [default] を選択し、サービスの選択セクションで [productapge] を選択し、Dingtalk_20230302182310.png アイコンをクリックして productapge サービスを選択済みセクションに追加し、[送信] をクリックします。

  3. ルーティングルールを作成します。

    1. ゲートウェイの概要ページの左側のナビゲーションペインで、[ルート管理] をクリックします。表示されるページで、[作成] をクリックします。

    2. [ルート詳細の設定] ステップで、[ルートタイプ][http] に、[名前空間][default] に、[名前]productapge に設定します。[一致ルール] セクションで、[メソッド][プレフィックス] に、[コンテンツ][/] に設定します。次に、[次へ] をクリックします。

    3. [ルートデスティネーションの設定] ステップで、[アップストリームサービスの選択]productapge に設定し、[次へ] をクリックします。

    4. [詳細設定] ステップで、[作成] をクリックします。

ステップ 3:ASMサーバーレスゲートウェイを介してproductpageサービスにアクセスする

ブラウザのアドレスバーに {ASMサーバーレスゲートウェイの IP アドレス}/productpage と入力して、productpageサービスにアクセスします。イングレスゲートウェイの IP アドレスを取得する方法の詳細については、「イングレスゲートウェイのIPアドレスを取得する」をご参照ください。

ステップ 4:ASMサーバーレスゲートウェイのアクセスログ収集機能を設定する

重要

ASMサーバーレスゲートウェイのアクセスログ収集機能を設定すると、ゲートウェイが再起動します。この操作は、オフピーク時に行うことをお勧めします。

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

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

  3. [イングレスゲートウェイ] ページで、目的の ASM serverless ゲートウェイを見つけ、[YAML] をクリックします。YAML コードエディターで、asm.alibabacloud.com/aliyun-logs-project: k8s-log-**** アノテーションを追加して、ASM serverless ゲートウェイのアクセスログ収集機能を構成します。

    この例では、ASM serverless ゲートウェイのアクセスログが mesh-log-c4e1bbed247634d0482000d94e947**** プロジェクトに収集されます。次のコードブロックは設定例を示しています。

    ingressgateway.yaml ファイルを表示する

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      annotations:
        asm.alibabacloud.com/managed-by-asm: 'true'
        asm.alibabacloud.com/aliyun-logs-project: mesh-log-c4e1bbed247634d0482000d94e947**** # アクセスログを収集するためのプロジェクトを指定
      name: ingressgateway
      namespace: istio-system
    spec:
     ....
  4. [OK] をクリックして、ASMサーバーレスゲートウェイの構成を更新します。

ステップ 5:HTTPS経由のアクセスを設定する

  1. 次のコマンドを実行して、認証局 (CA) 証明書を生成します。

    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt # ルートCA証明書と秘密鍵を生成
    openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" # 証明書署名要求 (CSR) と秘密鍵を生成
    openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt # CSRに署名して証明書を生成
    
  2. 証明書を設定します。

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

    2. [メッシュ管理] ページで、ASMインスタンスの名前をクリックします。左側のナビゲーションペインで、[ASMゲートウェイ] > [証明書管理] を選択します。

    3. [証明書管理] ページで、[作成] をクリックします。[証明書情報] パネルで、パラメータを設定し、[OK] をクリックします。

      パラメータ

      説明

      名前

      証明書の名前。この例では、myexample-credentialと入力します。

      公開鍵証明書

      公開鍵の有効性を証明するために使用される電子文書。この例では、ステップ 5 のサブステップ 1 で生成された aliyun.com.crt ファイルの内容を入力します。

      秘密鍵

      秘密鍵。この例では、ステップ 5 のサブステップ 1 で生成された aliyun.com.key ファイルの内容を入力します。

  3. HTTPSドメイン名を作成します。

    1. 左側のナビゲーションペインで、[イングレスゲートウェイ] をクリックします。表示されるページで、目的のイングレスゲートウェイを見つけ、その名前をクリックします。ゲートウェイの概要ページの左側のナビゲーションペインで、[ドメイン/証明書] をクリックします。[ドメイン] タブで、[作成] をクリックします。

    2. [ドメインの追加] ページで、[ドメイン名]* に、[プロトコル][HTTPS] に、[ポート名]https に、[ポート]443 に設定します。[認証情報] ドロップダウンリストから [myexample-credential] を選択し、[標準 TLS セマンティクスによる安全な接続] を選択して、[作成] をクリックします。

  4. 次のコマンドを実行して、HTTPS経由でASMサーバーレスゲートウェイにアクセスします。

    curl -k -H Host:aliyun.com --resolve aliyun.com:443:{IP address of the desired ASM serverless gateway}  https://aliyun.com/productpage -I # HTTPS経由でASMサーバーレスゲートウェイにアクセス
    

ステップ 6:ASMサーバーレスゲートウェイのアクセスログを表示する

  1. Simple Log Serviceコンソール にログインします。

  2. [プロジェクト] セクションで、手順 4 のサブステップ 1 で構成したログの名前をクリックします。左側のナビゲーションペインで、Dingtalk_20231122151017.png アイコン([ログストレージ])をクリックします。[ログストア] セクションで、[mesh-ingress-log] をクリックし、検索ボックスに productpage と入力して、[検索と分析] をクリックします。

    托管网关日志.png

FAQ

ASMサーバーレスゲートウェイのメトリックをエクスポートするにはどうすればよいですか?

  1. ASMでメトリックの生成と収集が有効になっていること、および [可観測性管理センター] > [監視指標] でメトリックダッシュボードを表示できることを確認します。詳細については、「Managed Service for Prometheusにメトリックを収集する」をご参照ください。

  2. メトリクスをエクスポートする ASM サーバーレスゲートウェイの YAML ファイルに、asm.alibabacloud.com/export-metrics: ${ack-cluster-id} アノテーションを追加します。

    この機能は、バージョン 1.18.0.147 以降の ASM インスタンスでのみ使用できます。ASM インスタンスのアップグレード方法の詳細については、「ASM インスタンスの更新」をご参照ください。

    asm.alibabacloud.com/export-metrics: ${ack-cluster-id} アノテーションが追加されると、ASM サーバーレス ゲートウェイのサービスとエンドポイントが指定された ACK クラスタに同期されます。その後、Managed Service for Prometheus でデータ収集用のエンドポイントを設定するだけで済みます。

  3. Application Real-Time Monitoring Service (ARMS) コンソールで、データ収集用のエンドポイントを設定します。

    1. ARMSコンソール にログインします。

    2. 左側のナビゲーションペインで、[managed Service For Prometheus] > [インスタンス] を選択します。ページの左上隅で、Managed Service for Prometheusインスタンスが存在するリージョンを選択します。

    3. [インスタンス] ページで、目的のManaged Service for Prometheusインスタンスの名前をクリックします。表示されるページで、左側のナビゲーションペインの [設定] をクリックします。

    4. [設定] ページの [設定] タブで、[prometheus.yamlの編集] をクリックし、次のコードをPrometheus.yamlファイルに追加して、[保存] をクリックします。

      YAMLコードを表示する

      scrape_configs:
      - job_name: istio-system/managed-envoy # ジョブ名を指定
        honor_timestamps: true
        honor_labels: false
        scrape_interval: 30s
        scheme: http
        metrics_path: /stats/prometheus
        relabel_configs:
        - regex: 'true'
          action: keep
          source_labels:
          - __meta_kubernetes_service_labelpresent_asm_sync_target
          replacement: $1
          separator: ;
        - regex: http-envoy-prom
          action: keep
          source_labels:
          - __meta_kubernetes_endpoint_port_name
          replacement: $1
          separator: ;
        - regex: (.*)
          action: replace
          source_labels:
          - __meta_kubernetes_namespace
          replacement: $1
          separator: ;
          target_label: namespace
        metric_relabel_configs:
        - regex: envoy_.*
          action: drop
          source_labels:
          - __name__
          replacement: $1
          separator: ;
        kubernetes_sd_configs:
        - role: endpoints
          namespaces: {}
          follow_redirects: true
        scrape_timeout: 10s

ASMサーバーレスゲートウェイを使用してバックエンドアプリケーションにアクセスできない場合はどうすればよいですか?

  1. データプレーン上の目的のクラスタのセキュリティグループが、ASMサーバーレスゲートウェイからのトラフィックをブロックしていないことを確認します。

    1. ASMインスタンスのvSwitchのCIDRブロックを表示します。

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

      2. [メッシュ管理] ページで、ASMインスタンスの名前をクリックします。左側のナビゲーションペインで、[ASMインスタンス] > [基本情報] を選択します。

      3. [基本情報] ページで、[vswitch] の右側のリンクをクリックします。表示されるページで、vSwitchのCIDRブロックを表示します。

    2. データプレーン上の目的のクラスタのセキュリティグループを表示します。

      1. ACKコンソール にログインします。左側のナビゲーションペインで、[クラスタ] をクリックします。

      2. [クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のペインで、[クラスタ情報] をクリックします。

      3. [クラスタ情報] ページで、[クラスタリソース] タブをクリックし、[セキュリティグループ] の右側のリンクをクリックします。

      4. セキュリティグループの詳細ページで、セキュリティグループのインバウンドルールを表示します。ASMインスタンスのvSwitchのCIDRブロックとバックエンドアプリケーションPodのポートが、ルールで指定された範囲内にあることを確認します。

  2. 404や503などのステータスコードが返される場合は、トラフィックルールが正しく設定されているかどうか、およびバックエンドアプリケーションが想定どおりに実行されているかどうかを確認します。