Kurangi Biaya AWS dengan Kubernetes Ingress dengan ELB Balancer Klasik


Beberapa bulan yang lalu saya menulis artikel tentang pengontrol Kubernetes Nginx Ingress , yang menempati peringkat kedua popularitas di blog ini. Tema utamanya adalah penggunaan Kubernetes Ingress untuk penerapan di tempat. Namun, sebagian besar pengguna menggunakan Kubernetes di cloud AWS dan layanan cloud publik dari penyedia lain. Namun, masalahnya adalah AWS menciptakan ELB baru (Penghitung Beban Elastis) untuk setiap layanan tipe LoadBalancer. Ini mungkin terlalu mahal. Jika Anda menggunakan Kubernetes Ingress, Anda hanya perlu satu ELB.


Bagaimana cara kerjanya?


Untuk pemahaman yang lebih baik, saya akan memberikan beberapa diagram. Tanpa pengontrol Ingress, penyeimbang ELB klasik yang terpisah akan dibuat untuk setiap layanan yang disediakan:



Saat menggunakan Ingress, Anda hanya perlu satu penyeimbang ELB seperti itu, mengarahkan semua permintaan ke proksi Ingress yang berjalan di kluster:



Pertimbangkan biaya Penyeimbang Beban Klasik:


Anda harus membayar untuk setiap jam penuh atau tidak lengkap penyeimbang beban Classic Load Balancer dan untuk setiap gigabyte data yang ditransfer dengannya.

Ini berarti bahwa ketika menggunakan sebuah cluster di wilayah AS Timur, Anda harus membayar sekitar $ 18,25 untuk setiap layanan yang disediakan. Anda juga harus membayar untuk setiap gigabyte data yang diproses. Ingress memungkinkan Anda mengurangi biaya AWS dengan sejumlah besar layanan. Tentu saja, untuk memastikan ketersediaan tinggi, Anda dapat menggunakan beberapa replika pod proxy Ingress.


Menyebarkan Nginx Ingress


Ada sejumlah besar opsi yang tersedia untuk pengontrol Ingress, misalnya, Traefik , Voyager (untuk HAProxy), Kontur (untuk Utusan ), atau bahkan pengontrol Ingress AWS ALB (versi alfa), yang sedikit berbeda dari yang lain. Dalam posting ini, saya melihat controller Ingress Nginx , sekarang yang paling umum. Berbeda dengan artikel sebelumnya pada pengontrol Ingress Nginx , kali ini saya menggunakan Helm untuk penempatan:


cat > values.yaml <<EOF controller: replicaCount: 2 config: use-proxy-protocol: "true" service: annotations: service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*' EOF helm install --name ingress \ --namespace ingress \ -f values.yaml \ stable/nginx-ingress 

Catatan Ada masalah dengan Helm bahwa boolean tidak diuraikan sebagai string saat menggunakan argumen set. Oleh karena itu, saya membuat file dengan nilai, dan tidak --set default melalui --set dan --set-string .


Memeriksa hearth Ingress menampilkan dua layanan, pengontrol dan sisi server secara default:


 kubectl get pod -n ingress --selector=app=nginx-ingress NAME READY STATUS RESTARTS AGE ingress-nginx-ingress-controller-8689c87db7-jlwxv 1/1 Running 0 5m ingress-nginx-ingress-controller-8689c87db7-kv859 1/1 Running 0 5m ingress-nginx-ingress-default-backend-5f5888cc9b-jdjrp 1/1 Running 0 5m 

Beberapa poin harus dijelaskan di sini. Karena semua permintaan akan dilakukan di bawah pengontrol Ingress, diinginkan untuk memiliki setidaknya dua replika. Ini pada dasarnya adalah server proxy internal. Pengontrol menggunakan ujung belakang default untuk merutekan sumber daya Ingress yang tidak ada. Sisi server cukup sederhana secara default. Untuk mendapatkan alamat IP sumber di log proksi Ingress, saya mengaktifkan protokol proxy untuk Nginx dan ELB menggunakan dua pengaturan berikut:


 --set controller.service.annotations."service\\.beta\\.kubernetes\\.io/aws-load-balancer-proxy-protocol"='*' \ --set-string controller.config.use-proxy-protocol=true \ 

Protokol koneksi proxy dirancang untuk berkomunikasi server proxy tanpa kehilangan data klien.


Dan sebagai bonus, kini Anda dapat dengan mudah mendapatkan DNS otomatis. Pertama-tama buat data DNS A menggunakan metacharacters, seperti *.test.example.com , yang akan mengarah ke pengontrol Ingress ELB. Alamat ELB dapat diperoleh dengan menggunakan perintah ini:


 kubectl get svc ingress-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' -n ingress a00950ebcfd0411e740ee0207cf10ce8-1089949860.eu-west-1.elb.amazonaws.com 

Kemudian, saat membuat titik masuk Ingress dengan host site1.test.example.com , site1.test.example.com dapat langsung memasukkan baris ini di browser. DNS akan menyelesaikan nama tanpa konfigurasi tambahan. Menggunakan catatan DNS dengan metakarakter bukanlah ide yang baik, tetapi berfungsi. Untuk mengkonfigurasi DNS secara detail, Anda dapat menggunakan DNS eksternal untuk Kubernetes.


Kesimpulan


Menggunakan pengontrol Ingress sangat membantu untuk mencapai tingkat otomatisasi yang lebih tinggi. Tetapi ingat bahwa jika gagal, semua titik akhir eksternal Anda juga akan gagal! Pada artikel selanjutnya, saya akan menunjukkan cara mengkonfigurasi pembaruan otomatis dan pemasangan sertifikat SSL menggunakan Let's Encrypt. Setelah itu, Anda dapat menggunakan DNS otomatis dengan titik akhir SSL secara default. Ikuti beritanya.

Source: https://habr.com/ru/post/id423809/


All Articles