Topik ini menjawab pertanyaan yang sering diajukan (FAQ) mengenai Cloud-native API Gateway.
Apakah Cloud-native API Gateway mendukung IPv6?
Ya.
Apakah Cloud-native API Gateway mendukung header permintaan x-forwarded-for?
Ya.
Jika suatu permintaan menyertakan header permintaan x-forwarded-for, gerbang akan menambahkan alamat IP hop sebelumnya. Jika header tersebut tidak ada, gerbang akan menambahkannya dengan alamat IP hop sebelumnya.
Tomcat tersemat Spring Boot secara default menghapus alamat IP terakhir dari header x-forwarded-for. Untuk mencegah hal ini, tambahkan konfigurasi server.forward-headers-strategy=none ke aplikasi Spring Boot Anda.
Menangani error "upstream connect error or disconnect/reset header"
Error ini menunjukkan bahwa security group layanan backend memblokir akses dari instans gateway.
Untuk mengatasinya, buka halaman Overview instans gateway Anda, klik tab Security Group Authorizations, lalu klik Add Security Group Rule untuk menambahkan konfigurasi security group. Gateway meneruskan permintaan langsung ke alamat IP Pod di ACK, sehingga Anda harus membuka port yang digunakan oleh pod dalam aturan security group tersebut.
Menggunakan header untuk mencocokkan nama domain
Tambahkan aturan pencocokan header permintaan saat membuat entri rute.
Atur nama field header menjadi :authority dan nilai header menjadi nama domain tertentu.
Menangani kegagalan permintaan akibat badan permintaan yang besar
Masalah ini terjadi karena buffer koneksi gateway terlalu kecil. Anda dapat menambah ukuran buffer:
-
Jika menggunakan HTTP/1.x: Sesuaikan parameter
DownstreamConnectionBufferLimitsdi Konsol. -
Jika menggunakan HTTP/2: Sesuaikan parameter
DownstreamConnectionBufferLimitsdanInitialStreamWindowSizedi Konsol.
Batas penambahan sumber layanan
-
Satu instans gateway dapat dikaitkan dengan maksimal tiga kluster ACK.
-
Satu instans gateway hanya dapat dikaitkan dengan satu instans Nacos.
Tidak dapat memilih sumber layanan Nacos atau ACK yang sudah ada
Cloud-native API Gateway hanya dapat menambahkan instans Nacos atau kluster ACK yang berada dalam VPC yang sama. Penambahan sumber layanan dari VPC berbeda tidak didukung.
Apakah Cloud-native API Gateway mendukung sertifikat HTTPS kustom?
Cloud-native API Gateway tidak menyimpan sertifikat. Sebagai gantinya, sertifikat ditarik dari Certificate Management Service Alibaba Cloud. Anda dapat mengunggah sertifikat sendiri ke Certificate Management Service, lalu mengonfigurasikannya untuk nama domain di gateway.
Dampak perubahan parameter terhadap traffic yang sedang berjalan
-
Perubahan pada
XffTrustedNummemerlukan restart gateway agar berlaku. -
Perubahan pada
UpstreamIdleTimeoutmenyebabkan koneksi upstream terputus dan tersambung ulang. -
Perubahan pada
DownstreamIdleTimemenyebabkan koneksi downstream terputus dan tersambung ulang.
Status pemeriksaan kesehatan layanan backend tidak normal
Status pemeriksaan kesehatan yang tidak normal dapat menunjukkan beberapa masalah:
-
Untuk layanan privat dalam VPC, periksa apakah security group layanan backend mengizinkan gateway mengakses port yang diperlukan. Untuk informasi lebih lanjut, lihat Add a security group rule.
-
Untuk layanan publik, periksa apakah VPC memiliki akses Internet. Anda dapat menggunakan fitur SNAT dari Internet NAT gateway untuk mengakses Internet. Untuk informasi lebih lanjut, lihat Use the SNAT feature of an Internet NAT gateway to access the Internet.
-
Untuk pemeriksaan kesehatan berbasis HTTP, pastikan path permintaan dan domain permintaan dikonfigurasi dengan benar.
-
Untuk pemeriksaan kesehatan berbasis HTTP, jika endpoint pemeriksaan kesehatan layanan backend harus diakses melalui HTTPS, atur kebijakan layanan ke mode TLS di Policy Configuration.
-
Untuk pemeriksaan kesehatan berbasis HTTP, jika semua konfigurasi di atas sudah benar, kemungkinan masalahnya adalah interval pemeriksaan kesehatan sama dengan waktu koneksi tetap hidup layanan backend. Coba tingkatkan interval pemeriksaan kesehatan.
Menentukan penyebab error permintaan
-
Periksa apakah header respons berisi
x-envoy-upstream-service-time. Jika ya, gateway telah meneruskan permintaan ke layanan backend. Error kemungkinan berasal dari layanan backend. -
Periksa apakah field
upstream_service_timedalam log akses gateway kosong. Jika field tersebut tidak kosong, gateway telah meneruskan permintaan ke layanan backend. Error kemungkinan berasal dari layanan backend.
Sertifikat HTTPS yang diperbarui tidak berlaku
Masalah ini biasanya terjadi jika sertifikat HTTPS juga dikonfigurasi pada layanan yang berada sebelum gateway, seperti CLB, DCDN, WAF, atau layanan Anti-DDoS Proxy. Periksa apakah sertifikat HTTPS pada node sebelumnya juga telah diperbarui. Sebagai praktik terbaik, konfigurasikan sertifikat HTTPS hanya di satu tempat. Jika DCDN atau WAF ditempatkan di upstream gateway Anda, Anda dapat mengonfigurasi HTTPS hanya di DCDN atau WAF dan mengonfigurasi gateway untuk menggunakan HTTP pada permintaan back-to-origin.
Prioritas entri rute
Pada halaman Route Settings instans gateway, urutan entri rute dalam daftar merepresentasikan prioritas pencocokannya, dari tertinggi ke terendah. Prioritas ditentukan berdasarkan domain dan aturan entri rute. Prioritas pencocokan domain adalah exact domain name > wildcard domain name. Misalnya, test.example.com memiliki prioritas lebih tinggi daripada *.example.com. Untuk domain yang sama, prioritas pencocokan path adalah Exact Match>Prefix Match>Match Regular Expression. Untuk domain dan path yang sama, aturan dengan more matching conditions memiliki prioritas lebih tinggi daripada yang memiliki fewer matching conditions (kondisi pencocokan mencakup parameter Header dan Query).
Kegagalan permintaan HTTPS dengan DCDN
Masalah ini biasanya terjadi karena DCDN tidak menyertakan Server Name Indication (SNI) dalam permintaan back-to-origin-nya ke gateway. Untuk mengatasinya, konfigurasikan SNI back-to-origin di pengaturan DCDN Anda.
Kegagalan permintaan HTTPS dengan WAF
Masalah ini biasanya terjadi karena WAF tidak menyertakan Server Name Indication (SNI) dalam permintaan back-to-origin-nya ke gateway. Jika Anda menggunakan mode akses CNAME di WAF, ubah pengaturan untuk domain yang sesuai. Pada langkah Enter Your Website Information, pilih Enable Origin SNI.
Apakah Cloud-native API Gateway mendukung WebSocket?
Ya, WebSocket didukung dan diaktifkan secara default.
Apakah Cloud-native API Gateway mendukung gRPC?
Ya. gRPC menggunakan protokol HTTP/2 untuk transport. Pastikan EnableHttp2 = true diatur pada halaman Parameter Settings gateway.
Apakah Cloud-native API Gateway mendukung dekompresi GZIP?
Ya. Pastikan EnableGzip = true diatur pada halaman Parameter Settings gateway. Algoritma kompresi yang didukung adalah Gzip dan Brotli, yang dikonfigurasi menggunakan parameter ZipAlgorithm. Nilai default-nya adalah Gzip.
Mempertahankan kapitalisasi header
Ya. Pastikan PreserveHeaderFormat = true diatur pada halaman Parameter Settings gateway. Parameter ini hanya berlaku untuk HTTP/1.0 dan HTTP/1.1. Spesifikasi protokol HTTP/2 mengharuskan semua header permintaan dan respons menggunakan huruf kecil.
Apakah Cloud-native API Gateway mendukung HTTP/3?
Ya. Pastikan EnableHttp3 = true diatur pada halaman Parameter Settings gateway.
Header dikonversi menjadi huruf kecil
Secara default, gateway mengonversi semua header permintaan dan respons menjadi huruf kecil. Untuk mempertahankan kapitalisasi aslinya, atur PreserveHeaderFormat = true pada halaman Parameter Settings gateway.
Permintaan ke layanan domain DNS gagal
Jika domain DNS yang dikonfigurasi adalah domain publik, Anda harus mengonfigurasi SNAT di Internet NAT gateway agar gateway dapat mengakses internet. Secara default, instans gateway tidak dapat mengakses internet.
Informasi jejak tidak muncul di Konsol ARMS
Periksa apakah parameter EnableGenerateRequestId diatur ke true dalam konfigurasi gateway. Jika diatur ke false, Anda harus menambahkan header x-request-id yang sesuai ke permintaan Anda. Jika tidak, gateway tidak dapat melaporkan informasi jejak.
Menerima error 400
Error ini biasanya disebabkan oleh salah satu alasan berikut:
-
Klien mengirim permintaan dengan error protokol. Periksa log akses gateway untuk
response_flags = DPE. -
Layanan backend mengembalikan error 400. Periksa log akses gateway. Jika field
response_flagskosong dan fieldupstream_hostmemiliki nilai, ini menunjukkan bahwa layanan backend mengembalikan error 400. Nilaiupstream_hostadalah alamat IP layanan backend yang menerima permintaan.
Menerima error 401
Error ini biasanya disebabkan oleh salah satu alasan berikut:
-
Gateway mengembalikan error, menunjukkan kredensial akses tidak tersedia. Periksa apakah Anda telah mengaktifkan autentikasi, otorisasi, atau plug-in WebAssembly.
-
Layanan backend mengembalikan error 401. Periksa log akses gateway. Jika field
response_flagskosong dan fieldupstream_hostmemiliki nilai, ini menunjukkan bahwa layanan backend mengembalikan error 401. Nilaiupstream_hostadalah alamat IP layanan backend yang menerima permintaan.
Menerima error 403
Error ini biasanya disebabkan oleh salah satu alasan berikut:
-
Gateway mengembalikan error, menunjukkan izin akses tidak mencukupi. Periksa apakah Anda telah mengaktifkan blacklist atau daftar putih alamat IP, autentikasi, otorisasi, atau plug-in WebAssembly.
-
Layanan backend mengembalikan error 403. Periksa log akses gateway. Jika field
response_flagskosong dan fieldupstream_hostmemiliki nilai, ini menunjukkan bahwa layanan backend mengembalikan error 403. Nilaiupstream_hostadalah alamat IP layanan backend yang menerima permintaan.
Menerima error 404
Error ini biasanya disebabkan oleh salah satu alasan berikut:
-
Aturan entri rute yang sesuai tidak dikonfigurasi di gateway. Periksa log akses gateway. Jika log berisi
response_flags = NR, ini menunjukkan bahwa tidak ditemukan entri rute. -
Layanan backend mengembalikan error 404. Periksa log akses gateway. Jika field
response_flagskosong dan fieldupstream_hostmemiliki nilai, ini menunjukkan bahwa layanan backend mengembalikan error 404. Nilaiupstream_hostadalah alamat IP layanan backend yang menerima permintaan.
Menerima error 405
Jika perlindungan WAF diaktifkan, permintaan mungkin telah memicu aturan perlindungan WAF. Dalam kasus ini, WAF mengembalikan kode status 405.
Menerima error 413
Error ini biasanya disebabkan oleh salah satu alasan berikut:
-
Ukuran permintaan melebihi batas buffer koneksi gateway. Tingkatkan nilai parameter
DownstreamConnectionBufferLimitspada halaman Parameter Settings. -
Layanan backend mengembalikan error 413. Periksa log akses gateway. Jika field
response_flagskosong dan fieldupstream_hostmemiliki nilai, ini menunjukkan bahwa layanan backend mengembalikan error 413. Nilaiupstream_hostadalah alamat IP layanan backend yang menerima permintaan.
Menerima error 429
Aturan pembatasan kecepatan gateway dipicu. Periksa log akses gateway. Jika log berisi response_flags = RL, tinjau aturan pembatasan kecepatan gateway Anda.
Menerima error 502
Error ini biasanya disebabkan oleh salah satu alasan berikut:
-
Layanan backend mengembalikan respons dengan error protokol. Periksa log akses gateway. Jika log berisi
response_flags = UPE, penyebab paling umum adalah duplikasi fieldTransfer-Encodingdalam header respons dari layanan backend. Periksa layanan backend Anda. -
Layanan backend mengembalikan error 502. Periksa log akses gateway. Jika field
response_flagskosong dan fieldupstream_hostmemiliki nilai, ini menunjukkan bahwa layanan backend mengembalikan error 502. Nilaiupstream_hostadalah alamat IP layanan backend yang menerima permintaan.
Menerima error 503
Error ini dapat disebabkan oleh alasan-alasan berikut:
-
Layanan target yang ditentukan dalam aturan entri rute tidak memiliki alamat IP yang sehat. Periksa log akses gateway. Situasi ini ditunjukkan oleh
response_flags = UH. -
Layanan backend menutup koneksi saat gateway sedang meneruskan permintaan. Periksa log akses gateway. Situasi ini ditunjukkan oleh
response_flags = UC. Hal ini sering terjadi karena timeout idle koneksi layanan backend lebih kecil daripada nilaiUpstreamIdleTimeoutgateway. Kurangi nilaiUpstreamIdleTimeoutpada halaman Parameter Settings gateway. -
Gateway tidak dapat terhubung ke alamat IP layanan backend. Periksa log akses gateway. Situasi ini ditunjukkan oleh
response_flags = UFatauresponse_flags = URX. Hal ini sering terjadi karena security group layanan backend memblokir akses dari gateway. Periksa apakah security group layanan backend telah dikonfigurasi untuk mengizinkan gateway mengakses port tersebut. Untuk informasi lebih lanjut, lihat Add a security group rule. -
Layanan backend tidak ada dalam konfigurasi gateway. Periksa log akses gateway. Situasi ini ditunjukkan oleh
response_flags = NC. Hal ini dapat terjadi karena beberapa alasan:-
Layanan yang sesuai tidak lagi ada.
-
Jika layanan backend memiliki beberapa port, Anda harus memilih port tetap, bukan port dinamis, saat mengonfigurasi layanan target dalam entri rute.
-
Port tetap dipilih untuk layanan backend, tetapi port layanan tersebut telah berubah.
-
-
Layanan backend mengembalikan error 503. Jika field
response_flagsdalam log kosong dan fieldupstream_hosttidak kosong, ini menunjukkan bahwa layanan backend mengembalikan error 503. Nilaiupstream_hostadalah alamat IP layanan backend yang menerima permintaan.
response_code bernilai 0 dalam log akses
response_code bernilai 0 dalam log akses menunjukkan bahwa klien tidak menerima response code.
Hal ini dapat terjadi karena dua alasan utama:
-
Klien menutup koneksi sebelum waktunya. Hal ini dapat terjadi, misalnya, jika klien berada di jaringan seluler yang lemah atau respons backend terlalu lambat. Hal ini ditunjukkan ketika field
response_flagsdalam log akses bernilai "DC". -
Permintaan HTTPS dikirim tanpa Server Name Indication (SNI), dan tidak ada sertifikat HTTPS yang dikonfigurasi untuk nama domain wildcard. SNI adalah ekstensi TLS yang digunakan untuk membawa informasi nama domain. Hal ini ditunjukkan ketika field
requested_server_namedalam log akses kosong.
Konsumsi traffic publik oleh permintaan yang tidak cocok dengan entri rute
Ya. Semua permintaan yang melewati gateway, termasuk yang tidak cocok dengan entri rute, mengonsumsi traffic publik. Bahkan jika permintaan tidak cocok dengan aturan entri rute apa pun, gateway tetap mengonsumsi traffic untuk menerima permintaan dan mengirim respons.
Anda dapat memeriksa konsumsi traffic di log akses gateway menggunakan field-field berikut:
-
bytes_received: Ukuran badan permintaan, merepresentasikan lalu lintas masuk. -
bytes_sent: Ukuran badan respons, merepresentasikan lalu lintas keluar.
Permintaan yang tidak cocok dengan entri rute diidentifikasi dalam log akses dengan nilai response_code_details sebesar route_not_found dan nilai response_flags sebesar NR.
Menelusuri sumber permintaan yang tidak cocok dengan entri rute
Setelah Anda mengaktifkan pengiriman log untuk gateway, Anda dapat melakukan kueri terhadap permintaan yang tidak cocok dengan entri rute di Log Service dan menggunakan field log untuk mengidentifikasi alamat IP sumber. Log akses mencatat semua permintaan yang melewati gateway, termasuk permintaan yang gagal. Alamat IP sumber berada di field downstream_remote_address.
Di Log Service, jalankan kueri berikut untuk memfilter permintaan yang tidak cocok dengan entri rute:
response_code_details: "route_not_found"
Dalam hasil kueri, periksa field-field berikut untuk mengidentifikasi sumber permintaan:
-
downstream_remote_address: Alamat klien yang terhubung ke gateway. -
x-forwarded-for: Fieldx-forwarded-fordari header permintaan HTTP, yang menunjukkan alamat IP sumber asli permintaan. Jika permintaan melewati proxy, field ini mungkin berisi beberapa alamat IP. Alamat IP terakhir adalah alamat hop sebelumnya sebelum gateway.
Untuk menghitung konsumsi traffic dari permintaan abnormal ini, jalankan kueri berikut di Log Service:
response_code_details: "route_not_found" | SELECT sum(bytes_sent + bytes_received) AS total_bytes