Dalam kluster ACK, ALB Ingress menyediakan Load balancing lapisan 7 dengan mengelola objek API untuk mengekspos layanan dalam kluster ke traffic eksternal. Topik ini menjelaskan cara menggunakan ALB Ingress untuk meneruskan permintaan dari nama domain atau jalur URL yang berbeda ke grup server backend yang berbeda, mengalihkan permintaan HTTP ke HTTPS, serta mengimplementasikan fitur seperti rilis bertahap.
Indeks
Klasifikasi fitur | Contoh konfigurasi |
Konfigurasi ALB Ingress | |
Konfigurasi Port/Protokol | |
Konfigurasi aturan pengalihan | |
Konfigurasi lanjutan |
Teruskan permintaan berdasarkan nama domain
Anda dapat membuat Ingress sederhana untuk meneruskan permintaan berdasarkan nama domain tertentu atau nama domain kosong.
Teruskan permintaan berdasarkan nama domain standar
Contoh YAML berikut menetapkan jalur routing ke /hello. Ketika klien mengakses demo.domain.ingress.top/hello, permintaan akan diteruskan ke layanan backend.
Terapkan templat berikut untuk membuat layanan, penerapan, dan Ingress. Ini meneruskan permintaan akses ke layanan menggunakan nama domain Ingress.
Jalankan perintah berikut untuk mengakses layanan menggunakan nama domain yang ditentukan.
Ganti <ADDRESS> dengan nama domain instans ALB. Untuk mendapatkan nama domain tersebut, jalankan
kubectl get ing.curl -H "host: demo.domain.ingress.top" <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Teruskan permintaan berdasarkan nama domain kosong
Contoh YAML berikut menggunakan nama domain kosong dan menetapkan jalur routing ke /hello. Ketika klien mengakses <ADDRESS>/hello, permintaan akan diteruskan ke layanan backend.
Terapkan templat berikut untuk membuat Ingress.
Jalankan perintah berikut untuk mengakses layanan menggunakan nama domain kosong.
Ganti <ADDRESS> dengan nama domain instans ALB. Untuk mendapatkan nama domain tersebut, jalankan
kubectl get ing.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Teruskan permintaan berdasarkan jalur URL
ALB Ingress mendukung penerusan permintaan berdasarkan URL. Anda dapat menetapkan kebijakan pencocokan URL yang berbeda menggunakan bidang pathType. Bidang pathType mendukung tiga jenis pencocokan berikut.
Pencocokan eksak (
Exact): Mencocokkan jalur URL permintaan secara persis.Bawaan (
ImplementationSpecific): Perilaku ditentukan oleh logika spesifik controller Ingress. Untuk Controller ALB Ingress, jenis ini berfungsi sebagai pencocokan eksak. Jika Anda tidak menentukan bidang path, ALB Ingress menggunakan/sebagai jalur bawaan.Pencocokan awalan (
Prefix): Mencocokkan awalan jalur URL permintaan.
Jika Anda menetapkan pathType ke
ExactatauPrefix, Anda harus menetapkan bidangpathke jalur mutlak non-kosong. Jika tidak, sumber daya Ingress tidak dapat dibuat karena kegagalan validasi.Kebijakan pencocokan URL dapat saling bertentangan. Dalam kasus ini, aturan pengalihan diurutkan berdasarkan prioritas sebelum permintaan diteruskan. Untuk informasi selengkapnya, lihat Konfigurasikan prioritas aturan pengalihan.
Jalur sederhana (/、/foo、/foo/)
Jenis pencocokan
Jalur aturan (aturan routing)
Jalur permintaan (akses pengguna)
Apakah cocok dengan aturan?
Pencocokan awalan (Prefix)
/
/ (mencocokkan semua aturan)
Ya
/foo
/foo
/foo/
Ya
/foo/
/foo
/foo/
Ya
/aaa
/ccc
Tidak, awalannya tidak cocok.
Pencocokan eksak (Exact) atau Bawaan (ImplementationSpecific)
/foo
/foo
Ya
/bar
Tidak
/foo/
Tidak
/foo/
/foo
Tidak
Jalur hierarkis (/aaa/bb, /aaa/bbb, /aaa/bbb/)
Jenis pencocokan
Jalur aturan (aturan routing)
Jalur permintaan (akses pengguna)
Apakah cocok dengan aturan?
Pencocokan awalan (Prefix)
/aaa/bb
/aaa/bbb
Tidak
/aaa/bbb
/aaa/bbb
Ya
/aaa/bbb/
/aaa/bbb
Ya, garis miring di akhir pada jalur aturan diabaikan.
/aaa/bbb
/aaa/bbb/
Ya, garis miring di akhir pada jalur permintaan dicocokkan.
/aaa/bbb/ccc
Ya, subjalur dari jalur permintaan dicocokkan.
Dua jalur aturan ditetapkan secara bersamaan
Jenis pencocokan
Jalur aturan (aturan routing)
Jalur permintaan (akses pengguna)
Apakah cocok dengan aturan?
Pencocokan awalan (Prefix)
/
/aaa
/aaa/ccc
Ya, jalur permintaan mencocokkan awalan
/dari jalur aturan./aaa
/
/aaa/ccc
Ya, jalur permintaan mencocokkan awalan
/aaadari jalur aturan./ccc
Ya, jalur permintaan mencocokkan awalan
/dari jalur aturan./aaa
/bbb
/ccc
Tidak, awalannya tidak cocok.
Bagian berikut memberikan contoh ketiga jenis pencocokan tersebut:
Pencocokan awalan (Prefix)
Jalur URL dicocokkan berdasarkan awalan, dengan segmen dipisahkan oleh /. Pencocokan bersifat case-sensitive dan membandingkan setiap segmen jalur.
Dalam contoh YAML berikut, jika aturan routing ditetapkan ke /, semua jalur yang dimulai dengan /, seperti /hello, dapat dicocokkan dan diakses.
Terapkan templat berikut untuk membuat Ingress.
Jalankan perintah berikut untuk mengakses layanan.
Ganti <ADDRESS> dengan nama domain instans ALB. Untuk mendapatkan nama domain tersebut, jalankan
kubectl get ing.curl <ADDRESS>/hello
Output yang diharapkan:
{"hello":"coffee"}Pencocokan eksak (Exact) atau Bawaan (ImplementationSpecific)
Dalam contoh YAML berikut, jika aturan routing ditetapkan ke /hello, hanya jalur /hello yang dapat dicocokkan dan diakses.
Terapkan templat berikut untuk membuat Ingress.
Jalankan perintah berikut untuk mengakses layanan.
Ganti <ADDRESS> dengan nama domain instans ALB. Untuk mendapatkan nama domain tersebut, jalankan
kubectl get ing.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Konfigurasikan Pemeriksaan kesehatan
ALB Ingress mendukung Pemeriksaan kesehatan. Anda dapat mengonfigurasinya dengan menyetel anotasi berikut.
Berikut adalah contoh anotasi:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/healthcheck-enabled: "true"
alb.ingress.kubernetes.io/healthcheck-path: "/"
alb.ingress.kubernetes.io/healthcheck-protocol: "HTTP"
alb.ingress.kubernetes.io/healthcheck-httpversion: "HTTP1.1"
alb.ingress.kubernetes.io/healthcheck-method: "HEAD"
alb.ingress.kubernetes.io/healthcheck-code: "http_2xx"
alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5"
alb.ingress.kubernetes.io/healthcheck-interval-seconds: "2"
alb.ingress.kubernetes.io/healthy-threshold-count: "3"
alb.ingress.kubernetes.io/unhealthy-threshold-count: "3"
spec:
... ...Parameter | Deskripsi | Nilai bawaan |
| Menentukan apakah Pemeriksaan kesehatan diaktifkan untuk grup server backend.
|
|
| Jalur untuk Pemeriksaan kesehatan. |
|
| Protokol untuk Pemeriksaan kesehatan.
|
|
| Versi HTTP. Parameter ini berlaku ketika
|
|
| Metode untuk Pemeriksaan kesehatan.
Penting Jika |
|
| Kode status Pemeriksaan kesehatan. Server backend dianggap sehat hanya ketika permintaan probe berhasil dan mengembalikan kode status yang ditentukan. Anda dapat menentukan satu atau beberapa opsi berikut. Pisahkan beberapa kode status dengan koma (,):
|
|
| Kode status Pemeriksaan kesehatan. Server backend dianggap sehat hanya ketika permintaan probe berhasil dan mengembalikan kode status yang ditentukan. Jika Anda menggunakan parameter ini bersama dengan Opsi yang tersedia bergantung pada nilai
|
|
| Periode timeout Pemeriksaan kesehatan dalam detik (s). Rentang nilai: [1, 300]. |
|
| Interval Pemeriksaan kesehatan dalam detik (s). Rentang nilai: [1, 50]. |
|
| Jumlah Pemeriksaan kesehatan berturut-turut yang berhasil yang diperlukan untuk menyatakan server backend dalam kondisi sehat. Rentang nilai: [2, 10]. |
|
| Jumlah Pemeriksaan kesehatan berturut-turut yang gagal yang diperlukan untuk menyatakan server backend dalam kondisi tidak sehat. Rentang nilai: [2, 10]. |
|
| Port yang digunakan untuk Pemeriksaan kesehatan. |
Catatan
|
Konfigurasikan Pengalihan HTTP ke HTTPS
ALB Ingress dapat mengalihkan permintaan HTTP ke Port HTTPS 443 menggunakan anotasi berikut.
Fitur ini hanya didukung untuk aturan pengalihan HTTP pada port listener 80.
Fitur ini hanya dapat digunakan bersama anotasi yang terkait dengan aksi pengalihan kustom, seperti
RemoveHeader,InsertHeader, danCorslintas domain.Untuk mengonfigurasi anotasi ini, pastikan listener HTTPS pada port 443 dikonfigurasi dalam AlbConfig. Untuk informasi selengkapnya, lihat Konfigurasikan listener ALB menggunakan AlbConfig.
Parameter | Deskripsi | Contoh anotasi |
| Mengalihkan permintaan HTTP ke Port HTTPS 443. | |
Dukung protokol backend HTTPS dan gRPC
ALB mendukung HTTPS dan gRPC sebagai protokol backend. Untuk menggunakannya, tambahkan anotasi berikut ke Ingress Anda.
Setelah Ingress dibuat, protokol backend tidak dapat diubah. Untuk mengubah protokol, Anda harus menghapus lalu membuat ulang Ingress.
Parameter | Deskripsi | Contoh YAML |
|
| |
Konfigurasikan ekspresi reguler
Gunakan anotasi alb.ingress.kubernetes.io/use-regex: "true" untuk mengaktifkan mode ekspresi reguler, lalu konfigurasikan ekspresi reguler yang sesuai dalam kondisi atau aksi pengalihan kustom.
Anotasi ini hanya berlaku untuk aturan path dengan pathType: Prefix.
Parameter | Deskripsi | |
| Mengaktifkan ekspresi reguler. | |
| Mengonfigurasi kondisi pengalihan kustom. Untuk informasi selengkapnya, lihat Kondisi pengalihan.
|
Aturan pencocokan ekspresi reguler:
Objek pencocokan | Awalan | Contoh aturan | Jalur klien | Cocok? | Deskripsi |
Nama domain | Dimulai dengan |
| test.EXAMPLE.com | Ya | Nama domain mendukung pencocokan ekspresi reguler case-insensitive. |
Jalur | Dimulai dengan |
| /API | Ya | Jalur mendukung pencocokan ekspresi reguler case-insensitive. |
Dimulai dengan |
| /Api | Tidak | Jalur mendukung pencocokan ekspresi reguler case-sensitive. |
Konfigurasikan penulisan ulang
ALB Ingress mendukung fitur penulisan ulang. Setelah menerima permintaan klien, fitur ini memodifikasi jalur permintaan lalu mengirim permintaan tersebut ke layanan backend. Penulisan ulang diimplementasikan menggunakan dua anotasi berikut:
alb.ingress.kubernetes.io/rewrite-target: /<path>/${number}: Mengaktifkan penulisan ulang dan menentukan jalur yang ditulis ulang.PentingGunakan format
${number}untuk merepresentasikan variabel yang diperoleh dari jalur asli melalui ekspresi reguler. Anda dapat mengonfigurasi satu atau beberapa variabel, seperti${1},${2}, atau${3}. Anda dapat memperoleh maksimal tiga variabel dari jalur asli.pathTypedari Ingress harus diatur kePrefix.
alb.ingress.kubernetes.io/use-regex: Menentukan apakah akan menggunakan ekspresi reguler dalam jalur. Ini diaktifkan secara bawaan setelahrewrite-targetdikonfigurasi."true": Gunakan ekspresi reguler."false": Jangan gunakan ekspresi reguler. Jika jalur berisi karakter khusus seperti“%#;!()[]^,”\", sumber daya Ingress gagal dibuat.
Contoh konfigurasi
Skenario 1: Hapus awalan
Dalam contoh YAML berikut, path: /something(/|$)(.*) menggunakan ekspresi reguler untuk membagi jalur permintaan klien menjadi tiga bagian:
/something: Mencocokkan awalan yang akan dihapus.(/|$): Grup penangkapan pertama. Mencocokkan/setelah/somethingatau akhir jalur ($).(.*): Grup penangkapan kedua. Mencocokkan semua konten setelah/something/dan digunakan dalam jalur yang ditulis ulang menggunakan${2}.
Jalur yang ditulis ulang yang dikonfigurasi dalam anotasi alb.ingress.kubernetes.io/rewrite-target adalah / (awalan jalur standar) + ${2} (konten grup penangkapan kedua). Tabel berikut menunjukkan hasil penulisan ulang jalur:
Jalur klien asli | Cocok dengan ekspresi reguler jalur? | Rewritten Path |
| Cocok. Grup penangkapan kedua kosong. |
|
| Cocok. Grup penangkapan kedua kosong. |
|
| Cocok. Konten grup penangkapan kedua adalah |
|
| Tidak cocok. Dalam contoh ini, tidak ada aturan routing yang cocok, dan ALB Ingress mengembalikan kode status 503. | |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # Mengizinkan bidang path menggunakan ekspresi reguler.
alb.ingress.kubernetes.io/rewrite-target: /${2} # Anotasi ini mendukung penggantian ekspresi reguler.
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080Skenario 2: Tangkap dan susun ulang beberapa bagian
Contoh berikut menangkap dan menyusun ulang beberapa bagian dari jalur /items/(.*)/(.*)/(.*). Jalur yang ditulis ulang adalah / (awalan jalur standar) + ${2} (konten grup penangkapan kedua) + ?code= + ${3} (konten grup penangkapan ketiga). Tabel berikut menunjukkan hasil penulisan ulang jalur:
Contoh ini secara eksplisit memerlukan empat segmen dalam jalur. Metode ini mengharuskan klien menggunakan format jalur tetap.
Jalur klien asli | Cocok dengan ekspresi reguler jalur? | Jalur yang ditulis ulang |
| Cocok. Konten grup penangkapan kedua adalah |
|
| Cocok. Konten grup penangkapan kedua adalah |
|
| Tidak cocok. Dalam contoh ini, tidak ada aturan routing yang cocok, dan ALB Ingress mengembalikan kode status 503. | |
| Tidak cocok. Dalam contoh ini, tidak ada aturan routing yang cocok, dan ALB Ingress mengembalikan kode status 503. | |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # Mengizinkan bidang path menggunakan ekspresi reguler.
alb.ingress.kubernetes.io/rewrite-target: /${2}?code=${3} # Anotasi ini mendukung penggantian ekspresi reguler.
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /items/(.*)/(.*)/(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080Skenario 3: Tulis ulang beberapa jalur ke satu jalur
Contoh berikut mencocokkan beberapa jalur (/app-a(/|$)(.*) dan /app-b(/|$)(.*)) dengan ekspresi reguler dan menulis ulangnya ke satu jalur. Jalur yang ditulis ulang adalah /app-c/ + ${2} (konten grup penangkapan kedua). Tabel berikut menunjukkan hasil penulisan ulang jalur:
Jalur klien asli | Cocok dengan ekspresi reguler jalur? | Jalur yang ditulis ulang |
| Cocok. Konten grup penangkapan kedua adalah |
|
| Cocok. Konten grup penangkapan kedua adalah |
|
| Cocok. Grup penangkapan kedua kosong. |
|
| Tidak cocok. Dalam contoh ini, tidak ada aturan routing yang cocok, dan ALB Ingress mengembalikan kode status 503. | |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # Mengizinkan bidang path menggunakan ekspresi reguler.
alb.ingress.kubernetes.io/rewrite-target: /app-c/${2} # Anotasi ini mendukung penggantian ekspresi reguler.
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /app-a(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
- path: /app-b(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080Skenario 4: Tulis ulang nama domain
Anotasi alb.ingress.kubernetes.io/rewrite-target hanya mendukung perubahan jalur. Untuk mengubah bagian lain dari URL, seperti nama domain dan parameter, Anda dapat menggunakan aturan pengalihan kustom.
Verifikasi pencocokan aturan penulisan ulang
Anda dapat menggunakan perintah sed untuk menguji apakah jalur tertentu yang digunakan klien cocok dengan ekspresi reguler yang dikonfigurasi dalam `path` dan untuk melihat jalur baru yang ditulis ulang.
Ambil jalur penangkapan /items/(.*)/(.*)/(.*) dan aturan penulisan ulang /${2}?code=${3} dari Skenario 2: Tangkap dan susun ulang beberapa bagian sebagai contoh:
Simpan perintah contoh berikut ke
path2.txt:/items/electronics/computers/554 /items/produce/fruits/12 /items/headphones/5 /drinks/41Periksa apakah jalur cocok dan lihat jalur yang ditulis ulang:
Perintah berikut menggunakan ekspresi reguler jalur (
/items/(.*)/(.*)/(.*)) dan jalur yang ditulis ulang (/${2}?code=${3}) dari contoh. Dalam perintah sed, karakter khusus/harus di-escape dengan backslash\, dan sintaks untuk konten grup penangkapan diubah dari${2}menjadi\2.sed -E 's#\/items\/(.*)\/(.*)\/(.*)#Matched: [&] ---> Rewritten: [/\2?code=\3]#' path2.txtOutput yang diharapkan adalah sebagai berikut. Dua jalur pertama cocok dengan aturan penulisan ulang dan ditulis ulang ke jalur baru. Dua jalur terakhir tidak cocok dan tidak ditulis ulang.
Matched: [/items/electronics/computers/554] ---> Rewritten: [/computers?code=554] Matched: [/items/produce/fruits/12] ---> Rewritten: [/fruits?code=12] /items/headphones/5 /drinks/41
Konfigurasikan port listener kustom
ALB Ingress mendukung port listener kustom melalui anotasi. Ini memungkinkan layanan mengekspos port 80 (HTTP) dan port 443 (HTTPS) secara bersamaan.
ALB tidak mendukung pembuatan listener baru secara langsung dalam Ingress. Untuk memastikan Ingress berfungsi dengan benar, Anda harus terlebih dahulu membuat port dan protokol listener yang diperlukan dalam AlbConfig, lalu mengaitkan listener tersebut dengan layanan dalam Ingress. Untuk informasi selengkapnya tentang cara membuat listener ALB, lihat Konfigurasikan listener ALB menggunakan AlbConfig.
Parameter | Deskripsi | Contoh YAML |
| Memungkinkan layanan mendengarkan pada port 80 dan port 443. | |
Konfigurasikan prioritas aturan pengalihan
Secara bawaan, aturan pengalihan ALB diprioritaskan sebagai berikut:
Ingress yang berbeda diurutkan berdasarkan urutan leksikografis
namespace/name. Urutan leksikografis yang lebih kecil menunjukkan prioritas yang lebih tinggi.Namespace dibandingkan terlebih dahulu. Jika namespace-nya sama, nama dibandingkan karakter per karakter.
Dalam Ingress yang sama, aturan diurutkan berdasarkan urutannya dalam bidang
rules. Aturan yang muncul lebih awal memiliki prioritas lebih tinggi.rules: - host: www.example.com http: ... - host: www.test.com http: ...
Jika Anda tidak ingin mengubah namespace/name dari Ingress, Anda dapat mengonfigurasi anotasi Ingress berikut untuk menentukan prioritas aturan pengalihan ALB:
Parameter | Deskripsi | Rentang nilai | Contoh YAML |
| Menentukan prioritas aturan pengalihan ALB. Nilai yang lebih kecil menunjukkan prioritas yang lebih tinggi. Prioritas aturan dalam listener yang sama harus unik. | [1,1000] Nilai bawaan: 10 | |
Implementasikan rilis bertahap menggunakan anotasi
ALB mendukung routing kompleks dan menyediakan kemampuan rilis bertahap berdasarkan header, cookie, dan bobot. Anda dapat mengonfigurasi anotasi berikut untuk secara fleksibel mengimplementasikan berbagai kebijakan rilis bertahap. Untuk informasi selengkapnya tentang praktik terbaik rilis bertahap, lihat Implementasikan rilis bertahap menggunakan ALB Ingress.
Parameter | Deskripsi | Catatan |
| Mengaktifkan fitur rilis bertahap |
|
Distribusikan traffic rilis bertahap berdasarkan header tertentu
Parameter
Deskripsi
Contoh YAML
alb.ingress.kubernetes.io/canary-by-headerAturan ini memungkinkan Anda menyesuaikan header permintaan dan nilai yang sesuai. Anda harus mengonfigurasi kedua anotasi tersebut.
Ketika
headerdanheader-valuedalam permintaan cocok dengan nilai yang ditetapkan, traffic permintaan didistribusikan ke titik akhir layanan rilis bertahap.Permintaan lain yang tidak cocok didistribusikan ke layanan rilis bertahap berikutnya sesuai dengan prioritas rilis bertahap.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/order: "1" alb.ingress.kubernetes.io/canary: "true" alb.ingress.kubernetes.io/canary-by-header: "location" alb.ingress.kubernetes.io/canary-by-header-value: "hz" name: demo-canary spec: ... ...alb.ingress.kubernetes.io/canary-by-header-valueJika header permintaan berisi
location: hz, traffic diarahkan ke layanan rilis bertahap. Permintaan lain didistribusikan ke layanan berdasarkan kebijakan bobot yang dikonfigurasi. Berikut adalah contoh konfigurasi.Distribusikan traffic rilis bertahap berdasarkan cookie tertentu
Parameter
Nilai cookie
Contoh YAML
alb.ingress.kubernetes.io/canary-by-cookiealways: Semua traffic permintaan didistribusikan ke titik akhir layanan rilis bertahap.never: Tidak ada traffic permintaan yang didistribusikan ke titik akhir layanan rilis bertahap.
Rilis bertahap berbasis cookie tidak mendukung pengaturan kustom, hanya
alwaysdannever.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/order: "2" alb.ingress.kubernetes.io/canary: "true" alb.ingress.kubernetes.io/canary-by-cookie: "demo" name: demo-canary-cookie ... ...Jika header permintaan berisi
Cookie: demo=always, traffic diarahkan ke layanan rilis bertahap. Jika header permintaan berisiCookie: demo=never, traffic tidak diarahkan ke layanan rilis bertahap. Berikut adalah contoh konfigurasi.Distribusikan traffic berdasarkan bobot
Parameter
Deskripsi
Contoh YAML
alb.ingress.kubernetes.io/canary-weightMenetapkan persentase permintaan yang akan dikirim ke layanan tertentu. Nilainya harus berupa bilangan bulat dari 0 hingga 100.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/order: "3" alb.ingress.kubernetes.io/canary: "true" alb.ingress.kubernetes.io/canary-weight: "50" name: demo-canary-weightContoh berikut menetapkan bobot layanan rilis bertahap ke 50%:
Implementasikan persistensi sesi menggunakan anotasi
ALB Ingress mendukung persistensi sesi melalui anotasi berikut.
Berikut adalah contoh anotasi:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-v3
annotations:
alb.ingress.kubernetes.io/sticky-session: "true"
alb.ingress.kubernetes.io/sticky-session-type: "Insert" # Saat cookie kustom didukung, jenis penyisipan cookie harus Server.
alb.ingress.kubernetes.io/cookie-timeout: "1800"
alb.ingress.kubernetes.io/cookie: "test"
spec:
... ...Parameter | Deskripsi | Nilai bawaan |
| Menentukan apakah persistensi sesi diaktifkan.
|
|
| Metode penanganan cookie.
Catatan Parameter ini berlaku saat |
|
| Periode timeout cookie dalam detik. Rentang nilai: 1 hingga 86400. Anotasi ini berlaku saat | 1000 |
| Nilai cookie kustom. Anotasi ini wajib dan tidak boleh kosong saat | "" |
Tentukan algoritma penyeimbangan beban untuk grup server
Anda dapat menggunakan anotasi berikut dalam ALB Ingress untuk menentukan algoritma penyeimbangan beban untuk grup server. Tabel berikut menjelaskan nilai yang valid.
Parameter | Nilai | Deskripsi | |
|
| Weighted round-robin. Server backend dengan bobot lebih tinggi lebih mungkin dipilih. Ini adalah nilai bawaan. | |
| Weighted least connections. Pemilihan berdasarkan bobot yang ditetapkan untuk setiap server backend dan beban aktualnya (jumlah koneksi). Jika bobotnya sama, server dengan koneksi paling sedikit diprioritaskan. | ||
| Source IP hash. Permintaan didistribusikan berdasarkan hash dari alamat IP sumber klien. Permintaan dari alamat IP yang sama diteruskan ke server backend yang sama. | ||
| URL parameter hash. Gunakan anotasi |
Konfigurasikan akses lintas domain
ALB Ingress mendukung pengendalian perilaku lintas domain melalui parameter anotasi berikut. Anda dapat menentukan situs yang diizinkan, metode permintaan, header permintaan dan respons, penanganan kredensial, serta durasi cache preflight (OPTIONS) untuk memenuhi persyaratan akses lintas domain dalam berbagai skenario keamanan dan bisnis.
Berikut adalah contoh anotasi:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/enable-cors: "true"
alb.ingress.kubernetes.io/cors-expose-headers: ""
alb.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
alb.ingress.kubernetes.io/cors-allow-credentials: "true"
alb.ingress.kubernetes.io/cors-max-age: "600"
alb.ingress.kubernetes.io/cors-allow-origin: "Nama domain lintas domain yang diizinkan"
spec:
... ...Parameter | Deskripsi | Nilai bawaan |
| Mengaktifkan konfigurasi CORS lintas domain. | Nilai bawaan: |
| Situs yang diizinkan mengakses sumber daya server melalui browser. Pisahkan situs dengan koma (,). Nilai tunggal harus dimulai dengan http:// atau https:// diikuti nama domain yang valid atau nama domain wildcard tingkat pertama. Alamat IP tidak didukung. |
|
| Metode lintas domain yang diizinkan. Metode tidak case-sensitive. Pisahkan metode lintas domain dengan koma (,). |
|
| Header permintaan yang dapat disebarkan lintas domain. Anda dapat mengatur ini ke |
|
| Daftar header yang dapat diekspos. Anda dapat mengatur ini ke |
|
| Menentukan apakah kredensial diizinkan dibawa selama akses lintas domain. |
|
| Untuk permintaan tidak sederhana, ini menetapkan durasi cache maksimum dalam detik untuk permintaan preflight OPTIONS di browser. Nilainya harus dalam rentang [0, 172800]. | Nilai bawaan: |
Koneksi persisten backend
Penyeimbangan beban tradisional menggunakan koneksi singkat untuk mengakses grup server backend. Setiap permintaan memerlukan pembentukan dan penghentian koneksi TCP, yang dapat menjadikan konektivitas jaringan sebagai bottleneck untuk sistem berkinerja-tinggi. Dengan menggunakan koneksi persisten backend, Anda dapat secara signifikan mengurangi konsumsi sumber daya untuk penanganan koneksi dan sangat meningkatkan kinerja pemrosesan. Berikut adalah contoh konfigurasi:
Parameter | Deskripsi | Contoh YAML |
| Mengaktifkan koneksi persisten backend. Saat diaktifkan, ini mengurangi kebutuhan untuk membentuk dan menghentikan koneksi TCP untuk setiap permintaan, sehingga mengurangi konsumsi sumber daya dan meningkatkan kemampuan pemrosesan sistem berkinerja-tinggi. | |
Dukung lampiran IPv6 untuk grup server
Untuk melampirkan Pod IPv4 dan IPv6 ke grup server yang telah Anda aktifkan lampiran IPv6-nya, Anda harus terlebih dahulu mengaktifkan fitur dual-stack untuk kluster tersebut. Untuk informasi selengkapnya, lihat Buat Kluster ACK yang dikelola.
Berikut adalah batasan untuk mengaktifkan lampiran IPv6:
Jika VPC tempat grup server berada tidak memiliki IPv6 yang diaktifkan, Anda tidak dapat mengaktifkan fitur lampiran IPv6 untuk grup server tersebut.
Saat Anda melampirkan grup server tipe IP atau tipe Function Compute melalui aksi pengalihan kustom, Anda tidak dapat mengaktifkan fitur lampiran IPv6.
Untuk Ingress yang terkait dengan instans ALB tipe IPv4, Anda tidak dapat mengaktifkan fitur lampiran IPv6 untuk grup server tersebut.
Layanan dan ALB Ingress harus dikonfigurasi untuk mendukung dual-stack. Setelah Anda membuat instans ALB yang mendukung dual-stack, Anda dapat melampirkan server backend IPv4 dan IPv6 ke grup server tersebut.
Objek konfigurasi | Parameter konfigurasi | Nilai | Deskripsi | Contoh YAML |
Layanan |
|
| Menentukan jenis alamat IP yang tersedia untuk Layanan. | |
|
| Menetapkan kebijakan IP untuk Layanan. Dual-stack didukung. | ||
ALB Ingress |
|
| Mengaktifkan fitur lampiran IPv6 untuk grup server. | |
Dukung Pembatasan kecepatan QPS
ALB mendukung Pembatasan kecepatan QPS untuk aturan pengalihan. Anda dapat mengonfigurasi anotasi berikut untuk mengimplementasikan Pembatasan kecepatan QPS.
Anotasi | Deskripsi | Contoh YAML |
| Menetapkan batas atas untuk Pembatasan kecepatan QPS pada aturan pengalihan. Rentang nilai: [1, 1000000] | |
Backend mulai lambat
Setelah Pod baru ditambahkan ke backend layanan, jika ALB Ingress langsung mendistribusikan traffic ke Pod baru tersebut, hal ini dapat menyebabkan lonjakan sementara pada penggunaan CPU atau memori, yang mengakibatkan kesalahan akses. Dengan mulai lambat, ALB Ingress secara bertahap mentransfer traffic ke Pod baru tersebut, sehingga mengurangi dampak lonjakan traffic mendadak. Berikut adalah contoh konfigurasi:
Parameter | Deskripsi | Contoh YAML |
| Menentukan apakah fitur mulai lambat diaktifkan. Secara bawaan dinonaktifkan.
| |
| Waktu yang dibutuhkan agar traffic secara bertahap meningkat setelah mulai lambat selesai. Durasi yang lebih lama berarti peningkatan traffic yang lebih lambat. Satuannya adalah detik (s). Nilainya harus dalam rentang [30, 900]. Nilai bawaan adalah 30 detik. |
Pengurasan koneksi
Saat sebuah Pod memasuki status Terminating, ALB Ingress menghapusnya dari grup server backend. Namun, koneksi yang sudah ada dari instans ALB ke Pod tersebut tidak langsung dihentikan. Hal ini dapat mencegah layanan dalam Pod dimatikan secara elegan atau dapat menyebabkan kesalahan permintaan. Untuk menghindari masalah ini, Anda dapat menggunakan fitur pengurasan koneksi ALB. Saat sebuah Pod dihapus atau gagal dalam Pemeriksaan kesehatan, ALB Ingress memungkinkan permintaan yang sudah ada untuk diselesaikan dalam periode timeout tertentu lalu menutup koneksi tersebut. Proses ini memastikan layanan offline dengan lancar. Untuk informasi selengkapnya, lihat Pastikan shutdown layanan lancar dengan pengurasan koneksi ALB.
Sebelum periode timeout pengurasan koneksi berakhir, ALB Ingress tidak dapat menjamin bahwa Pod tersebut masih berjalan. Anda dapat mengonfigurasi spec.terminationGracePeriodSeconds untuk Pod tersebut atau menggunakan preStop Hook untuk mengontrol ketersediaan Pod dalam status Terminating.
Parameter | Deskripsi | Contoh YAML |
| Menentukan apakah pengurasan koneksi diaktifkan. Secara bawaan dinonaktifkan.
| |
| Periode timeout pengurasan koneksi dalam detik (s). Nilainya harus dalam rentang [0, 900]. Nilai bawaan adalah 300 detik. |
Nonaktifkan penyeimbangan beban lintas zona
Secara bawaan, ALB mengaktifkan penyeimbangan beban lintas zona. Artinya, traffic didistribusikan secara merata ke layanan backend di berbagai zona dalam wilayah yang sama. Jika Anda menonaktifkan penyeimbangan beban lintas zona untuk grup server ALB, traffic hanya didistribusikan di antara layanan backend dalam zona yang sama.
Untuk menonaktifkan penyeimbangan beban lintas zona, pastikan setiap zona memiliki layanan backend yang tersedia dan server tersebut memiliki sumber daya yang cukup. Lakukan operasi ini dengan hati-hati untuk menghindari gangguan pada layanan Anda.
Contoh berikut menunjukkan cara menonaktifkan penyeimbangan beban lintas zona:
Parameter | Deskripsi | Contoh YAML |
| Menentukan apakah akan menonaktifkan pengalihan lintas zona. Secara bawaan diaktifkan.
| |