Bagaimana Amazon EKS dan APISIX Ingress Controller Bekerja Bersama untuk Mengelola Lalu Lintas yang Kompleks
API7.ai
February 7, 2021
Latar Belakang
Sebagai manajer lalu lintas, terkadang bahkan ketika Anda sudah siap untuk hal yang tak terduga, sulit untuk menghentikan yang tak terduga. Membangun gateway API empat arah sangat penting! Berikut adalah bagaimana Amazon EKS + Ingress APISIX! dapat membantu Anda hari ini.
Pengantar
Kubernetes adalah sistem sumber terbuka untuk mengotomatisasi penyebaran, penskalaan, dan manajemen aplikasi yang dikontainerisasi. Amazon Elastic Kubernetes Service (Amazon EKS) sebagai layanan Kubernetes yang dikelola memungkinkan Anda dengan mudah menjalankan beban Kubernetes di Amazon Cloud Technologies tanpa perlu instalasi dan pemeliharaan control plane atau node.
Apache APISIX adalah gateway API yang dinamis, real-time, dan berkinerja tinggi. Ini menyediakan fitur manajemen lalu lintas yang kaya seperti load balancing, upstream dinamis, deployment greyscale, segmentasi lalu lintas, autentikasi, dan observabilitas. Anda dapat menggunakan Apache APISIX untuk menangani lalu lintas utara-selatan antara klien tradisional dan server serta lalu lintas timur-barat antara layanan.
Ingress APISIX dapat digunakan sebagai controller entri untuk Kubernetes, memperkenalkan fitur terbaik dari Apache APISIX ke Kubernetes. Ini dapat digerakkan oleh komponen Controller yang dirancang dengan baik untuk membantu Anda memenuhi kebutuhan manajemen lalu lintas yang kompleks.

Cara mengonfigurasi dan menjalankan Ingress APISIX pada Amazon Elastic Kubernetes Service
Persyaratan Prasyarat
Sebelum Anda siap untuk menjalankan, harap konfigurasi cluster Amazon EKS yang tersedia di Amazon CloudTech.
Anda harus memiliki alat kubectl di lingkungan Anda sendiri, atur konteks ke cluster Amazon EKS Anda sendiri dengan menjalankan perintah berikut:
aws eks update-kubeconfig --name --region
Setelah cluster Kubernetes siap, buat namespace bernama ingress-apisix, di mana semua sumber daya yang akan digunakan akan dibuat.
kubectl create namespace ingress-apisix
Kami akan menggunakan Helm untuk menyebarkan semua komponen Ingress APISIX (Apache APISIX dan apisix-ingress-controller), jadi harap ikuti juga panduan instalasi untuk menginstal Helm. Helm chart untuk Apache APISIX dan apisix-ingress-controller berada di apache/apisix-helm-chart dan apache/apisix-ingress-controller, harap clone jalur ini untuk mendapatkan chart yang sesuai.
Menginstal Apache APISIX
Apache APISIX bertindak sebagai proxy plane untuk apisix-ingress-controller dan harus disebarkan terlebih dahulu.
cd /path/to/apisix-helm-chart helm repo add bitnami https://charts.bitnami.com/bitnami helm dependency update . /chart/apisix helm install apisix . /chart/apisix \ --set gateway.type=LoadBalancer \ --set allow.ipList="{0.0.0.0/0}" \ --namespace ingress-apisix kubectl get service --namespace ingress-apisix
Perintah di atas akan membuat dua sumber daya Kubernetes Service, apisix-gateway, yang menangani lalu lintas nyata, dan apisix-admin, yang bertindak sebagai control plane dan menangani semua perubahan konfigurasi. Di sini kami membuat apisix-gateway sebagai jenis layanan LoadBalancer, yang dapat diekspos ke Internet dengan bantuan Amazon Network Load Balancer. Kami dapat menemukan hostname dari load balancer dengan perintah berikut:
kubectl get service apisix-gateway \ --namespace ingress-apisix \ -o jsonpath='{.status.loadBalancer.ingress[].hostname}'
Juga perhatikan: bidang allow.ipList harus disesuaikan dengan EKS CIDR Ranges di cluster Amazon EKS kami sendiri, sehingga apisix-ingress-controller dapat dilisensikan oleh Apache APISIX (untuk mendorong sumber daya).
Lihat value.yaml untuk informasi lebih lanjut tentang semua item konfigurasi jika ada persyaratan lain.
Menginstal apisix-ingress-controller
Setelah berhasil menyebarkan Apache APISIX, saatnya untuk menginstal komponen Controller.
cd /path/to/apisix-ingress-controller # install base resources, e.g. ServiceAccount. helm install ingress-apisix-base -n ingress-apisix . /charts/base # install apisix-ingress-controller helm install ingress-apisix . /charts/ingress-apisix \ --set ingressController.image.tag=dev \ --set ingressController.config.apisix.baseURL=http://apisix-admin:9180/apisix/admin \ --set ingressController.config.apisix.adminKey={YOUR ADMIN KEY} \ --namespace ingress-apisix
Chart ingress-apisix-base akan menginstal beberapa dependensi dasar untuk apisix-ingress-controller, seperti ServiceAccount dan CRD khususnya.
Chart ingress-apisix akan memandu kita melalui instalasi Controller itu sendiri, kita dapat mengubah tag gambar ke rilis yang diinginkan dan kita dapat mengubah nilai ingressController.config.apisix.adminKey dalam perintah di atas, Konfigurasi ini dapat disesuaikan sesuai dengan skenario aktual (dan pastikan bahwa Admin key yang digunakan di sini sama dengan Key yang digunakan dalam penyebaran Apache APISIX). Jika Anda memiliki persyaratan lain, Anda dapat merujuk ke value.yaml untuk mempelajari lebih lanjut tentang semua item konfigurasi.
Kemudian coba buka konsol Amazon EKS, pilih cluster Anda dan klik pada tab Workloads dan Anda akan melihat bahwa semua Pod, etcd dan apisix-ingress-controller untuk Apache APISIX sudah siap.
Mulai pengujian
Pada titik ini kami telah menyebarkan semua komponen Ingress APISIX, jadi pastikan Anda memverifikasi bahwa semuanya berfungsi dengan baik. Kami kemudian akan menyebarkan layanan httpbin dan meminta Apache APISIX untuk merutekan semua permintaan ke host "local.httpbin.org" ke layanan ini.
Untuk melakukan ini, pertama-tama kita perlu membuat workload httpbin dan mengeksposnya.
kubectl run httpbin --image kennethreitz/httpbin --port 80 kubectl expose pod httpbin --port 80
Agar Apache APISIX dapat merutekan permintaan dengan benar, kita perlu membuat sumber daya ApisixRoute untuk menggerakkan proses ini.
# ar-httpbin.yaml apiVersion: apisix.apache.org/v1 kind: ApisixRoute metadata: name: httpserver-route spec: rules: - host: local.httpbin.org http: paths: - backend: serviceName: httpbin servicePort: 80 path: /*
Sumber daya ApisixRoute di atas akan memungkinkan Apache APISIX untuk merutekan permintaan dengan header host "local.httpbin.org" ke backend httpbin (yang baru saja kita buat).
Pengaturan ini kemudian diterapkan, tetapi harap dicatat bahwa layanan dan sumber daya ApisixRoute harus ditempatkan di namespace yang sama, dan apisix-ingress-controller tidak diizinkan untuk melintasi namespace.
kubectl apply -f ar-httpbin.yaml
Uji hasilnya dengan panggilan curl sederhana dari mana saja yang dapat mencapai layanan Apache APISIX.
$ curl http://{apisix-gateway-ip}:{apisix-gateway-port}/headers -s -H 'Host: local.httpbin.org' { "headers": { "Accept": "*/*", "Host": "httpbin.org", "User-Agent": "curl/7.64.1", "X-Amzn-Trace-Id": "Root=1-5ffc3273-2928e0844e19c9810d1bbd8a" } }
Jika jenis Service adalah ClusterIP, Anda perlu masuk ke Pod di cluster Amazon EKS dan kemudian menggunakan ClusterIP atau Service FQDN untuk mengakses Apache APISIX. Jika sudah diekspos (baik diekspos NodePort atau LoadBalancer), maka endpoint eksternal yang dapat dijangkau dapat diakses langsung.
Catatan: Artikel ini diterbitkan ulang dari situs web publik WeChat aws.