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

Alibaba Cloud Service Mesh:HTTP/3 を使用した ASM イングレスゲートウェイへのアクセス

最終更新日:Mar 11, 2026

HTTP/3 はトランスポート層で TCP を QUIC プロトコルに置き換え、ヘッドオブラインブロッキングを解消し、接続レイテンシをゼロラウンドトリップ(0-RTT)まで低減します。また、Wi-Fi からモバイル回線への切り替えなどネットワーク環境の変化に対しても接続を維持できます。Service Mesh(ASM)ゲートウェイは HTTP/3 をサポートしているため、QUIC を介してサービスを公開することで、モバイル環境や遅延の影響を受けやすいワークロードにおけるサービスのパフォーマンスおよび安定性を向上させることができます。

機能HTTP/2(TCP)HTTP/3(QUIC/UDP)
ハンドシェイクレイテンシTCP ハンドシェイク + 別途実行される TLS ハンドシェイクQUIC に組み込まれた TLS 1.3 を用いた 0-RTT 接続確立
多重化複数のストリームが 1 つの TCP 接続を共有;1 つのパケット損失によりすべてのストリームがブロックされる独立した QUIC ストリーム;1 つのストリームでのパケット損失は他のストリームをブロックしない
接続移行クライアント IP アドレスが変更された場合(例:Wi-Fi からモバイル回線への切り替え)に接続が切断されるIP/ポートのタプルではなく接続 ID を用いるため、IP アドレスの変更にもかかわらず接続を維持可能
セキュリティ一部の実装では TLS が任意すべての接続で TLS 1.3 の使用が必須

本ガイドでは、ASM イングレスゲートウェイにおける HTTP/3 の有効化、QUIC トラフィック向け UDP リスナーの追加、TLS の構成、および curl を用いた接続確認手順について説明します。

前提条件

  • Container Service for Kubernetes(ACK)クラスター(v1.24 以降)が追加済みの ASM インスタンス(v1.16 以降)。詳細については、「ASM インスタンスへのクラスターの追加」をご参照ください。

  • ACK クラスター内に Cloud Controller Manager(CCM)コンポーネントがインストール済みで、バージョンが 2.6.0 以降であること

  • イングレスゲートウェイがデプロイ済みであること。詳細については、「イングレスゲートウェイの作成」をご参照ください。

  • HTTPBin サンプルアプリケーションがデプロイ済みであること。詳細については、「HTTPBin アプリケーションのデプロイ」をご参照ください。

  • ASM インスタンス向けに aliyun.com.cert という名前の TLS 証明書が作成済みであること。詳細については、「ASM の証明書管理機能の利用」をご参照ください。

ステップ 1:ASM コンソールで HTTP/3 を有効化

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

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

  3. 基本情報 ページの右上隅にある 設定項目 をクリックします。

  4. 設定更新パネルで、HTTP/3 の有効化 を選択します。

ステップ 2:イングレスゲートウェイに UDP リスナーを追加

QUIC は UDP 上で動作します。HTTP/3 トラフィックを受信するには、既存の TCP リスナーに加えて、イングレスゲートウェイに UDP リスナーを追加する必要があります。

IstioGateway リソースを編集して UDP ポートを追加します。以下の例では、ポート 444 に UDP リスナーを追加しています。

apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
  labels:
    asm-gateway-type: ingress
  name: ingressgateway
  namespace: istio-system
spec:
  ......
  ports:
    - name: http-0
      port: 80
      protocol: HTTP
      targetPort: 80
    # QUIC トラフィック向け UDP リスナーを追加。
    # ASM は同一ポート上で TCP および UDP リスナーをサポートしているため、
    # HTTPS リスナーと同一ポート(例:443)を使用できます。
    - name: udp
      port: 444
      protocol: UDP
      targetPort: 444
  ......
説明

ASM は同一ポート上で TCP および UDP リスナーをサポートしています。たとえば、ポート 443 で既に TCP 上の HTTPS サービスが提供されている場合でも、QUIC トラフィック向けにポート 443 の UDP リスナーを追加できます(競合しません)。

ステップ 3:Istio ゲートウェイの TLS 構成

QUIC では TLS 1.3 の使用が必須です。QUIC ポート向けに Istio ゲートウェイに TLS 証明書を構成するには、以下の Gateway リソースを適用します。

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: httpbin
  namespace: default
spec:
  selector:
    istio: ingressgateway
  servers:
    # ポート 80 上の HTTP リスナー
    - hosts:
        - '*'
      port:
        name: test
        number: 80
        protocol: HTTP
    # ポート 444 上の QUIC/HTTP3 リスナー(TLS 構成付き)。
    # QUIC が TLS 終端を必要とするため、
    # ゲートウェイが TLS を終端するよう protocol を HTTPS に設定します。
    - hosts:
        - '*'
      port:
        name: quic
        number: 444
        protocol: HTTPS
      tls:
        # 前提条件で作成した証明書を参照します。
        credentialName: aliyun.com.cert
        mode: SIMPLE

この構成を適用すると、ゲートウェイは自動的に HTTP 応答に Alt-Svc レスポンスヘッダー(例:alt-svc: h3=":444"; ma=86400)を付与します。ブラウザおよび HTTP クライアントはこの Alt-Svc ヘッダーを用いて HTTP/3 の可用性を検出し、後続のリクエストを QUIC へアップグレードします。これは、インターネット向けサービスが HTTP/3 をアドバタイズする標準的な方法です。クライアントが明示的に HTTP/3 向けに構成済みの内部サービスでは、このヘッダーは情報提供のみを目的としています。

ステップ 4:HTTP/3 接続の確認

curl の HTTP/3 対応状況の確認

ほとんどのデフォルト curl インストールでは HTTP/3 が有効になっていません。ご利用の curl バイナリが HTTP/3 をサポートしているか確認してください。

curl --version | grep http3

出力に http3 が含まれている場合、curl は HTTP/3 をサポートしています。

curl 8.9.0-DEV (aarch64-apple-darwin23.5.0) libcurl/8.9.0-DEV quictls/3.1.4 zlib/1.2.12 libidn2/2.3.7 nghttp2/1.59.0 ngtcp2/1.2.0 nghttp3/1.1.0

出力がない場合は、curl が HTTP/3 をサポートしていません。HTTP/3 対応バージョンの curl を再ビルドできます。詳細については、「Build with quictls」をご参照ください。

テストリクエストの送信

<IP-address-of-ASM-gateway> をご利用の ASM イングレスゲートウェイの外部 IP アドレスに置き換えてください。

curl -k --http3-only \
  -H Host:aliyun.com \
  --resolve aliyun.com:444:<IP-address-of-ASM-gateway> \
  https://aliyun.com:444/headers -v

成功した応答では、using HTTP/3 および HTTP/3 200 ステータスが表示されます。

......
* Connected to aliyun.com (xxx.xx.xx.x) port 444
* using HTTP/3
* [HTTP/3] [0] OPENED stream for https://aliyun.com:444/headers
* [HTTP/3] [0] [:method: GET]
* [HTTP/3] [0] [:scheme: https]
* [HTTP/3] [0] [:authority: aliyun.com]
* [HTTP/3] [0] [:path: /headers]
* [HTTP/3] [0] [user-agent: curl/8.9.0-DEV]
* [HTTP/3] [0] [accept: */*]
> GET /headers HTTP/3
> Host:aliyun.com
> User-Agent: curl/8.9.0-DEV
> Accept: */*
>
* Request completely sent off
* old SSL session ID is stale, removing
< HTTP/3 200
< server: istio-envoy
< date: Wed, 26 Jun 2024 07:40:07 GMT
< content-type: application/json
< content-length: 460
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 1
< alt-svc: h3=":444"; ma=86400
<
{
  "headers": {
    "Accept": "*/*",
    "Host": "aliyun.com",
    "Transfer-Encoding": "chunked",
    "User-Agent": "curl/8.9.0-DEV",
    "X-Envoy-Attempt-Count": "1",
    "X-Envoy-External-Address": "xx.xx.xx.xx",
    "X-Forwarded-Client-Cert": "xxxxxxx"
  }
}
* Connection #0 to host aliyun.com left intact

alt-svc: h3=":444"; ma=86400 ヘッダーは、ゲートウェイに HTTP/3 の可用性があることを示します。ブラウザおよび互換クライアントは、このヘッダーを使用して後続のリクエストで HTTP/3 を検出し、自動的にアップグレードします。

関連ドキュメント