Dalam kluster ACK, ALB Ingress menyediakan Load balancing lapisan 7 untuk layanan dengan mengelola objek API yang dapat diakses secara eksternal. Topik ini menjelaskan cara menggunakan ALB Ingress untuk meneruskan permintaan dari nama domain atau jalur URL yang berbeda ke kelompok 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 standar tertentu atau nama domain kosong. Bagian berikut menyediakan contoh.
Teruskan permintaan berdasarkan nama domain standar
Pada contoh YAML berikut, jalur routing diatur ke /hello. Permintaan ke demo.domain.ingress.top/hello diteruskan ke layanan backend.
Terapkan templat berikut untuk membuat Service, deployment, dan Ingress. Permintaan diteruskan ke Service melalui nama domain yang ditentukan dalam Ingress.
Jalankan perintah berikut untuk mengakses layanan menggunakan nama domain standar yang ditentukan.
Ganti ADDRESS dengan nama domain instans ALB. Anda dapat menjalankan
kubectl get inguntuk mendapatkan nama domain tersebut.curl -H "host: demo.domain.ingress.top" <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Teruskan permintaan berdasarkan nama domain kosong
Pada contoh YAML berikut, nama domain dikosongkan dan jalur routing diatur ke /hello. Permintaan ke <ADDRESS>/hello 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. Anda dapat menjalankan
kubectl get inguntuk mendapatkan nama domain tersebut.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Teruskan permintaan berdasarkan jalur URL
ALB Ingress mendukung penerusan permintaan berdasarkan URL. Anda dapat mengatur kebijakan pencocokan URL yang berbeda menggunakan bidang pathType. Bidang pathType mendukung tiga jenis pencocokan berikut.
Pencocokan eksak (
Exact): Mencocokkan secara tepat jalur URL permintaan.Bawaan (
ImplementationSpecific): Logika spesifik ditentukan oleh controller Ingress. Pada ALB Ingress Controller, ini merupakan pencocokan eksak (Exact). Jika bidang path tidak ditentukan, ALB Ingress menggunakan/sebagai jalur bawaan.Pencocokan awalan (
Prefix): Mencocokkan awalan jalur URL permintaan.
Jika
pathTypediatur keExactatauPrefix, Anda harus mengatur path ke 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 aturan cocok?
Pencocokan awalan (Prefix)
/
/ (mencocokkan semua aturan)
Ya
/foo
/foo
/foo/
Ya
/foo/
/foo
/foo/
Ya
/aaa
/ccc
Tidak, awalan 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 aturan cocok?
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.
Mengatur dua jalur aturan sekaligus
Jenis pencocokan
Jalur aturan (aturan routing)
Jalur permintaan (akses pengguna)
Apakah aturan cocok?
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, awalan tidak cocok.
Bagian berikut menyediakan contoh ketiga jenis pencocokan tersebut:
Pencocokan awalan (Prefix)
Jalur URL menggunakan metode pencocokan awalan di mana segmen jalur dipisahkan oleh /. Pencocokan bersifat case-sensitive dan membandingkan setiap elemen dalam segmen jalur secara berurutan.
Pada contoh YAML berikut, aturan routing dikonfigurasi sebagai /. Semua jalur yang dimulai dengan /, seperti /hello, akan dicocokkan.
Terapkan templat berikut untuk membuat Ingress.
Jalankan perintah berikut untuk mengakses layanan.
Ganti ADDRESS dengan nama domain instans ALB. Anda dapat menjalankan
kubectl get inguntuk mendapatkan nama domain tersebut.curl <ADDRESS>/hello
Output yang diharapkan:
{"hello":"coffee"}Pencocokan eksak (Exact) atau Bawaan (ImplementationSpecific)
Pada contoh YAML berikut, aturan routing dikonfigurasi sebagai /hello. Hanya jalur /hello yang dicocokkan.
Terapkan templat berikut untuk membuat Ingress.
Jalankan perintah berikut untuk mengakses layanan.
Ganti ADDRESS dengan nama domain instans ALB. Anda dapat menjalankan
kubectl get inguntuk mendapatkan nama domain tersebut.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Konfigurasikan pemeriksaan kesehatan
ALB Ingress mendukung pemeriksaan kesehatan. Anda dapat mengonfigurasi pemeriksaan kesehatan dengan mengatur anotasi berikut.
Blok kode berikut menunjukkan 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 kelompok server backend.
|
|
| Jalur pemeriksaan kesehatan. |
|
| Protokol yang digunakan untuk pemeriksaan kesehatan.
|
|
| Versi protokol HTTP. Parameter ini berlaku saat
|
|
| Metode pemeriksaan kesehatan.
Penting Jika |
|
| Kode status pemeriksaan kesehatan. Server backend dianggap sehat hanya jika permintaan probe berhasil dan mengembalikan kode status yang ditentukan. Anda dapat memasukkan satu atau beberapa opsi berikut. Pisahkan beberapa kode status dengan koma (,).
|
|
| Kode status pemeriksaan kesehatan. Server backend dianggap sehat hanya jika 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 adalah [1, 300]. |
|
| Interval pemeriksaan kesehatan dalam detik (s). Rentang nilai adalah [1, 50]. |
|
| Jumlah pemeriksaan kesehatan berturut-turut yang berhasil yang diperlukan untuk menyatakan server backend dalam kondisi sehat. Rentang nilai adalah [2, 10]. |
|
| Jumlah pemeriksaan kesehatan berturut-turut yang gagal yang diperlukan untuk menyatakan server backend dalam kondisi tidak sehat. Rentang nilai adalah [2, 10]. |
|
| Port yang digunakan untuk pemeriksaan kesehatan. |
Catatan
|
Konfigurasikan pengalihan HTTP ke HTTPS
ALB Ingress menggunakan anotasi berikut untuk mengalihkan permintaan HTTP ke Port HTTPS 443.
Fitur ini hanya dapat dikonfigurasi pada aturan pengalihan HTTP yang menggunakan port listener 80.
Fitur ini hanya dapat digunakan bersama anotasi yang terkait dengan aksi pengalihan kustom
RemoveHeader,InsertHeader, danCorslintas domain.Untuk mengonfigurasi anotasi ini, Anda harus memastikan bahwa listener HTTPS untuk port 443 telah dikonfigurasi dalam AlbConfig. Untuk informasi selengkapnya, lihat Konfigurasikan listener ALB melalui AlbConfig.
Parameter | Deskripsi | Contoh anotasi |
| Mengalihkan permintaan HTTP ke Port HTTPS 443. | |
Dukungan protokol HTTPS dan gRPC untuk backend
ALB mendukung HTTPS dan gRPC sebagai protokol backend. Untuk menggunakannya, Anda dapat menambahkan anotasi berikut ke Ingress Anda.
Setelah Ingress dibuat, protokol backend tidak dapat diubah. Untuk mengubah protokol, Anda harus menghapus Ingress dan membuat yang baru.
Parameter | Deskripsi | Contoh YAML |
|
| |
Konfigurasikan ekspresi reguler
Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/use-regex: "true" untuk mengaktifkan mode ekspresi reguler. Kemudian, Anda dapat mengonfigurasi ekspresi reguler 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 (rewrite)
ALB Ingress mendukung fitur penulisan ulang (rewrite). Setelah ALB Ingress menerima permintaan klien, ia memodifikasi jalur permintaan tersebut lalu mengirimkan permintaan ke Service 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 menggunakan 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 setelah Anda mengonfigurasirewrite-target."true": Gunakan ekspresi reguler."false": Jangan gunakan ekspresi reguler. Jika jalur berisi karakter khusus, seperti“%#;!()[]^,”\", sumber daya Ingress tidak dapat dibuat.
Contoh konfigurasi
Skenario 1: Hapus awalan
Pada 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, yang mencocokkan karakter/atau akhir jalur ($) yang mengikuti/something.(.*): Grup penangkapan kedua, yang mencocokkan semua konten yang mengikuti/something/. Digunakan dalam jalur yang ditulis ulang sebagai${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 menjelaskan efek penulisan ulang jalur.
Jalur klien asli | Apakah cocok dengan ekspresi reguler jalur? | Jalur yang ditulis ulang |
| 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/(.*)/(.*)/(.*). Ini juga mengubah format URL menjadi format yang mirip dengan permintaan POST tanpa sepengetahuan pengguna. Jalur yang ditulis ulang adalah / (awalan jalur standar) + ${2} (konten grup penangkapan kedua) + ?code= + ${3} (konten grup penangkapan ketiga). Tabel berikut menjelaskan efek penulisan ulang jalur.
Contoh ini secara eksplisit memerlukan empat segmen dalam jalur. Metode ini mengharuskan klien menggunakan format jalur tetap.
Jalur klien asli | Apakah cocok dengan ekspresi reguler jalur? | Rewritten Path |
| 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 menulis ulang beberapa jalur ke satu jalur dengan mencocokkan beberapa jalur (/app-a(/|$)(.*) dan /app-b(/|$)(.*)) menggunakan ekspresi reguler. Jalur yang ditulis ulang adalah /app-c/ + ${2} (konten grup penangkapan kedua). Tabel berikut menjelaskan efek penulisan ulang jalur.
Jalur klien asli | Apakah 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 terlebih dahulu apakah jalur tertentu yang digunakan klien cocok dengan ekspresi reguler yang dikonfigurasi dalam jalur dan untuk melihat jalur baru yang ditulis ulang.
Bagian ini menggunakan 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:
Dalam perintah berikut, ekspresi reguler jalur (
/items/(.*)/(.*)/(.*)) dan jalur yang ditulis ulang (/${2}?code=${3}) dari contoh dimodifikasi. Dalam perintah sed, karakter khusus/harus di-escape dengan karakter escape\, dan konten grup penangkapan ditulis sebagai\2bukan${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 dengan aturan penulisan ulang 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 untuk mengekspos port 80 (HTTP) dan port 443 (HTTPS) secara bersamaan.
ALB tidak mendukung pembuatan listener baru secara langsung dalam Ingress. Untuk memastikan Ingress berfungsi sebagaimana mestinya, Anda harus terlebih dahulu membuat port dan protokol listener yang diperlukan dalam AlbConfig. Kemudian, Anda dapat mengaitkan listener tersebut dengan layanan dalam Ingress. Untuk informasi tentang cara membuat listener ALB, lihat Konfigurasikan listener ALB melalui AlbConfig.
Parameter | Deskripsi | Contoh YAML |
| Memungkinkan layanan mendengarkan pada port 80 dan port 443. | |
Konfigurasikan prioritas aturan pengalihan
Secara bawaan, prioritas aturan pengalihan ALB diurutkan 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 sama, nama dibandingkan karakter per karakter.
Dalam Ingress yang sama, aturan diurutkan berdasarkan urutannya dalam bidang
rule. Aturan yang dikonfigurasi lebih awal memiliki prioritas lebih tinggi.rules: - host: www.example.com http: ... - host: www.test.com http: ...
Jika Anda tidak mengubah bidang 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 melalui ALB Ingress.
Parameter | Deskripsi | Deskripsi |
| Mengaktifkan kemampuan rilis bertahap. |
|
Alokasikan traffic canary 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.
Ketika
headerdanheader-valuedalam permintaan cocok dengan nilai yang ditetapkan, traffic permintaan dialokasikan ke titik akhir layanan canary.Permintaan lain yang tidak cocok dialokasikan ke layanan canary berikutnya sesuai dengan prioritas canary.
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 canary. Permintaan lain dialokasikan ke layanan canary berdasarkan kebijakan bobot canary. Berikut adalah contoh konfigurasi.Alokasikan traffic canary berdasarkan cookie tertentu
Parameter
Nilai cookie
Contoh YAML
alb.ingress.kubernetes.io/canary-by-cookiealways: Semua traffic permintaan dialokasikan ke titik akhir layanan canary.never: Traffic permintaan tidak dialokasikan ke titik akhir layanan canary.
Rilis canary 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 canary. Jika header permintaan berisiCookie: demo=never, traffic tidak diarahkan ke layanan canary. Berikut adalah contoh konfigurasi.Alokasikan traffic berdasarkan bobot
Parameter
Deskripsi
Contoh YAML
alb.ingress.kubernetes.io/canary-weightMenetapkan persentase permintaan ke layanan yang ditentukan. Nilainya adalah 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 mengonfigurasi bobot layanan canary menjadi 50%:
Implementasikan persistensi sesi menggunakan anotasi
ALB Ingress mendukung persistensi sesi melalui anotasi berikut.
Blok kode berikut menunjukkan 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 menggunakan cookie kustom, tipe 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 adalah [1, 86400]. Anotasi ini berlaku saat | 1000 |
| Nilai cookie kustom. Anotasi ini wajib dan tidak boleh kosong saat | "" |
Tentukan algoritma penyeimbangan beban untuk kelompok server backend
ALB Ingress dapat menentukan algoritma penyeimbangan beban untuk kelompok server backend menggunakan anotasi berikut. Nilai yang mungkin dan deskripsinya ditunjukkan dalam tabel berikut.
Parameter | Nilai | Deskripsi | |
|
| Weighted round-robin. Server backend dengan bobot lebih tinggi lebih mungkin dipilih (nilai bawaan). | |
| Pemilihan berdasarkan nilai bobot yang ditetapkan untuk setiap server backend dan beban aktual (jumlah koneksi) server backend. Jika bobot sama, server dengan koneksi lebih sedikit diprioritaskan. | ||
| Penghashan konsisten IP sumber. Permintaan didistribusikan berdasarkan hash dari IP sumber klien. Permintaan dari alamat IP yang sama dialokasikan ke server backend yang sama. | ||
| Penghashan konsisten parameter URL. Gunakan anotasi |
Konfigurasi lintas domain
ALB Ingress mendukung parameter anotasi berikut untuk mengontrol perilaku lintas domain. Anda dapat menentukan situs yang diizinkan, metode permintaan, header permintaan dan respons, pembawa kredensial, serta waktu cache preflight (OPTIONS) untuk memenuhi persyaratan akses lintas domain dalam berbagai skenario keamanan dan bisnis.
Blok kode berikut menunjukkan 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: "Allowed-cross-domain-name"
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 mengatur waktu cache maksimum dalam detik untuk permintaan preflight OPTIONS di browser. Rentang nilai adalah [0, 172800]. | Nilai bawaan: |
Koneksi persisten backend
Load balancing tradisional menggunakan koneksi singkat untuk mengakses kelompok server backend. Setiap permintaan memerlukan koneksi TCP yang dibuat dan dihentikan. Hal ini menjadikan konektivitas jaringan sebagai bottleneck untuk sistem berkinerja-tinggi. Dengan dukungan koneksi persisten backend dari load balancer, konsumsi sumber daya untuk menangani lapisan koneksi sangat berkurang, yang secara signifikan meningkatkan kinerja pemrosesan. Blok kode berikut menunjukkan contoh konfigurasi:
Parameter | Deskripsi | Contoh YAML |
| Mengaktifkan koneksi persisten backend. Ini mengurangi pembuatan dan penghentian koneksi TCP untuk setiap permintaan, menurunkan konsumsi sumber daya, dan meningkatkan kemampuan pemrosesan sistem berkinerja-tinggi. | |
Dukungan untuk memasang IPv6 ke kelompok server backend
Setelah Anda mengaktifkan pemasangan IPv6 untuk kelompok server, untuk memasang Pod IPv4 dan IPv6 ke kelompok server tersebut, Anda harus memastikan bahwa kluster telah mengaktifkan kemampuan dual-stack. Untuk informasi selengkapnya, lihat Buat Kluster ACK yang dikelola.
Batasan berikut berlaku saat Anda mengaktifkan pemasangan IPv6:
Jika VPC tempat kelompok server berada tidak memiliki IPv6 yang diaktifkan, Anda tidak dapat mengaktifkan pemasangan IPv6 untuk kelompok server tersebut.
Saat Anda memasang kelompok server tipe IP atau tipe Function Compute menggunakan aksi pengalihan kustom, pemasangan IPv6 tidak didukung.
Untuk Ingress yang dikaitkan dengan instans ALB tipe IPv4, pemasangan IPv6 untuk kelompok server tidak didukung.
Service dan ALB Ingress harus dikonfigurasi sesuai persyaratan untuk dual-stack. Setelah Anda membuat instans ALB dual-stack, kelompok server dapat memasang server backend IPv4 dan IPv6.
Objek konfigurasi | Parameter konfigurasi | Nilai | Deskripsi | Contoh YAML |
Service |
|
| Menentukan jenis alamat IP yang tersedia untuk Service. | |
|
| Menetapkan kebijakan IP untuk Service, mendukung dual-stack. | ||
ALB Ingress |
|
| Mengaktifkan pemasangan IPv6 untuk kelompok server. | |
Dukungan pembatasan kecepatan QPS
ALB mendukung pembatasan kecepatan Queries Per Second (QPS) untuk aturan pengalihan. Anda dapat mengonfigurasi pembatasan kecepatan QPS dengan mengatur anotasi berikut.
Anotasi | Deskripsi | Contoh YAML |
| Menetapkan batas pembatasan kecepatan QPS untuk aturan pengalihan. Rentang nilai adalah [1, 1000000]. | |
Backend mulai lambat
Setelah Pod baru ditambahkan ke backend Service, jika ALB Ingress langsung mengalokasikan traffic ke Pod baru tersebut, hal ini dapat menyebabkan tekanan CPU atau memori tinggi sementara, yang mengakibatkan gangguan akses. Dengan menggunakan mulai lambat, ALB Ingress dapat secara bertahap mentransfer traffic ke Pod baru tersebut, sehingga mengurangi dampak lonjakan traffic mendadak. Blok kode berikut menunjukkan contoh konfigurasi:
Parameter | Deskripsi | Contoh YAML |
| Menentukan apakah fitur mulai lambat diaktifkan. Secara bawaan dinonaktifkan.
| |
| Semakin lama waktu bagi traffic untuk meningkat secara bertahap setelah mulai lambat selesai, semakin lambat laju peningkatan traffic. Parameter ini dalam satuan detik (s). Rentang nilai adalah [30, 900], dan nilai bawaan adalah 30 detik. |
Connection draining
Saat sebuah Pod memasuki status Terminating, ALB Ingress menghapusnya dari kelompok server backend. Koneksi yang sudah terbentuk antara ALB dan Pod tersebut tidak langsung terputus. Akses klien terus meneruskan permintaan ke server backend tersebut. Hal ini dapat menyebabkan bisnis dalam Pod tidak dapat offline dalam waktu lama atau menyebabkan error permintaan. Untuk menghindari masalah ini, Anda dapat menggunakan fitur pengurasan koneksi ALB. Saat sebuah Pod dihapus atau pemeriksaan kesehatan abnormal, ALB Ingress mempertahankan transmisi normal untuk periode waktu tertentu lalu secara aktif memutus koneksi setelah waktu interupsi tercapai. Hal ini memastikan proses offline bisnis yang lancar. Untuk informasi selengkapnya, lihat Capai offline bisnis yang lancar melalui pengurasan koneksi ALB.
Sebelum waktu pengurasan koneksi berakhir, ALB Ingress tidak dapat menjamin bahwa Pod berada dalam status berjalan. Anda dapat mengonfigurasi spec.terminationGracePeriodSeconds untuk Pod 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). Rentang nilai adalah [0, 900], dan nilai bawaan adalah 300 detik. |
Nonaktifkan penyeimbangan beban cross-zone
Secara bawaan, ALB mengaktifkan penyeimbangan beban cross-zone. Artinya, traffic didistribusikan secara merata ke layanan backend di berbagai zona dalam wilayah yang sama. Jika Anda menonaktifkan penyeimbangan beban cross-zone untuk kelompok server ALB, traffic hanya didistribusikan di antara layanan backend dalam zona yang sama dalam wilayah tersebut.
Untuk menonaktifkan penyeimbangan beban cross-zone, Anda harus memastikan bahwa ALB memiliki layanan backend yang tersedia di setiap zona dan server tersebut memiliki sumber daya yang cukup. Untuk menghindari dampak pada bisnis Anda, lakukan operasi ini dengan hati-hati.
Anda dapat merujuk pada contoh berikut untuk menonaktifkan penyeimbangan beban cross-zone:
Parameter | Deskripsi | Contoh YAML |
| Menentukan apakah akan menonaktifkan pengalihan cross-zone. Secara bawaan diaktifkan.
| |