Service Mesh (ASM) サーバーレスゲートウェイは、ASMによって提供される新しいタイプのゲートウェイです。サーバーレスゲートウェイは、トラフィックの急増を処理し、システムの安定性を向上させながら、コンピューティングコストを低く抑えるのに役立ちます。データプレーン上のContainer Service for Kubernetes (ACK) クラスタで実行されるASMゲートウェイと比較して、ASMサーバーレスゲートウェイには、高い安定性、高い弾力性、低コストという利点があります。さらに、ASMサーバーレスゲートウェイはサーバーレス方式でデプロイされ、ASMによって管理されます。したがって、ASMサーバーレスゲートウェイはACKクラスタに依存しないため、高可用性です。このトピックでは、ASMサーバーレスゲートウェイの使用方法と、ASMサーバーレスゲートウェイに関連するログとメトリックについて説明します。
前提条件
バージョン 1.18.0.147 以降のASMインスタンスにACKクラスタが追加されていること。
シナリオ
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クラスタにエクスポートできます。
ASMコンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、[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:トラフィックルールを作成する
HTTPドメイン名を作成します。
ASMコンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで目的のゲートウェイをクリックします。ゲートウェイの概要ページの左側のナビゲーションペインで、[ドメイン/証明書] をクリックします。[ドメイン] タブで、[作成] をクリックします。
[ドメインの追加] ページで、[ドメイン名] を * に、[プロトコル] を [HTTP] に、[ポート名] を http に、[ポート] を 80 に設定します。次に、[作成] をクリックします。
productapgeサービスをインポートします。
ゲートウェイの概要ページの左側のナビゲーションペインで、[アップストリームサービス] をクリックします。表示されるページで、[サービスのインポート] をクリックします。
[サービスのインポート] ページで、[名前空間] ドロップダウンリストから [default] を選択し、サービスの選択セクションで [productapge] を選択し、
アイコンをクリックして productapge サービスを選択済みセクションに追加し、[送信] をクリックします。
ルーティングルールを作成します。
ゲートウェイの概要ページの左側のナビゲーションペインで、[ルート管理] をクリックします。表示されるページで、[作成] をクリックします。
[ルート詳細の設定] ステップで、[ルートタイプ] を [http] に、[名前空間] を [default] に、[名前] を productapge に設定します。[一致ルール] セクションで、[メソッド] を [プレフィックス] に、[コンテンツ] を [/] に設定します。次に、[次へ] をクリックします。
[ルートデスティネーションの設定] ステップで、[アップストリームサービスの選択] を productapge に設定し、[次へ] をクリックします。
[詳細設定] ステップで、[作成] をクリックします。
ステップ 3:ASMサーバーレスゲートウェイを介してproductpageサービスにアクセスする
ブラウザのアドレスバーに {ASMサーバーレスゲートウェイの IP アドレス}/productpage と入力して、productpageサービスにアクセスします。イングレスゲートウェイの IP アドレスを取得する方法の詳細については、「イングレスゲートウェイのIPアドレスを取得する」をご参照ください。
ステップ 4:ASMサーバーレスゲートウェイのアクセスログ収集機能を設定する
ASMサーバーレスゲートウェイのアクセスログ収集機能を設定すると、ゲートウェイが再起動します。この操作は、オフピーク時に行うことをお勧めします。
ASMコンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、目的の ASM serverless ゲートウェイを見つけ、[YAML] をクリックします。YAML コードエディターで、
asm.alibabacloud.com/aliyun-logs-project: k8s-log-****アノテーションを追加して、ASM serverless ゲートウェイのアクセスログ収集機能を構成します。この例では、ASM serverless ゲートウェイのアクセスログが mesh-log-c4e1bbed247634d0482000d94e947**** プロジェクトに収集されます。次のコードブロックは設定例を示しています。
[OK] をクリックして、ASMサーバーレスゲートウェイの構成を更新します。
ステップ 5:HTTPS経由のアクセスを設定する
次のコマンドを実行して、認証局 (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に署名して証明書を生成証明書を設定します。
ASMコンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[証明書管理] ページで、[作成] をクリックします。[証明書情報] パネルで、パラメータを設定し、[OK] をクリックします。
パラメータ
説明
名前
証明書の名前。この例では、myexample-credentialと入力します。
公開鍵証明書
公開鍵の有効性を証明するために使用される電子文書。この例では、ステップ 5 のサブステップ 1 で生成された aliyun.com.crt ファイルの内容を入力します。
秘密鍵
秘密鍵。この例では、ステップ 5 のサブステップ 1 で生成された aliyun.com.key ファイルの内容を入力します。
HTTPSドメイン名を作成します。
左側のナビゲーションペインで、[イングレスゲートウェイ] をクリックします。表示されるページで、目的のイングレスゲートウェイを見つけ、その名前をクリックします。ゲートウェイの概要ページの左側のナビゲーションペインで、[ドメイン/証明書] をクリックします。[ドメイン] タブで、[作成] をクリックします。
[ドメインの追加] ページで、[ドメイン名] を * に、[プロトコル] を [HTTPS] に、[ポート名] を https に、[ポート] を 443 に設定します。[認証情報] ドロップダウンリストから [myexample-credential] を選択し、[標準 TLS セマンティクスによる安全な接続] を選択して、[作成] をクリックします。
次のコマンドを実行して、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サーバーレスゲートウェイのアクセスログを表示する
Simple Log Serviceコンソール にログインします。
[プロジェクト] セクションで、手順 4 のサブステップ 1 で構成したログの名前をクリックします。左側のナビゲーションペインで、
アイコン([ログストレージ])をクリックします。[ログストア] セクションで、[mesh-ingress-log] をクリックし、検索ボックスに productpage と入力して、[検索と分析] をクリックします。
FAQ
ASMサーバーレスゲートウェイのメトリックをエクスポートするにはどうすればよいですか?
ASMでメトリックの生成と収集が有効になっていること、および でメトリックダッシュボードを表示できることを確認します。詳細については、「Managed Service for Prometheusにメトリックを収集する」をご参照ください。
メトリクスをエクスポートする 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 でデータ収集用のエンドポイントを設定するだけで済みます。
Application Real-Time Monitoring Service (ARMS) コンソールで、データ収集用のエンドポイントを設定します。
ARMSコンソール にログインします。
左側のナビゲーションペインで、 を選択します。ページの左上隅で、Managed Service for Prometheusインスタンスが存在するリージョンを選択します。
[インスタンス] ページで、目的のManaged Service for Prometheusインスタンスの名前をクリックします。表示されるページで、左側のナビゲーションペインの [設定] をクリックします。
[設定] ページの [設定] タブで、[prometheus.yamlの編集] をクリックし、次のコードをPrometheus.yamlファイルに追加して、[保存] をクリックします。
ASMサーバーレスゲートウェイを使用してバックエンドアプリケーションにアクセスできない場合はどうすればよいですか?
データプレーン上の目的のクラスタのセキュリティグループが、ASMサーバーレスゲートウェイからのトラフィックをブロックしていないことを確認します。
ASMインスタンスのvSwitchのCIDRブロックを表示します。
ASMコンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[基本情報] ページで、[vswitch] の右側のリンクをクリックします。表示されるページで、vSwitchのCIDRブロックを表示します。
データプレーン上の目的のクラスタのセキュリティグループを表示します。
ACKコンソール にログインします。左側のナビゲーションペインで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のペインで、[クラスタ情報] をクリックします。
[クラスタ情報] ページで、[クラスタリソース] タブをクリックし、[セキュリティグループ] の右側のリンクをクリックします。
セキュリティグループの詳細ページで、セキュリティグループのインバウンドルールを表示します。ASMインスタンスのvSwitchのCIDRブロックとバックエンドアプリケーションPodのポートが、ルールで指定された範囲内にあることを確認します。
404や503などのステータスコードが返される場合は、トラフィックルールが正しく設定されているかどうか、およびバックエンドアプリケーションが想定どおりに実行されているかどうかを確認します。