API7 Cloud Terintegrasi dengan Kubernetes Service Discovery

Yong Qian

February 24, 2023

Products

Penghematan biaya, adaptabilitas, skalabilitas, keandalan — ledakan teknologi cloud dan kontainerisasi telah membawa banyak keuntungan dibandingkan arsitektur monolitik tradisional. Keuntungan-keuntungan ini membuatnya disukai oleh banyak pengguna perusahaan.

Yang mengikuti adalah bahwa perubahan dalam arsitektur juga membawa tantangan baru. Misalnya, secara tradisional, daftar IP upstream untuk proxy balik seringkali tidak berubah dan dapat langsung ditulis dalam file konfigurasi statis. Di era cloud dan kontainerisasi, daftar IP dari setiap layanan upstream terus berubah. Pemeliharaan file konfigurasi menjadi mimpi buruk jika Anda terus menggunakan file konfigurasi statis. Karena ketepatan waktu pembaruan file konfigurasi akan langsung memengaruhi penerusan lalu lintas, pengguna harus memperkenalkan perangkat lunak tambahan untuk menangani pembaruan otomatis file konfigurasi, yang secara signifikan meningkatkan kompleksitas arsitektur.

Untuk menyederhanakan proses ini, API7 Cloud menghadirkan fungsi service discovery, yang langsung terhubung ke Kubernetes API Server untuk mendapatkan data Endpoints secara real-time, membantu pengguna memproksi aplikasi yang di-deploy di cluster Kubernetes dengan mudah.

Service Discovery di API7 Cloud

Service Discovery API7 Cloud

Persiapan

Pertama, kita perlu men-deploy instance APISIX melalui cloud-cli. Lihat dokumentasi API7 Cloud: Men-deploy instance gateway.

Dalam contoh ini, kita akan menggunakan panduan deployment Kubernetes yang disediakan dalam dokumen untuk membuat berbagai sumber daya di bawah namespace apisix, yang perlu kita buat terlebih dahulu:

kubectl create namespace apisix cloud-cli deploy kubernetes \ --name my-apisix \ --namespace apisix \ --apisix-image apache/apisix:2.15.0-centos

Membuat Service Account

Service Account adalah sumber daya inti untuk mengimplementasikan RBAC (Role-based access control) di Kubernetes. API7 Cloud perlu memiliki izin list dan watch dari sumber daya Endpoints untuk mendapatkan daftar instance dari Service upstream.

Konfigurasi yaml yang sesuai adalah sebagai berikut:

# rbac.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: apisix-k8s-sd-watcher rules: - apiGroups: [""] resources: ["endpoints"] verbs: ["list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: apisix-k8s-sd-watcher-binding subjects: - kind: ServiceAccount name: apisix-k8s-sd-sa namespace: apisix roleRef: kind: ClusterRole name: apisix-k8s-sd-watcher apiGroup: rbac.authorization.k8s.io --- apiVersion: v1 kind: ServiceAccount metadata: name: apisix-k8s-sd-sa namespace: apisix

Buat Service Account dan dapatkan Token:

kubectl apply -f rbac.yaml SECRET_NAME=`kubectl get sa -n apisix apisix-k8s-sd-sa -ojsonpath='{.secrets[0].name}'` kubectl get secrets $SECRET_NAME -n apisix -ojsonpath='{.data.token}' | base64 -d

Membuat Service Registry di API7 Cloud

Pergi ke Control Plane -> Settings -> Service Registry, gunakan Token yang diperoleh pada langkah sebelumnya untuk membuat service registry bertipe Kubernetes di API7 Cloud (perhatikan bahwa alamat API Server perlu diisi berdasarkan kasus penggunaan Anda). Dalam contoh ini, APISIX juga di-deploy di cluster Kubernetes target, sehingga alamat API server yang kita gunakan adalah kubernetes.default.svc.cluster.local:

Membuat Service Registry di API7 Cloud

Men-deploy Layanan di Kubernetes

Untuk memverifikasi efektivitas service discovery Kubernetes, kami men-deploy tiga replika layanan HTTPBin dan membuat Service yang sesuai.

kubectl create deployment httpbin --image=kennethreitz/httpbin:latest --replicas=3 -n apisix kubectl create service clusterip httpbin --tcp=80:80 -n apisix

Layanan httpbin yang dibuat

Membuat Aplikasi dan API di API7 Cloud

Setelah men-deploy aplikasi uji, pergi ke halaman API Management -> Applications di API7 Cloud dan klik tombol Create Application untuk membuat Aplikasi baru. Konfigurasi dasarnya adalah sebagai berikut:

  • sd.httpbin.org sebagai Host
  • / sebagai Path prefix

Bagian kritisnya adalah mengonfigurasi upstream untuk menggunakan Kubernetes dan registry yang baru saja kita buat untuk service discovery, bukan daftar IP statis:

Service Discovery menggantikan daftar IP statis

Selanjutnya, kami membuat API /anything di Aplikasi untuk menguji proxy:

API /anything

Menguji Proxy

Pertama, petakan port HTTP data plane ke mesin lokal melalui port-forward:

kubectl port-forward -n apisix svc/apisix-gateway 9080:80

Gunakan curl untuk meminta layanan target:

curl http://127.0.0.1:9080/anything -H 'Host: sd.httpbin.org' -i HTTP/1.1 200 OK Content-Type: application/json Content-Length: 373 Connection: keep-alive Date: Mon, 09 Jan 2023 08:33:44 GMT Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true Server: APISIX
Tags: