Gateway API adalah proyek sumber terbuka yang dikelola oleh komunitas SIG-NETWORK. Proyek ini bertujuan untuk mengembangkan jaringan layanan dengan menyediakan antarmuka yang ekspresif, dapat diperluas, dan berorientasi pada peran. Anda dapat menggunakan Gateway API untuk menentukan aturan routing guna mengakses aplikasi dalam kluster.
Prasyarat
Kluster Container Service for Kubernetes (ACK) telah ditambahkan ke instance Service Mesh (ASM) versi 1.18 atau lebih baru. Untuk informasi lebih lanjut, lihat Tambahkan Kluster ke Instance ASM.
Sebuah ingress gateway telah diterapkan, dan port 80 serta 443 diaktifkan untuk ingress gateway tersebut. Untuk informasi lebih lanjut, lihat Buat Ingress Gateway.
Aplikasi httpbin telah diterapkan. Untuk informasi lebih lanjut, lihat Langkah 1 dalam Terapkan Aplikasi httpbin.
Catatan penggunaan
Deskripsi Versi:
Instance ASM versi V1.18 mendukung Gateway API V0.6.0.
Instance ASM versi V1.22 dan lebih baru mendukung Gateway API V1.1 dan GRPCRoute.
Instance ASM versi V1.24 dan lebih baru mendukung Gateway API V1.2.0.
Dalam mode multi-kluster, jika sumber daya gateway dengan nama yang sama dikonfigurasi di namespace yang sama di dua kluster pada bidang data, sumber daya yang diterapkan kemudian akan menimpa sumber daya sebelumnya.
Langkah 1: Konfirmasi bahwa CRD dari komponen Gateway API dibuat di kluster ACK
Secara default, CustomResourceDefinitions (CRD) dari komponen Gateway API secara otomatis dibuat di kluster ACK versi V1.24 dan lebih baru. Anda dapat melakukan operasi berikut untuk memastikan bahwa CRD dibuat di kluster ACK.
Jalankan perintah berikut untuk memeriksa apakah CRD dibuat di kluster ACK:
kubectl get crds | grep gateway.networking.k8s.ioJika keluarannya mirip dengan blok kode berikut, CRD telah dibuat.
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'Keluaran 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.0Jika keluaran tidak berisi CRD dari komponen Gateway API, masuk ke Konsol ACK dan instal komponen Gateway API di halaman Add-ons. Untuk informasi lebih lanjut, lihat Kelola Komponen.
Langkah 2: Aktifkan Gateway API untuk instance ASM
Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi dalam file kubeconfig, lalu tambahkan field enableGatewayAPI: true ke ASMMeshConfig bernama default.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMeshConfig
metadata:
name: default
spec:
enableGatewayAPI: trueSetelah Anda menetapkan enableGatewayAPI sebagai true, bidang kontrol akan membuat CRD dari komponen Gateway API. Baik komponen Gateway API maupun Istio berisi sumber daya gateway. Oleh karena itu, konflik mungkin terjadi saat Anda menggunakan kubectl untuk menjalankan perintah yang sama untuk menanyakan sumber daya gateway dari keduanya. Untuk menanyakan sumber daya gateway dari komponen Gateway API, jalankan perintah kubectl get gtw. Untuk menanyakan sumber daya gateway dari Istio, jalankan perintah kubectl get gw.
Langkah 3: Konfigurasikan aturan routing lalu lintas HTTP
Berikut ini menjelaskan cara menggunakan Gateway API untuk mengonfigurasi aturan routing lalu lintas HTTP. Aturan routing digunakan untuk mengekspos aplikasi httpbin di ingress gateway. Anda harus membuat gateway dan HTTPRoute di kluster ACK.
Buat Gateway.
Buat file gateway.yaml yang berisi konten berikut.
Konfigurasi dalam file ini menunjukkan bahwa gateway diterapkan pada ingress gateway tertentu dan pendengar dengan
host*.aliyun.comdibuat. Aturan routing dari semua namespace diizinkan untuk menggunakan pendengar. Pendengar menggunakan port 80 (HTTP). Ganti${Name of the ingress gateway}dalam file YAML dengan nama ingress gateway yang telah diterapkan.Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan gateway:
kubectl apply -f gateway.yaml
Buat HTTPRoute.
Buat file http-route.yaml yang berisi konten berikut.
Konfigurasi dalam file ini menunjukkan bahwa aturan routing menggunakan gateway bernama
gatewaydi namespace istio-system. Semua pendengar dari gateway digunakan di sini karena Anda tidak menentukan nama pendengar yang ingin digunakan. Permintaan dengan path yang diawali dengan/getdirute ke port 8000 dari aplikasi httpbin di namespace yang sama.Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan HTTPRoute:
kubectl apply -f http-route.yaml
Jalankan perintah berikut untuk mengakses aplikasi httpbin menggunakan ingress gateway dan memeriksa apakah aturan routing lalu lintas HTTP berlaku:
curl -I -HHost:httpbin.aliyun.com "http://${IP address of the ingress gateway}:80/get"Keluaran 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: 4Dalam keluaran di atas, Anda dapat melihat bahwa
200 OKdikembalikan. Ini menunjukkan bahwa aturan routing lalu lintas HTTP berlaku.
Langkah 4: Konfigurasikan aturan routing lalu lintas HTTPS
Berikut ini menjelaskan cara menggunakan Gateway API untuk mengonfigurasi aturan routing lalu lintas HTTPS, mengekspos aplikasi httpbin di ingress gateway menggunakan aturan tersebut, dan melakukan terminasi Transport Level Security (TLS) di ingress gateway. Anda harus membuat gateway dan HTTPRoute di kluster ACK.
Gunakan fitur manajemen sertifikat ASM untuk membuat sertifikat untuk host a.aliyun.com untuk menggunakan HTTPS. Tetapkan nama sertifikat menjadi myexample-credential. Untuk informasi lebih lanjut, lihat Langkah 1: Siapkan Sertifikat Server dan Kunci Pribadi untuk Beberapa Server.
Buat Gateway.
Buat file gateway-https.yaml yang berisi konten berikut.
Ganti
${Name of the ingress gateway}dalam file YAML dengan nama ingress gateway yang telah diterapkan.Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan gateway:
kubectl apply -f gateway-https.yaml
Buat HTTPRoute.
Buat file httpbin-https.yaml yang berisi konten berikut:
Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan HTTPRoute:
kubectl apply -f httpbin-https.yaml
Jalankan perintah berikut untuk mengakses aplikasi httpbin menggunakan ingress gateway dan memeriksa apakah aturan routing lalu lintas HTTPS berlaku:
curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{IP address of the deployed ingress gateway} https://a.aliyun.com/status/418Keluaran yang Diharapkan:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`Keluaran tersebut menunjukkan bahwa aturan routing lalu lintas HTTPS berlaku.