ALB Ingress menyediakan manajemen traffic Lapisan 7 yang dibangun di atas Application Load Balancer (ALB) Alibaba Cloud, dengan dukungan untuk HTTP, HTTPS, dan QUIC. Tutorial ini menunjukkan cara mengarahkan traffic ke layanan backend yang berbeda berdasarkan path URL.
Cara kerja ALB Ingress
Konsep utama:
ALB Ingress Controller: Komponen ini mengelola resource Ingress. Secara dinamis mengambil perubahan pada resource Ingress dan AlbConfig dari API Server kluster dan memperbarui instans ALB sesuai dengan aturan pengalihan yang ditentukan dalam Ingress. Berbeda dengan NGINX Ingress Controller, ALB Ingress Controller berfungsi sebagai lapisan kontrol untuk instans ALB. Komponen ini mengelola instans ALB tetapi tidak memproses traffic pengguna secara langsung; instans ALB-lah yang meneruskan traffic pengguna.
AlbConfig adalah Custom Resource Definition (CRD) tingkat kluster yang dibuat oleh ALB Ingress Controller. Setiap AlbConfig berisi parameter yang mendefinisikan konfigurasi untuk satu instans ALB. Instans ALB berfungsi sebagai titik masuk traffic dan meneruskan permintaan ke layanan backend. Instans ini sepenuhnya dikelola oleh Application Load Balancer (ALB). Berbeda dengan NGINX Ingress Controller, ALB Ingress tidak memerlukan operasi dan pemeliharaan (O&M) serta menyediakan elastisitas yang lebih besar.
IngressClass: IngressClass mendefinisikan asosiasi antara Ingress dan AlbConfig.
Ingress: Di Kubernetes, Ingress adalah objek resource yang mendefinisikan routing dan aturan akses traffic eksternal. ALB Ingress Controller memantau perubahan pada resource Ingress dan memperbarui instans ALB untuk mencapai penerusan traffic.
-
Service: Titik masuk stabil untuk sekelompok Pod dengan fungsi yang sama. Aplikasi lain mengakses Pod backend melalui IP virtual dan port Service, terlepas dari perubahan pada Pod individual.
Gambar berikut menunjukkan hubungan antara instans ALB dan ALB Ingress.
Batasan
Nama resource AlbConfig, namespace, ingress, dan service tidak boleh diawali dengan aliyun.
Skenario contoh
Tutorial ini men-deploy empat Pod NGINX dan mengonfigurasi ALB Ingress untuk mengarahkan traffic berdasarkan path URL di bawah domain yang sama.
|
Permintaan frontend |
Layanan backend |
|
|
layanan |
|
|
layanan |
Prasyarat
-
Anda telah menginstal ALB Ingress Controller.
-
Anda telah membuat dua VSwitch di zona ketersediaan yang berbeda dalam VPC kluster Anda. Buat dan kelola VSwitch.
Langkah 1: Deploy layanan backend
Menggunakan konsol
-
Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Workloads > Deployments.
-
Di halaman Deployments, klik Create from YAML di pojok kanan atas.
-
Di halaman Create, konfigurasikan parameter.
-
Sample Template: Pilih Custom.
-
Template: Masukkan konfigurasi YAML untuk men-deploy dua Deployment (
coffeedantea) dan dua Service (coffee-svcdantea-svc).
-
-
Klik Create. Muncul pesan Created.
-
Verifikasi bahwa Deployment dan Service telah dibuat.
-
Di panel navigasi kiri, pilih Workloads > Stateless. Deployment bernama
coffeedanteamuncul. -
Di panel navigasi kiri, pilih Network > Services. Service bernama
coffee-svcdantea-svcmuncul.
-
Menggunakan kubectl
-
Buat file bernama
cafe-service.yamldengan konten berikut. File ini men-deploy dua Deployment (coffeedantea) dan dua Service (coffee-svcdantea-svc). -
Jalankan perintah berikut untuk men-deploy resource.
kubectl apply -f cafe-service.yamlOutput yang diharapkan:
deployment "coffee" created service "coffee-svc" created deployment "tea" created service "tea-svc" created -
Verifikasi Deployment dan Service.
-
Periksa Deployment.
kubectl get deploymentOutput yang diharapkan:
NAME READY UP-TO-DATE AVAILABLE AGE coffee 2/2 2 2 2m26s tea 2/2 2 2 2m26s -
Periksa Service.
kubectl get svcOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coffee-svc ClusterIP 172.16.XX.XX <none> 80/TCP 9m38s tea-svc ClusterIP 172.16.XX.XX <none> 80/TCP 9m38s
-
Langkah 2: Buat ALBConfig
Konsol
-
Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Workloads > Custom Resources.
-
Di tab CRDs, klik Create from YAML.
-
Sample Template: Pilih Custom.
-
Template: Tempel manifes YAML.
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Wajib
Deskripsi
metadata.nameYa
Nama ALBConfig.
CatatanNama ALBConfig harus unik dalam kluster untuk menghindari konflik penamaan.
spec.config.nameTidak
Nama instans ALB.
spec.config.addressTypeTidak
Jenis jaringan instans ALB. Nilai yang valid:
-
Internet (default): Instans menyediakan layanan load balancing publik melalui internet.
CatatanInstans ALB yang menghadap internet menggunakan Elastic IP Address (EIP). Anda dikenai biaya untuk instans EIP, bandwidth, dan transfer data. Pay-as-you-go.
-
Intranet: Instans menyediakan layanan load balancing privat dalam VPC.
spec.config.zoneMappingsYa
ID vSwitch untuk instans ALB. Untuk petunjuk cara membuat vSwitch, lihat Buat dan kelola vSwitch.
Catatan-
vSwitch harus berada di zona ketersediaan yang didukung ALB dan VPC yang sama dengan kluster. Wilayah dan zona ketersediaan yang didukung ALB.
-
Jika wilayah Anda menawarkan beberapa zona ketersediaan, kami merekomendasikan memilih vSwitch dari minimal dua zona berbeda untuk ketersediaan tinggi.
spec.listenersTidak
Port listener dan protokol. Contoh ini menggunakan HTTP pada port 80.
ALB Ingress memerlukan listener. Pertahankan default ini untuk menghindari konfigurasi manual.
-
-
-
Klik Create. Pesan Created. ditampilkan.
-
Verifikasi instans ALB:
-
Masuk ke konsol Application Load Balancer (ALB).
-
Di bilah navigasi atas, pilih wilayah instans.
-
Di halaman Instance, verifikasi bahwa instans ALB bernama alb-test muncul dalam daftar instans.
-
Kubectl
-
Salin konten berikut ke file bernama alb-test.yaml untuk membuat ALBConfig.
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Wajib
Deskripsi
metadata.nameYa
Nama ALBConfig.
CatatanNama ALBConfig harus unik dalam kluster untuk menghindari konflik penamaan.
spec.config.nameTidak
Nama instans ALB.
spec.config.addressTypeTidak
Jenis jaringan instans ALB. Nilai yang valid:
-
Internet (default): Instans menyediakan layanan load balancing publik melalui internet.
CatatanInstans ALB yang menghadap internet menggunakan Elastic IP Address (EIP). Anda dikenai biaya untuk instans EIP, bandwidth, dan transfer data. Pay-as-you-go.
-
Intranet: Instans menyediakan layanan load balancing privat dalam VPC.
spec.config.zoneMappingsYa
ID vSwitch untuk instans ALB. Untuk petunjuk cara membuat vSwitch, lihat Buat dan kelola vSwitch.
Catatan-
vSwitch harus berada di zona ketersediaan yang didukung ALB dan VPC yang sama dengan kluster. Wilayah dan zona ketersediaan yang didukung ALB.
-
Jika wilayah Anda menawarkan beberapa zona ketersediaan, kami merekomendasikan memilih vSwitch dari minimal dua zona berbeda untuk ketersediaan tinggi.
spec.listenersTidak
Port listener dan protokol. Contoh ini menggunakan HTTP pada port 80.
ALB Ingress memerlukan listener. Pertahankan default ini untuk menghindari konfigurasi manual.
-
-
Jalankan perintah berikut untuk membuat ALBConfig.
kubectl apply -f alb-test.yamlOutput yang diharapkan:
albconfig.alibabacloud.com/alb-demo createdOutput ini mengonfirmasi bahwa ALBConfig telah dibuat.
Langkah 3: Buat IngressClass
Kami merekomendasikan membuat satu IngressClass untuk setiap AlbConfig.
Konsol
-
Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Workloads > Custom Resources.
-
Di tab CRDs, klik Create from YAML.
-
Sample Template: Pilih Custom.
-
Template: Masukkan manifes YAML.
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Wajib
Deskripsi
metadata.name
Ya
Nama IngressClass.
CatatanNama harus unik dalam kluster.
spec.parameters.name
Ya
Nama AlbConfig yang terkait.
-
-
Klik Create. Pesan konfirmasi muncul.
-
Verifikasi bahwa IngressClass telah dibuat:
-
Di panel navigasi kiri, pilih .
-
Klik tab Resource Objects.
-
Di kotak pencarian API Group, masukkan IngressClass. IngressClass yang dibuat muncul.
-
Kubectl
-
Buat file bernama alb.yaml dengan konten berikut.
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Wajib
Deskripsi
metadata.nameYa
Nama IngressClass.
CatatanNama harus unik dalam kluster.
spec.parameters.nameYa
Nama AlbConfig yang terkait.
-
Jalankan perintah berikut untuk membuat IngressClass.
kubectl apply -f alb.yamlOutput yang diharapkan:
ingressclass.networking.k8s.io/alb created
Langkah 4: Buat Ingress
Konsol
-
Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Network > Ingresses.
-
Di halaman Ingresses, klik Create Ingress. Di kotak dialog Create Ingress, konfigurasikan Ingress.
Parameter
Deskripsi
Nilai contoh
Gateway Type
Pilih jenis gateway. Opsi termasuk ALB dan MSE.
ALB Ingress
Name
Nama kustom untuk Ingress.
cafe-ingress
IngressClass
Kelas kustom untuk Ingress.
alb
Rules
Klik +Add Rule untuk menambahkan beberapa aturan routing.
-
Domain Name: Nama domain kustom.
-
Mappings: Konfigurasikan parameter berikut.
-
Path: Path URL untuk mengakses layanan. Dalam contoh ini, parameter ini dibiarkan kosong untuk menggunakan path root /.
-
Rule: Mendukung Prefix (Prefix-based Match), Exact (Exact Match), dan ImplementationSpecific (Default Value).
-
Service: Backend target, yaitu Service Kubernetes.
-
Port: Port yang diekspos oleh layanan.
-
-
Ingress mendukung beberapa path di bawah nama domain yang sama. Klik +Add untuk menambahkan path baru.
-
Domain Name: demo.domain.ingress.top
-
Path mapping:
-
Path: /tea
-
Rule: ImplementationSpecific
-
Service: tea-svc
-
Port: 80
-
-
Mappings:
-
Path: /coffee
-
Rule: ImplementationSpecific
-
Service: coffee-svc
-
Port: 80
-
TLS Settings
Aktifkan opsi ini untuk mengamankan Ingress dengan sertifikat TLS (HTTPS).
-
Domain Name: Masukkan nama domain kustom.
-
Secret: Pilih Secret yang berisi sertifikat TLS.
Untuk membuat Secret, lakukan langkah-langkah berikut:
-
Di sebelah kanan Secret, klik Create.
-
Di kotak dialog Create Secret, atur Name, Cert, dan Key, lalu klik OK.
-
Dari daftar drop-down Secret, pilih Secret yang telah Anda buat.
-
Klik Add untuk mengonfigurasi beberapa pengaturan TLS.
Untuk informasi selengkapnya, lihat Konfigurasikan sertifikat HTTPS untuk komunikasi terenkripsi.
Biarkan TLS Settings dinonaktifkan. Konfigurasi ini tidak diperlukan untuk contoh ini.
More
-
Canary Release: Aktifkan rilis canary. Anda dapat mengatur aturan canary berdasarkan header permintaan, cookie, dan bobot.
CatatanAnda hanya dapat mengatur satu jenis aturan (berdasarkan header permintaan, cookie, atau bobot). Jika Anda mengonfigurasi beberapa jenis, aturan tersebut akan dicocokkan dalam urutan header permintaan, cookie, dan bobot.
-
Based on Request Header: Membagi traffic berdasarkan header permintaan. Ini menambahkan anotasi
alb.ingress.kubernetes.io/canary-by-headerdanalb.ingress.kubernetes.io/canary-by-header-value. -
Based on Cookie: Membagi traffic berdasarkan cookie. Ini menambahkan anotasi
alb.ingress.kubernetes.io/canary-by-cookie. -
Based on Weight: Menentukan persentase permintaan (bilangan bulat dari 0 hingga 100) yang diarahkan ke Service tertentu. Ini menambahkan anotasi
alb.ingress.kubernetes.io/canary-weight.
-
-
Protocol: Mengaktifkan protokol HTTPS dan gRPC untuk layanan backend, menambahkan anotasi
alb.ingress.kubernetes.io/backend-protocol. -
Rewrite Path: Path dalam permintaan klien ditulis ulang sebelum permintaan dikirim ke layanan backend. Mengonfigurasi pengaturan ini menambahkan anotasi alb.ingress.kubernetes.io/rewrite-target.
Nonaktifkan rilis canary, dan pertahankan pengaturan protokol dan rewrite path default. Konfigurasi ini tidak diperlukan untuk contoh ini.
Custom Forwarding Rules
Aktifkan aturan pengalihan kustom untuk mengelola lalu lintas masuk dengan kontrol detail halus.
CatatanAnda dapat menambahkan maksimal 10 entri kondisi ke aturan pengalihan.
-
Dari daftar drop-down Add Condition, pilih opsi:
-
Domain Name:
Mencocokkan domain permintaan. Jika Anda menentukan beberapa domain, permintaan akan cocok jika menggunakan salah satu domain yang ditentukan. Saat Anda mengonfigurasi kondisi ini, anotasi
alb.ingress.kubernetes.io/conditions.host-exampleditambahkan. -
Path:
Mencocokkan path permintaan. Jika Anda menentukan beberapa path, permintaan akan cocok jika menggunakan salah satu path yang ditentukan. Saat Anda mengonfigurasi kondisi ini, anotasi
alb.ingress.kubernetes.io/conditions.path-exampleditambahkan. -
HTTP Header:
Mencocokkan header permintaan sebagai pasangan kunci-nilai. Misalnya, Key adalah
headernamedan Value adalahheadervalue1. Jika beberapa nilai header dikonfigurasi, hubungan di antara mereka adalah OR. Saat Anda mengonfigurasi kondisi ini, anotasialb.ingress.kubernetes.io/conditions.http-header-exampleditambahkan.
-
-
Dari daftar drop-down Action, pilih opsi:
-
Forward To
Meneruskan permintaan ke satu atau beberapa layanan backend berdasarkan bobot. Di bidang Service, pilih layanan target. Di bidang Port, pilih nomor port target. Kemudian, tentukan bobot.
CatatanJika Anda memilih aksi ini, Anda tidak perlu mengonfigurasi path mapping dalam aturan.
-
Return Fixed Response
Mengonfigurasi ALB untuk mengembalikan respons tetap kepada klien. Anda dapat mengatur kode status respons, isi body, dan tipe konten. Sesuai kebutuhan, konfigurasikan Response Status Code, Response Content Type (Optional), dan Response Content (Optional).
Response Body Type:
-
text/plain: teks biasa.
-
text/css: konten CSS.
-
text/html: konten HTML.
-
application/javascript: konten JavaScript.
-
application/json: konten JSON.
-
-
Aturan pengalihan kustom mendukung kondisi berdasarkan domain, path, atau Header HTTP, dan aksi seperti meneruskan ke layanan atau mengembalikan respons tetap. Sesuaikan aturan pengalihan untuk ALB Ingress.
Nonaktifkan aturan pengalihan kustom. Konfigurasi ini tidak diperlukan untuk contoh ini.
Annotations
Anda dapat menentukan nama dan nilai anotasi kustom, atau memilih atau mencari anotasi untuk dikonfigurasi. Untuk informasi selengkapnya tentang anotasi Ingress, lihat Annotations.
Tidak diperlukan untuk contoh ini.
Labels
Menentukan label untuk ditambahkan ke Ingress. Label adalah pasangan kunci-nilai yang dilampirkan ke objek untuk menentukan atribut pengenal.
Tidak diperlukan untuk contoh ini.
-
-
Di pojok kiri bawah halaman Create Ingress, klik OK.
-
Verifikasi Ingress:
-
Di panel navigasi kiri, pilih Network > Routes. Ingress cafe-ingress muncul.
-
Kolom Endpoint untuk cafe-ingress menampilkan alamat endpoint.
-
kubectl
-
Buat file bernama cafe-ingress.yaml dan tambahkan konten berikut:
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Wajib
Deskripsi
metadata.nameYa
Nama Ingress.
CatatanNama harus unik dalam kluster untuk menghindari konflik.
spec.ingressClassNameYa
Nama IngressClass yang terkait.
spec.rules.hostTidak
Nama domain dalam header HTTP
Host. Atur ke nama domain Anda sendiri.Kubernetes mencocokkan header Host yang masuk terhadap aturan Ingress dan mengarahkan permintaan yang cocok ke layanan backend yang ditentukan.
Catatan-
Nama domain kustom memerlukan Pendaftaran ICP yang valid untuk akses di daratan Tiongkok. Proses Pendaftaran ICP.
-
Jika Anda tidak mengatur parameter ini, aturan Ingress akan mencocokkan semua permintaan yang mencapai controller Ingress.
spec.rules.http.paths.pathYa
URL path pengalihan.
spec.rules.http.paths.pathTypeYa
Aturan pencocokan URL. Arahkan permintaan berdasarkan path URL.
spec.rules.http.paths.backend.service.nameYa
Nama Service backend.
spec.rules.http.paths.backend.service.port.numberYa
Nomor port Service backend.
Pastikan port ini sesuai dengan definisi Service.
-
-
Jalankan perintah berikut untuk membuat Ingress dengan routing berbasis
pathuntuk layanancoffeedantea.kubectl apply -f cafe-ingress.yamlOutput yang diharapkan:
ingress.networking.k8s.io/cafe-ingress created -
(Opsional) Dapatkan nama DNS ALB yang ditetapkan ke Ingress.
kubectl get ingressOutput yang diharapkan:
NAME CLASS HOSTS ADDRESS PORTS AGE cafe-ingress alb demo.domain.ingress.top alb-m551oo2zn63yov****.cn-hangzhou.alb.aliyuncs.com 80 50s
(Opsional) Langkah 5: Konfigurasikan resolusi nama domain
Jika Anda menentukan nama domain kustom di spec.rules.host, tambahkan rekaman CNAME yang mengarahkannya ke nama DNS ALB agar dapat diakses melalui domain Anda.
-
Klik nama kluster untuk membuka halaman pengelolaan kluster.
-
Di panel navigasi kiri, pilih Network > Routes.
-
Di kolom Endpoint cafe-ingress, salin nama DNS-nya.
-
Untuk menambahkan rekaman CNAME:
-
Masuk ke konsol Alibaba Cloud DNS.
-
Di halaman Domain Name Resolution, klik Add Zone.
-
Di kotak dialog Add Zone, masukkan nama domain Anda dan klik OK.
PentingAnda harus memverifikasi nama domain dengan rekaman TXT.
-
Untuk domain target, klik Settings di kolom Actions.
-
Di halaman Settings, klik Add Record.
-
Di panel Add Record, konfigurasikan pengaturan berikut untuk rekaman CNAME dan klik OK.
Parameter
Deskripsi
Record Type
Dari daftar drop-down, pilih CNAME.
Hostname
Awalan nama domain Anda, seperti
www.DNS Query Source
Pilih nilai default.
Record Value
Masukkan nama DNS yang Anda salin dari kolom Endpoint.
TTL
Durasi rekaman DNS disimpan cache di server DNS. Gunakan nilai default.
-
Langkah 6: Uji penerusan traffic
Masukkan domain pengujian dan path URL di browser Anda untuk memverifikasi routing traffic.
-
Jika Anda mengonfigurasi domain kustom, gunakan domain tersebut.
-
Jika Anda tidak mengonfigurasi domain kustom, gunakan nama DNS endpoint cafe-ingress.
Dalam contoh ini, domainnya adalah demo.domain.ingress.top:
-
Masukkan
demo.domain.ingress.top/coffee. Halaman backend coffee-svc ditampilkan.
-
Masukkan
demo.domain.ingress.top/tea. Halaman backend tea-svc ditampilkan.
Referensi
-
Penggunaan lanjutan layanan ALB Ingress mencakup pemeriksaan kesehatan, pengalihan HTTPS, rilis canary, dan port listener kustom.
-
Konfigurasikan sertifikat HTTPS untuk komunikasi terenkripsi.