Gateway API adalah proyek open-source yang dikelola oleh komunitas SIG-NETWORK. Gateway API meningkatkan jaringan layanan dengan menyediakan antarmuka yang ekspresif, dapat diperluas, dan berorientasi peran. Anda dapat menggunakan Gateway API untuk menerapkan batasan kondisional pada aturan routing guna mengakses aplikasi dalam sebuah kluster.
Prasyarat
-
Anda telah menambahkan kluster ke instans ASM, dan versi instans ASM tersebut adalah 1.18 atau lebih baru.
-
Anda telah mendeploy layanan ingress gateway, dan Port 80 serta 443 telah diaktifkan pada gerbang tersebut.
-
Anda telah mendeploy aplikasi httpbin. Untuk informasi selengkapnya, lihat Langkah 1 dalam Deploy aplikasi httpbin.
Catatan
-
Kompatibilitas versi:
-
ASM 1.18 mendukung Gateway API v0.6.0.
-
ASM 1.22 dan versi lebih baru mendukung Gateway API v1.1 serta menambahkan dukungan untuk GRPCRoute.
-
ASM 1.24 dan versi lebih baru mendukung Gateway API v1.2.0.
-
-
Dalam mode multi-kluster, jika Anda menerapkan resource Gateway API dengan nama yang sama ke namespace yang sama di beberapa kluster bidang data, resource terakhir yang diterapkan akan menimpa resource sebelumnya.
Langkah 1: Verifikasi CRD Gateway API
Komponen CRD Gateway API diinstal secara default di kluster Container Service for Kubernetes (ACK) versi 1.24 dan lebih baru.
Untuk memverifikasi bahwa CRD tersebut ada di kluster ACK Anda, jalankan perintah berikut.
kubectl get crds | grep gateway.networking.k8s.io
-
Jika CRD telah diinstal, output-nya mirip dengan berikut:
gatewayclasses.gateway.networking.k8s.io 2023-05-10T02:51:33Z gateways.gateway.networking.k8s.io 2023-05-10T02:51:33Z httproutes.gateway.networking.k8s.io 2023-05-10T02:51:33Z referencegrants.gateway.networking.k8s.io 2023-05-10T02:51:33ZJalankan perintah berikut untuk memeriksa versi CRD.
kubectl get crds -o yaml | grep 'gateway.networking.k8s.io/bundle-version'Output yang diharapkan:
gateway.networking.k8s.io/bundle-version: v0.6.0 gateway.networking.k8s.io/bundle-version: v0.6.0 gateway.networking.k8s.io/bundle-version: v0.6.0 gateway.networking.k8s.io/bundle-version: v0.6.0 -
Jika output tidak mencakup CRD yang diharapkan, login ke Konsol ACK, buka halaman Add-ons, lalu instal komponen Gateway API. Untuk informasi selengkapnya, lihat Manage add-ons.
Langkah 2: Aktifkan dukungan Gateway API
Di lingkungan kubeconfig untuk instans ASM Anda, tambahkan bidang enableGatewayAPI: true ke resource ASMMeshConfig bernama default.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMeshConfig
metadata:
name: default
spec:
enableGatewayAPI: true
Setelah Anda mengaktifkan sakelar enableGatewayAPI, lapisan kontrol akan menghasilkan CRD Gateway API terkait. Baik Gateway API maupun Istio mendefinisikan resource bernama Gateway, yang dapat menyebabkan konflik saat Anda menggunakan kubectl. Untuk mengatasinya, gunakan perintah kubectl get gtw untuk mengambil resource Gateway dari Gateway API dan gunakan perintah kubectl get gw untuk mengambil resource Gateway dari Istio.
Langkah 3: Konfigurasikan aturan routing HTTP
Gunakan Gateway API untuk mengonfigurasi aturan routing HTTP yang mengekspos aplikasi httpbin melalui gerbang. Anda perlu membuat resource Gateway dan HTTPRoute di kluster ACK Anda.
-
Buat resource Gateway.
-
Buat file bernama gateway.yaml dengan konten berikut.
Konfigurasi ini menerapkan resource Gateway ke gerbang ASM yang ditentukan. Konfigurasi ini membuat listener pada Port 80 yang menggunakan protokol HTTP dan mengatur
hostnamemenjadi*.aliyun.com, yang memungkinkan aturan routing dari semua namespace untuk disambungkan ke listener ini. Di file YAML, ganti${ASM_GATEWAY_NAME}dengan nama gerbang ASM Anda. -
Di lingkungan kubeconfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy Gateway.
kubectl apply -f gateway.yaml
-
-
Buat resource HTTPRoute.
-
Buat file bernama http-route.yaml dengan konten berikut.
Konfigurasi ini menyambungkan HTTPRoute ke resource
gatewaydi namespaceistio-system. Karena tidak ada listener spesifik yang dinamai, aturan ini berlaku untuk semua listener yang kompatibel pada gerbang tersebut. Permintaan dengan awalan path/getdiarahkan ke Port 8000 layanan httpbin di namespace yang sama. -
Di lingkungan kubeconfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy HTTPRoute.
kubectl apply -f http-route.yaml
-
-
Jalankan perintah berikut untuk mengakses aplikasi httpbin melalui ingress gateway dan verifikasi bahwa aturan routing HTTP aktif. Ganti {INGRESS_GATEWAY_IP} dengan alamat IP ingress gateway Anda.
curl -I -HHost:httpbin.aliyun.com "http://{INGRESS_GATEWAY_IP}:80/get"Output yang diharapkan:
HTTP/1.1 200 OK server: istio-envoy date: Fri, 12 May 2023 08:16:30 GMT content-type: application/json content-length: 516 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 4Tanggapan
200 OKmengonfirmasi bahwa aturan routing HTTP aktif.
Langkah 4: Konfigurasikan aturan routing HTTPS
Gunakan Gateway API untuk mengonfigurasi aturan routing HTTPS. Aturan ini mengekspos aplikasi httpbin dan melakukan terminasi TLS di gerbang ASM. Anda perlu membuat resource Gateway dan HTTPRoute di kluster ACK.
-
Gunakan fitur manajemen sertifikat global ASM untuk membuat sertifikat HTTPS untuk
a.aliyun.com. Beri nama sertifikat tersebutmyexample-credential. Untuk informasi selengkapnya, lihat Langkah 1: Siapkan sertifikat server dan kunci privat untuk beberapa host. -
Buat resource Gateway.
-
Buat file bernama gateway-https.yaml dengan konten berikut.
Di file YAML, ganti
${ASM_GATEWAY_NAME}dengan nama gerbang ASM Anda. -
Di lingkungan kubeconfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy Gateway.
kubectl apply -f gateway-https.yaml
-
-
Buat resource HTTPRoute.
-
Buat file bernama httpbin-https.yaml dengan konten berikut.
-
Di lingkungan kubeconfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy HTTPRoute.
kubectl apply -f httpbin-https.yaml
-
-
Jalankan perintah berikut untuk mengakses aplikasi httpbin melalui ingress gateway dan verifikasi bahwa aturan routing HTTPS aktif. Ganti {INGRESS_GATEWAY_IP} dengan alamat IP ingress gateway Anda.
curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{INGRESS_GATEWAY_IP} https://a.aliyun.com/status/418Output yang diharapkan:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`Output tersebut mengonfirmasi bahwa aturan routing HTTPS aktif.