Bagaimana Amazon EKS dan APISIX Ingress Controller Bekerja Bersama untuk Mengelola Lalu Lintas yang Kompleks

API7.ai

February 7, 2021

Ecosystem

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.

arsitektur teknis apisix-ingress-controller

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.

Tags: