eコマースのプロモーションやオンライン教育の急増など、サービスへのトラフィックスパイクが発生した場合、固定されたゲートウェイリソースでは不十分であったり、オフピーク時に無駄が生じたりする可能性があります。ご利用の ASM ゲートウェイが ACK クラスター内で実行されている場合、クラスターの障害によってゲートウェイも停止し、イングレストラフィックが中断される可能性もあります。
ASM サーバーレスゲートウェイは、これらの問題を両方とも解決します。これは、Service Mesh (ASM) によって完全に管理されるインフラストラクチャ内で、ご利用の Container Service for Kubernetes (ACK) クラスターの外部で実行されます。ASM は、プロビジョニング、スケーリング、ライフサイクル管理を自動的に処理します。ユーザーはゲートウェイ Pod を管理する必要がなく、ゲートウェイの可用性は ACK クラスターに依存しません。
仕組み
サーバーレスゲートウェイは、IstioGateway カスタムリソースにアノテーション asm.alibabacloud.com/managed-by-asm: 'true' を付与したものです。ACK クラスター内で Pod として実行される標準の ASM ゲートウェイとは異なり、ASM は独自のマネージドインフラストラクチャにサーバーレスゲートウェイをプロビジョニングします。ゲートウェイの作成時に ACK クラスター ID を指定する必要はありません。
トラフィックは、クライアントからサーバーレスゲートウェイを経由して、ご利用の ACK クラスター内のバックエンドサービスに流れます:
クライアント --> サーバーレスゲートウェイ (ASM が管理) --> バックエンドサービス (ACK クラスター)前提条件
開始する前に、以下を確認してください:
バージョン 1.18.0.147 以降を実行している ASM インスタンス
サーバーレスイングレスゲートウェイの作成
ASM コンソールで YAML 定義を適用して、サーバーレスイングレスゲートウェイを作成します。標準の ASM ゲートウェイとの唯一の違いは、asm.alibabacloud.com/managed-by-asm: 'true' アノテーションであり、ACK クラスター ID を指定する必要はありません。
ASM コンソールにログインします。左側のナビゲーションウィンドウで、[Service Mesh] > [メッシュ管理] を選択します。
[メッシュ管理] ページで、お使いの ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、[ASM ゲートウェイ] > [Ingress ゲートウェイ] の順に選択します。
「Ingress ゲートウェイ」ページで、[YAML からの作成] をクリックし、ゲートウェイの名前を入力して、次の 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: ....次のプレースホルダーを実際の値に置き換えてください:
プレースホルダー 説明 例 <ack-cluster-id>ゲートウェイメトリックを受信する ACK クラスターの ID。このアノテーションはオプションです。 c1a2b3c4d5e6f7g8h9i0j**** 説明 サーバーレスゲートウェイは、LoadBalancerとClusterIPの両方のサービスタイプをサポートしています。serviceTypeをClusterIPに設定した場合、クライアントとゲートウェイの Pod が相互に到達できる必要があります。例えば、Terway ネットワークプラグインを介して接続された同じ Virtual Private Cloud (VPC) 内の Pod などです。
ゲートウェイの確認
ゲートウェイが作成されると、[Ingress ゲートウェイ] ページに [実行中] のステータスで表示されます。ゲートウェイに割り当てられた外部 IP アドレスを確認してください。このアドレスは、バックエンドサービスにアクセスするために必要です。
トラフィックルーティングの設定
サーバーレスゲートウェイを介してトラフィックを転送するには、HTTP ドメインを作成し、バックエンドサービスをインポートし、ルーティングルールを定義します。
HTTP ドメインの作成
[Ingress ゲートウェイ] ページで、ゲートウェイ名をクリックします。左側のナビゲーションウィンドウで、[ドメイン/証明書] をクリックします。[ドメイン] タブで、[作成] をクリックします。
次の設定でドメインを設定し、[Create] をクリックします。
パラメーター 値 [ドメイン名] * プロトコル HTTP ポート名 http ポート 80
バックエンドサービスのインポート
ゲートウェイの概要ページの左側のナビゲーションウィンドウで、[アップストリームサービス] をクリックします。[サービスのインポート] をクリックします。
[名前空間] ドロップダウンリストから [デフォルト] を選択し、サービス一覧から [productpage] を選択し、追加アイコンをクリックして選択済みセクションに移動させ、[送信] をクリックします。
ルーティングルールの作成
左側のナビゲーションウィンドウで、[ルート管理] をクリックします。[作成] をクリックします。
[ルート詳細の設定] ステップで、以下の設定を構成し、[次へ] をクリックします。
パラメーター 値 ルートタイプ http Namespace デフォルト Name productpage Method (下記の マッチングルール 内) Prefix Content (下記の マッチングルール 内) / [ルート送信先の設定] ステップで、[アップストリームサービスの選択] を [productpage] に設定し、[次へ] をクリックします。
「詳細設定」ステップで、「作成」をクリックします。
トラフィックルーティングの確認
ブラウザを開き、http://<gateway-ip>/productpage にアクセスします。<gateway-ip> はサーバーレスゲートウェイの外部 IP アドレスに置き換えてください。
ゲートウェイの IP アドレスを確認するには、「イングレスゲートウェイの IP アドレスの取得」をご参照ください。
Bookinfo サンプルアプリケーションの productpage がブラウザに読み込まれます。接続タイムアウトが発生した場合は、ゲートウェイのステータスが [実行中] であり、ルーティングルールが正しく構成されていることを確認してください。
HTTPS アクセスの設定
TLS 証明書を生成し、ASM にアップロードして、ゲートウェイに HTTPS ドメインを作成します。
CA 証明書の生成
次のコマンドを実行して、自己署名証明書を生成します:
# ルート 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
# 証明書署名要求 (CSR) と秘密鍵を生成します
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes \
-keyout aliyun.com.key \
-subj "/CN=aliyun.com/O=myexample organization"
# ルート CA で証明書に署名します
openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key \
-set_serial 0 -in aliyun.com.csr -out aliyun.com.crt証明書のアップロード
ASM インスタンスの左側のナビゲーションウィンドウで、[ASM ゲートウェイ] > [証明書管理] を選択します。
[証明書管理] ページで、[作成] をクリックします。[証明書情報] パネルで、次のパラメーターを設定し、[OK] をクリックします。
パラメーター 説明 [名前] 証明書の名前を入力します。例: myexample-credential[公開鍵証明書] aliyun.com.crtファイルの内容を貼り付けます。[秘密鍵] aliyun.com.keyファイルの内容を貼り付けます。
HTTPS ドメインの作成
左側のナビゲーションウィンドウで、[Ingress ゲートウェイ] をクリックします。ゲートウェイ名をクリックし、次に [ドメイン/証明書] をクリックします。[ドメイン] タブで、[作成] をクリックします。
以下の設定でドメインを設定し、[作成] をクリックします。
パラメーター 値 [ドメイン名] * [プロトコル] HTTPS [ポート名] https [ポート] 443 [認証情報] myexample-credential [TLS モード] 標準 TLS セマンティクスによるセキュアな接続
HTTPS アクセスの確認
次の curl コマンドを実行して、HTTPS アクセスを確認します:
curl -k -I -H "Host:aliyun.com" \
--resolve "aliyun.com:443:<gateway-ip>" \
https://aliyun.com/productpage<gateway-ip> をサーバーレスゲートウェイの外部 IP アドレスに置き換えてください。成功した応答は HTTP ステータス 200 を返します:
HTTP/1.1 200 OK
server: istio-envoyリクエストが失敗した場合は、証明書名が HTTPS ドメイン構成の [認証情報] の値と一致していることを確認してください。
アクセスログの収集
トラフィック分析とトラブルシューティングのために、ゲートウェイのアクセスログを Simple Log Service (SLS) に収集します。
アクセスログ収集を有効にすると、ゲートウェイが再起動します。この操作はオフピーク時に実行してください。
ログ収集アノテーションの追加
ASM コンソールにログインします。[Service Mesh] > [メッシュ管理] の順に選択し、ASM インスタンス名をクリックします。
左側のナビゲーションウィンドウで、[ASM ゲートウェイ] > [Ingress ゲートウェイ] を選択します。
[Ingress ゲートウェイ] ページで、サーバーレスゲートウェイを見つけ、[YAML] をクリックします。ゲートウェイ YAML に次のアノテーションを追加し、[OK] をクリックします。
asm.alibabacloud.com/aliyun-logs-project: k8s-log-****k8s-log-****をメッシュログ用の SLS プロジェクト名 (例:mesh-log-c4e1bbed247634d0482000d94e947****) に置き換えてください。更新された YAML は次のようになります:
アクセスログの表示
Simple Log Service コンソールにログインします。
「[プロジェクト]」セクションで、前のステップで設定したログプロジェクト名をクリックしてください。
左側のナビゲーションウィンドウで、[ログストレージ] アイコンをクリックします。[Logstores] セクションで、[mesh-ingress-log] をクリックします。
検索ボックスに検索クエリ (例:
productpage) を入力し、[検索 & 分析] をクリックします。一致するリクエストのアクセスログが結果に表示されます。
ゲートウェイメトリックのエクスポート
モニタリングとアラートのために、サーバーレスゲートウェイのメトリックを Managed Service for Prometheus にエクスポートします。これには ASM バージョン 1.18.0.147 以降が必要です。
ASM でのメトリック収集の有効化
お使いの ASM インスタンスでメトリックの生成および収集を有効化します。メトリックダッシュボードが [Observability Management Center] > [モニタリング指標] の下でアクセス可能であることを確認してください。詳細については、「Managed Service for Prometheus へのメトリック収集」をご参照ください。
メトリックエクスポートアノテーションの追加
サーバーレスゲートウェイの YAML に、次のアノテーションを追加します:
asm.alibabacloud.com/export-metrics: '<ack-cluster-id>'<ack-cluster-id> を、メトリックをエクスポートしたい ACK クラスターの ID に置き換えてください。これにより、ゲートウェイのサービスとエンドポイントが指定された ACK クラスターに同期され、Prometheus がスクレイプできるようになります。
Prometheus スクレイプターゲットの設定
ARMS コンソールにログインします。
左側のナビゲーションウィンドウで、Managed Service for Prometheus > インスタンス を選択します。Prometheus インスタンスのリージョンを選択します。
Prometheus インスタンス名をクリックします。左側のナビゲーションウィンドウで、[設定項目] をクリックします。
[設定項目] ページで、[Prometheus.yaml の編集] をクリックします。次のスクレイプ構成を追加し、[保存] をクリックします。
この構成は、サーバーレスゲートウェイの Envoy プロキシエンドポイントから Istio サービスメッシュのメトリックを 30 秒ごとにスクレイプします。relabel_configs はゲートウェイに同期されたエンドポイントのみをターゲットにするようにフィルタリングし、metric_relabel_configs はノイズを減らすために低レベルの Envoy 内部メトリックをドロップします。
トラブルシューティング
サーバーレスゲートウェイ経由でバックエンドアプリケーションにアクセスできない
サーバーレスゲートウェイへのリクエストが失敗したり、エラーが返されたりする場合は、以下を確認してください:
1. セキュリティグループルール
データプレーンの ACK クラスターのセキュリティグループは、サーバーレスゲートウェイのネットワーク範囲からのインバウンドトラフィックを許可する必要があります。確認するには:
ご利用の ASM インスタンスの vSwitch CIDR ブロックを見つけます:
ASM コンソールで、Service Mesh > Mesh 管理 に移動し、インスタンス名をクリックします。
[ASM インスタンス] > [基本情報]を選択し、[vSwitch]の横にあるリンクをクリックして CIDR ブロックを表示します。
ACK クラスターのセキュリティグループを確認します:
ACK コンソールで、[クラスター] をクリックし、次にクラスター名をクリックします。
[クラスター情報] をクリックし、次に [クラスターリソース] タブをクリックして、[セキュリティグループ] の横にあるリンクをクリックします。
インバウンドルールが、ASM vSwitch CIDR ブロックからバックエンドアプリケーションの Pod ポートへのトラフィックを許可していることを確認します。
2. HTTP エラーコード
| エラーコード | 考えられる原因 | アクション |
|---|---|---|
| 404 | ルーティングルールが誤って構成されているか、存在しない | ルーティングルールがリクエストパスと一致し、アップストリームサービスが正しくインポートされていることを確認します |
| 503 | バックエンドアプリケーションが利用できない | バックエンドの Pod が ACK クラスターで実行中であり、正常であることを確認します |
次のステップ
サービスの異なるバージョンにトラフィックをルーティングする --- Istio のトラフィック管理を使用してカナリアデプロイメントを実装する
Managed Service for Prometheus へのメトリックの収集 — サービスメッシュの完全な可観測性を設定する
ASM インスタンスの更新 --- ASM インスタンスを最新バージョンに保つ