HTTP/3 menggantikan TCP dengan protokol QUIC pada lapisan transport, menghilangkan blokir kepala antrian (head-of-line blocking), mengurangi latensi koneksi hingga nol round trip (0-RTT), dan mempertahankan koneksi saat terjadi perubahan jaringan, seperti pergantian dari Wi-Fi ke jaringan seluler. Gerbang Service Mesh (ASM) mendukung HTTP/3, sehingga Anda dapat mengekspos layanan melalui QUIC untuk meningkatkan performa dan stabilitas layanan pada beban kerja seluler dan yang sensitif terhadap latensi.
| Kemampuan | HTTP/2 (TCP) | HTTP/3 (QUIC/UDP) |
|---|---|---|
| Latensi jabat tangan | Jabat tangan TCP + jabat tangan TLS terpisah | Pembentukan koneksi 0-RTT dengan TLS 1.3 yang terintegrasi dalam QUIC |
| Multiplexing | Beberapa aliran berbagi satu koneksi TCP; kehilangan satu paket memblokir semua aliran | Aliran QUIC independen; kehilangan paket pada satu aliran tidak memblokir aliran lainnya |
| Migrasi koneksi | Koneksi terputus ketika IP klien berubah (misalnya, dari Wi-Fi ke seluler) | Koneksi tetap aktif meskipun IP berubah, berkat connection ID yang tidak bergantung pada tupel IP/port |
| Keamanan | TLS bersifat opsional pada beberapa implementasi | TLS 1.3 wajib digunakan untuk semua koneksi |
Panduan ini menjelaskan cara mengaktifkan HTTP/3 pada gerbang masuk ASM, menambahkan pendengar UDP untuk trafik QUIC, mengonfigurasi TLS, dan memverifikasi konektivitas menggunakan curl.
Sebelum memulai
Instans ASM (v1.16 atau lebih baru) dengan kluster Container Service for Kubernetes (ACK) (v1.24 atau lebih baru) yang telah ditambahkan. Lihat Tambahkan kluster ke instans ASM
Komponen Cloud Controller Manager (CCM) di kluster ACK versi 2.6.0 atau lebih baru
Gerbang masuk telah dideploy. Lihat Buat gerbang masuk
Aplikasi contoh HTTPBin telah dideploy. Lihat Deploy aplikasi HTTPBin
Sertifikat TLS bernama
aliyun.com.certtelah dibuat untuk instans ASM Anda. Lihat Gunakan fitur manajemen sertifikat ASM
Langkah 1: Aktifkan HTTP/3 di Konsol ASM
-
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi sebelah kiri, pilih .
Di pojok kanan atas halaman Base Information, klik Settings.
Di panel Settings Update, pilih Enable HTTP/3.
Langkah 2: Tambahkan pendengar UDP ke gerbang masuk
QUIC berjalan di atas UDP. Untuk menerima trafik HTTP/3, tambahkan pendengar UDP ke gerbang masuk selain pendengar TCP yang sudah ada.
Edit resource IstioGateway untuk menambahkan port UDP. Contoh berikut menambahkan pendengar UDP pada port 444:
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
# Tambahkan pendengar UDP untuk trafik QUIC.
# Anda dapat menggunakan port yang sama dengan pendengar HTTPS Anda (misalnya 443)
# karena ASM mendukung pendengar TCP dan UDP pada port yang sama.
- name: udp
port: 444
protocol: UDP
targetPort: 444
......ASM mendukung pendengar TCP dan UDP pada port yang sama. Misalnya, jika port 443 sudah melayani HTTPS melalui TCP, Anda dapat menambahkan pendengar UDP pada port 443 untuk trafik QUIC tanpa konflik.
Langkah 3: Konfigurasikan gateway Istio dengan TLS
QUIC mewajibkan TLS 1.3. Konfigurasikan sertifikat TLS pada gateway Istio untuk port QUIC dengan menerapkan resource Gateway berikut:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: httpbin
namespace: default
spec:
selector:
istio: ingressgateway
servers:
# Pendengar HTTP pada port 80
- hosts:
- '*'
port:
name: test
number: 80
protocol: HTTP
# Pendengar QUIC/HTTP3 pada port 444 dengan TLS.
# Atur protokol ke HTTPS agar gateway menghentikan tugas TLS,
# yang wajib digunakan oleh QUIC.
- hosts:
- '*'
port:
name: quic
number: 444
protocol: HTTPS
tls:
# Merujuk ke sertifikat yang dibuat pada prasyarat.
credentialName: aliyun.com.cert
mode: SIMPLESetelah konfigurasi ini diterapkan, gateway secara otomatis menambahkan header respons Alt-Svc (misalnya, alt-svc: h3=":444"; ma=86400) ke respons HTTP. Browser dan klien HTTP menggunakan header Alt-Svc untuk mengetahui ketersediaan HTTP/3 dan meningkatkan permintaan berikutnya ke QUIC. Inilah cara layanan yang menghadap internet mengiklankan dukungan HTTP/3 — untuk layanan internal di mana klien dikonfigurasi eksplisit untuk HTTP/3, header ini hanya bersifat informatif.
Langkah 4: Verifikasi konektivitas HTTP/3
Periksa dukungan HTTP/3 pada curl
Sebagian besar instalasi curl bawaan tidak menyertakan dukungan HTTP/3. Periksa apakah binary curl Anda mendukungnya:
curl --version | grep http3Jika output mencantumkan http3, berarti curl Anda mendukung 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.0Jika tidak ada output, berarti curl Anda tidak mendukung HTTP/3. Anda dapat membuat ulang curl versi yang mendukung HTTP/3. Untuk informasi lebih lanjut, lihat Build with quictls.
Kirim permintaan uji
Ganti <IP-address-of-ASM-gateway> dengan IP eksternal gerbang masuk ASM Anda:
curl -k --http3-only \
-H Host:aliyun.com \
--resolve aliyun.com:444:<IP-address-of-ASM-gateway> \
https://aliyun.com:444/headers -vRespons sukses akan menampilkan using HTTP/3 dan status 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 intactHeader alt-svc: h3=":444"; ma=86400 mengonfirmasi bahwa gateway mengiklankan ketersediaan HTTP/3. Browser dan klien yang kompatibel menggunakan header ini untuk menemukan dan secara otomatis meningkatkan ke HTTP/3 pada permintaan berikutnya.
Lihat juga
Hypertext Transfer Protocol Version 2 (HTTP/2) — Blokir kepala antrian pada lapisan TCP dalam HTTP/2
QUIC: A UDP-Based Multiplexed and Secure Transport — Spesifikasi transport QUIC dan mekanisme multiplexing