Cara Menggunakan Gateway API di APISIX Ingress Controller

Yeqi Peng

November 11, 2022

Products

Apa Itu Kubernetes Gateway API

Gateway API adalah spesifikasi lain yang diinisiasi oleh komunitas (dikelola oleh sig-network) untuk membantu pengguna mengekspos layanan di Kubernetes di luar kluster, selain dari Service dan Ingress yang sudah ada.

Gateway API mendukung banyak protokol jaringan umum (misalnya, HTTP, TCP, UDP) serta TLS. Selain itu, Gateway API mencakup sumber daya Gateway yang memungkinkan pengelolaan siklus hidup proxy atau gateway melalui API Kubernetes.

Mengapa Diperlukan Gateway API

Dibandingkan dengan Ingress, Gateway API mewakili superset fungsional dari Ingress, dengan beberapa peningkatan berikut:

  • Berorientasi peran: Gateway terdiri dari sumber daya API yang memodelkan peran organisasi yang menggunakan dan mengonfigurasi jaringan layanan Kubernetes.
  • Ekspresif: Sumber daya Gateway API mendukung fungsionalitas inti seperti pencocokan berbasis header, pembobotan lalu lintas, dan kemampuan lain yang sebelumnya hanya mungkin dilakukan di Ingress melalui anotasi kustom.
  • Dapat diperluas: Gateway API memungkinkan sumber daya kustom untuk ditautkan di berbagai lapisan API, yang memungkinkan kustomisasi granular di tempat yang tepat dalam struktur API.

Selain itu, standar ini mencakup fitur seperti portabilitas, gateway bersama, dan referensi lintas-namespace.

Seperti yang ditunjukkan dalam diagram, desain yang berorientasi peran memungkinkan berbagi infrastruktur jaringan dalam kluster antara tim yang berbeda dan berbagi kebijakan serta batasan yang ditetapkan oleh administrator kluster. Hal ini memungkinkan berbagai jenis peran, seperti penyedia infrastruktur, administrator kluster, dan pengembang aplikasi, untuk fokus pada pekerjaan mereka sendiri dan tidak pada tanggung jawab peran lain.

api-mode.png

Peran yang berbeda mengonfigurasi sumber daya Gateway API di tingkat yang berbeda, dan tingkat-tingkat tersebut bekerja sama:

gateway-roles.png

Status Saat Ini dari Gateway API

Saat ini, dengan rilis Gateway API v0.5.0, beberapa API inti penting pertama kali masuk ke tahap Beta, termasuk GatewayClass, Gateway, dan HTTPRoute.

Cara Menggunakan Gateway API di APISIX Ingress

Dukungan APISIX Ingress Controller untuk Gateway API sedang dalam pengembangan dan berada di tahap Alpha, dan saat ini mendukung sumber daya seperti HTTPRoute, TCPRoute.

Instalasi CRD Gateway API

Untuk menggunakan Gateway API, Anda perlu menginstal CRD untuk Gateway API terlebih dahulu, baik melalui salinan di repositori APISIX Ingress Controller atau repositori resmi kubernetes-sigs/gateway-api. Salinan CRD dari repositori APISIX Ingress Controller digunakan di sini sebagai contoh.

Jalankan perintah berikut untuk menginstal CRD untuk Gateway API.

git pull git@github.com:apache/apisix-ingress-controller.git cd apisix-ingress-controller kubectl apply -f ./samples/deploy/gateway-api/

Instalasi APISIX Ingress Controller

Dukungan Gateway API tidak diaktifkan secara default di APISIX Ingress Controller dan dapat diaktifkan dengan parameter -enable-gateway-api=true.

Saat menginstal dengan Helm, Anda dapat mengaktifkannya dengan mengonfigurasi values.

Gunakan perintah berikut untuk menginstal APISIX dan APISIX Ingress Controller.

helm repo add apisix https://charts.apiseven.com helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update kubectl create ns apisix-ingress helm install apisix apisix/apisix --namespace apisix-ingress \ --set gateway.type=NodePort \ --set ingress-controller.enabled=true \ --set ingress-controller.config.apisix.serviceNamespace=apisix-ingress \ --set ingress-controller.config.kubernetes.enableGatewayAPI=true

Perhatikan parameter -set ingress-controller.config.kubernetes.enableGatewayAPI=true yang digunakan untuk mengaktifkan dukungan Gateway API.

Perintah ini akan membuat lingkungan pengujian lengkap di bawah namespace apisix-ingress, termasuk APISIX, etcd, dan APISIX Ingress Controller.

Menyebarkan Beban Uji

Gunakan gambar kennethreitz/httpbin sebagai beban uji.

Gunakan perintah berikut untuk menyebarkan beban ini di bawah namespace default.

kubectl run httpbin --image kennethreitz/httpbin --port 80 kubectl expose pod httpbin --port 80

Konfigurasi HTTPRoute

Saat ini, APISIX Ingress Controller mendukung versi v1alpha2 dari sumber daya Gateway API.

Untuk pengujian, gunakan konfigurasi HTTPRoute berikut dan simpan ke file httproute.yaml:

# httproute.yaml apiVersion: gateway.networking.k8s.io/v1alpha2 kind: HTTPRoute metadata: name: basic-http-route spec: hostnames: - local.httpbin.org rules: - backendRefs: - name: httpbin port: 80 matches: - path: type: PathPrefix value: /

Gunakan perintah berikut untuk menyebarkan konfigurasi HTTPRoute ini:

kubectl apply -f ./httproute.yaml

Validasi

Validasi dapat dilakukan langsung di dalam Pod APISIX dengan menjalankan perintah berikut:

kubectl -n apisix-ingress exec -it $(kubectl -n apisix-ingress get Pods -l "app.kubernetes.io/name=apisix" -o name) -c apisix -- curl -H "Host: local.httpbin.org" localhost:9080/ip

Output yang diharapkan adalah:

{ "origin": "127.0.0.1" }

Ini menunjukkan bahwa konfigurasi kita telah berhasil diterapkan.

Bagaimana APISIX Ingress Mendukung Gateway API

Saat ini, APISIX Ingress Controller sedang menambahkan dukungan untuk Gateway API dan mendukung sumber daya seperti HTTPRoute, TCPRoute, dll.

Dukungan APISIX Ingress Controller untuk Gateway dan Gateway Class sedang dalam pengembangan aktif, sehingga konfigurasi sumber daya ini belum akan berlaku untuk saat ini.

Ringkasan

Dalam artikel ini, kami memperkenalkan Gateway API, spesifikasi baru di komunitas untuk mengekspos layanan di luar kluster, dan menjelaskan cara menggunakannya di APISIX Ingress Controller.

Dukungan penuh untuk Gateway API di APISIX Ingress Controller sedang dalam pengembangan aktif.

Tags: