Dalam kluster ACK, ALB Ingress menyediakan load balancing lapisan 7 untuk layanan. Topik ini menjelaskan cara menggunakan ALB Ingress untuk mengalihkan permintaan dari nama domain atau jalur URL yang berbeda ke grup server backend yang berbeda, mengarahkan trafik HTTP ke HTTPS, serta menerapkan rilis bertahap.
Mengalihkan permintaan berdasarkan nama domain
Anda dapat membuat Ingress sederhana untuk mengalihkan permintaan berdasarkan nama domain tertentu atau nama domain kosong. Contoh berikut menunjukkan cara melakukannya.
Mengalihkan permintaan berdasarkan nama domain normal
Contoh YAML berikut mengonfigurasi jalur routing ke /hello. Permintaan ke demo.domain.ingress.top/hello dialihkan ke layanan backend.
Anda dapat menerapkan templat berikut untuk membuat Service, deployment, dan Ingress. Ingress mengalihkan permintaan ke Service berdasarkan nama domain.
Jalankan perintah
kubectl get inguntuk mendapatkan alamat instans ALB. GantiADDRESSdalam perintah berikut dengan alamat instans ALB, lalu jalankan perintah tersebut.curl -H "host: demo.domain.ingress.top" <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Mengalihkan permintaan berdasarkan nama domain kosong
Contoh YAML berikut mengonfigurasi nama domain kosong dan menetapkan jalur routing ke /hello. Permintaan ke <ADDRESS>/hello dialihkan ke layanan backend.
Anda dapat menerapkan templat berikut untuk membuat Ingress.
Jalankan perintah
kubectl get inguntuk mendapatkan alamat instans ALB. GantiADDRESSdalam perintah berikut dengan alamat instans ALB, lalu jalankan perintah tersebut.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Mengalihkan permintaan berdasarkan jalur URL
ALB Ingress dapat mengalihkan permintaan berdasarkan jalur URL. Anda dapat menggunakan bidang pathType untuk mengonfigurasi kebijakan pencocokan URL yang berbeda. Bidang pathType mendukung tiga metode pencocokan berikut.
Pencocokan eksak (
Exact): Opsi ini melakukan pencocokan eksak terhadap jalur URL permintaan.Bawaan (
ImplementationSpecific): Menggunakan logika yang ditentukan oleh controller Ingress. Controller ALB Ingress memperlakukan ini sebagai pencocokan eksak (Exact). Jika jalur tidak ditentukan, ALB Ingress menggunakan/sebagai jalur bawaan.Pencocokan awalan (
Prefix): Mencocokkan awalan dari jalur URL permintaan.
Jika Anda menetapkan
pathTypekeExactatauPrefix, Anda harus menentukan jalur mutlak non-kosong untuk path tersebut. Jika tidak, resource Ingress gagal divalidasi dan tidak dapat dibuat.Kebijakan pencocokan URL dapat saling bertentangan. Dalam kasus ini, aturan pengalihan diurutkan berdasarkan prioritas sebelum permintaan dialihkan. Untuk informasi lebih lanjut, lihat Mengonfigurasi prioritas aturan pengalihan.
Jalur sederhana (/、/foo、/foo/)
Metode pencocokan
Jalur aturan (aturan routing)
Jalur permintaan (akses pengguna)
Cocok dengan aturan ini?
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/)
Metode pencocokan
Jalur aturan (aturan routing)
Jalur permintaan (akses pengguna)
Cocok dengan aturan ini?
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, mencocokkan garis miring di akhir pada jalur permintaan.
/aaa/bbb/ccc
Ya, mencocokkan subjalur dari jalur permintaan.
Mengonfigurasi dua jalur aturan secara bersamaan
Metode pencocokan
Jalur aturan (aturan routing)
Jalur permintaan (akses pengguna)
Cocok dengan aturan ini?
Pencocokan awalan (Prefix)
/
/aaa
/aaa/ccc
Ya, jalur permintaan mencocokkan awalan
/dalam jalur aturan./aaa
/
/aaa/ccc
Ya, jalur permintaan mencocokkan awalan
/aaadalam jalur aturan./ccc
Ya, jalur permintaan mencocokkan awalan
/dalam jalur aturan./aaa
/bbb
/ccc
Tidak, awalan tidak cocok.
Contoh berikut menunjukkan ketiga metode pencocokan tersebut:
Pencocokan awalan (Prefix)
Jalur URL menggunakan pencocokan awalan, yang dipisahkan oleh /. Pencocokan bersifat case-sensitive dan membandingkan setiap elemen dalam jalur secara hierarkis.
Dalam contoh YAML berikut, aturan routing dikonfigurasi sebagai /. Semua jalur yang dimulai dengan /, seperti /hello, akan dicocokkan dan dapat diakses.
Anda dapat menerapkan templat berikut untuk membuat Ingress.
Jalankan perintah
kubectl get inguntuk mendapatkan alamat instans ALB. GantiADDRESSdalam perintah berikut dengan alamat instans ALB, lalu jalankan perintah tersebut.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Pencocokan eksak (Exact) atau bawaan (ImplementationSpecific)
Dalam contoh YAML berikut, aturan routing dikonfigurasi sebagai /hello. Hanya jalur /hello yang dicocokkan dan dapat diakses.
Anda dapat menerapkan templat berikut untuk membuat Ingress.
Jalankan perintah
kubectl get inguntuk mendapatkan alamat instans ALB. GantiADDRESSdalam perintah berikut dengan alamat instans ALB, lalu jalankan perintah tersebut.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Mengonfigurasi pemeriksaan kesehatan
ALB Ingress mendukung konfigurasi pemeriksaan kesehatan yang menggunakan anotasi berikut.
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 pemeriksaan kesehatan. |
|
| Protokol yang digunakan untuk pemeriksaan kesehatan.
|
|
| Versi protokol HTTP. Berlaku hanya ketika
|
|
| Metode pemeriksaan kesehatan.
Penting Ketika |
|
| Kode status pemeriksaan kesehatan. Server backend dianggap sehat hanya jika 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 jika permintaan probe berhasil dan mengembalikan kode status yang ditentukan. Jika parameter Nilai yang valid bergantung pada nilai
|
|
| Periode timeout pemeriksaan kesehatan, dalam detik. Nilai yang valid: [1, 300]. |
|
| Interval pemeriksaan kesehatan, dalam detik. Nilai yang valid: [1, 50]. |
|
| Jumlah pemeriksaan kesehatan berturut-turut yang berhasil yang diperlukan untuk menandai server backend sebagai sehat. Nilai yang valid: [2, 10]. |
|
| Jumlah pemeriksaan kesehatan berturut-turut yang gagal yang diperlukan untuk menandai server backend sebagai tidak sehat. Nilai yang valid: [2, 10]. |
|
| Port yang digunakan untuk pemeriksaan kesehatan. |
Catatan
|
Mengarahkan trafik HTTP ke HTTPS
ALB Ingress dapat mengarahkan permintaan HTTP ke Port HTTPS 443 menggunakan anotasi berikut.
Anotasi ini hanya berlaku untuk aturan pengalihan HTTP yang dikonfigurasi pada port pendengar 80.
Anotasi ini hanya berfungsi dengan aksi pengalihan kustom, seperti
RemoveHeaderdanInsertHeader, serta anotasi terkait CORSCors.Untuk menggunakan anotasi ini, Anda harus memastikan bahwa pendengar HTTPS pada port 443 dikonfigurasi dalam AlbConfig. Untuk informasi lebih lanjut, lihat Mengonfigurasi pendengar ALB menggunakan AlbConfig.
Parameter | Deskripsi | Contoh anotasi |
| Mengarahkan permintaan HTTP ke Port HTTPS 443. | |
Dukungan protokol backend HTTPS dan gRPC
ALB mendukung HTTPS dan gRPC sebagai protokol backend. Anda dapat menambahkan anotasi berikut ke Ingress Anda.
Setelah Ingress dibuat, Anda tidak dapat mengubah protokol backend. Untuk mengubah protokol, Anda harus menghapus lalu membuat ulang Ingress.
Parameter | Deskripsi | Contoh YAML |
|
| |
Mengonfigurasi ekspresi reguler
Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/use-regex: "true" untuk mengaktifkan mode regex. Kemudian, Anda dapat mengonfigurasi ekspresi reguler yang sesuai dalam kondisi atau aksi pengalihan kustom.
Anotasi ini hanya berlaku untuk aturan jalur yang memiliki pathType diatur ke
Prefix.Jika anotasi ini ada, terlepas dari apakah nilainya
trueataufalse, pencocokan regex diaktifkan. Pencocokan regex dinonaktifkan hanya jika Anda menghapus anotasi ini.Jika anotasi ini tidak dikonfigurasi dan jalur berisi karakter khusus, seperti
“%#;!()[]^,”\", resource Ingress tidak dapat dibuat.
Parameter | Deskripsi | |
| Mengaktifkan ekspresi reguler. | |
| Mengonfigurasi kondisi pengalihan kustom. Untuk informasi lebih lanjut, lihat Menyesuaikan aturan pengalihan ALB Ingress.
|
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 regex case-insensitive. |
Jalur | Dimulai dengan |
| /API | Ya | Jalur mendukung pencocokan regex case-insensitive. |
Dimulai dengan |
| /Api | Tidak | Jalur mendukung pencocokan regex case-sensitive. |
Mengonfigurasi pencocokan awalan regex
Secara bawaan, pencocokan regex menggunakan "pencocokan berisi". Artinya, aturan dicocokkan jika permintaan berisi konten yang sesuai dengan ekspresi reguler. Untuk mencocokkan jalur yang dimulai dengan konten tertentu, tambahkan ^ di awal ekspresi reguler. Ini menunjukkan bahwa hanya jalur yang dimulai dengan konten yang ditentukan yang dicocokkan. Misalnya, ^/api hanya mencocokkan jalur permintaan yang dimulai dengan /api.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-example
annotations:
alb.ingress.kubernetes.io/use-regex: "true" ## Mengaktifkan pencocokan regex.
alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>: | ## Ganti <YOUR-SVC-NAME> dengan nama layanan aktual. Harus sesuai dengan backend.service.name di bawah ini.
[
{
"type": "Path",
"pathConfig": {
"values": [
"~*^/pathvalue1", # ~* atau ~ menunjukkan pencocokan regex; ^ menunjukkan "dimulai dengan /pathvalue1".
"/pathvalue2" # Pencocokan awalan atau eksak biasa. Tidak perlu ~* atau ~.
]
}
}
]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test-path-for-alb
pathType: Prefix
backend:
service:
name: <YOUR-SVC-NAME> # Ganti dengan nama layanan aktual. Harus sesuai dengan anotasi.
port:
number: 88Mengonfigurasi penulisan ulang
ALB Ingress mendukung fitur rewrite. Setelah ALB Ingress menerima permintaan klien, fitur ini memodifikasi jalur permintaan sebelum mengirim permintaan ke Service backend. Fitur rewrite diimplementasikan menggunakan dua anotasi berikut:
alb.ingress.kubernetes.io/rewrite-target: /<path>/${number}: Mengaktifkan rewrite dan menentukan jalur yang ditulis ulang.PentingGunakan format
${number}untuk merepresentasikan variabel yang ditangkap dari jalur asli menggunakan ekspresi reguler. Anda dapat mengonfigurasi${1},${2}, atau${3}. Anda dapat menangkap hingga tiga variabel dari jalur asli.Anda harus mengatur
pathTypekePrefixdalam Ingress.
alb.ingress.kubernetes.io/use-regex: true: Menggunakan ekspresi reguler dalam jalur. Ini diaktifkan secara bawaan ketikarewrite-targetdikonfigurasi.PentingJika anotasi ini ada, terlepas dari apakah nilainya
trueataufalse, pencocokan regex diaktifkan. Pencocokan regex dinonaktifkan hanya jika Anda menghapus anotasi ini.Jika anotasi ini tidak dikonfigurasi dan jalur berisi karakter khusus, seperti
“%#;!()[]^,”\", resource Ingress tidak dapat dibuat.
Contoh konfigurasi
Contoh 1: Menghapus awalan
Dalam contoh YAML berikut, path: /something(/|$)(.*) membagi jalur permintaan klien menjadi tiga bagian menggunakan ekspresi reguler:
/something: Mencocokkan awalan yang ingin Anda hapus.(/|$): Grup penangkapan pertama. Grup ini mencocokkan/somethingyang diikuti oleh/atau$(akhir jalur).(.*): Grup penangkapan kedua. Grup ini mencocokkan semua konten setelah/something/. Anda dapat menggunakan${2}dalam jalur yang ditulis ulang.
Jalur rewrite 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 | Cocok dengan regex Jalur? | Jalur yang ditulis ulang |
| Cocok. Grup penangkapan kedua kosong. |
|
| Cocok. Grup penangkapan kedua kosong. |
|
| Cocok. 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 regex.
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080Contoh 2: Menangkap dan mengatur ulang beberapa bagian
Contoh berikut menangkap beberapa bagian dari jalur /items/(.*)/(.*)/(.*) dan mengaturnya ulang. Hal ini mengubah format URL menjadi bentuk seperti POST tanpa sepengetahuan pengguna. Jalur rewrite adalah / (awalan jalur standar) + ${2} (konten grup penangkapan kedua) + ?code= + ${3} (konten grup penangkapan ketiga). Tabel berikut menjelaskan efek penulisan ulang jalur.
Contoh ini memerlukan tepat empat segmen dalam jalur. Anda hanya dapat menggunakan metode ini jika klien menggunakan format jalur tetap.
Jalur klien asli | Cocok dengan regex Jalur? | Jalur yang ditulis ulang |
| Cocok. Grup penangkapan kedua adalah |
|
| Cocok. 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 regex.
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /items/(.*)/(.*)/(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080Contoh 3: Menulis ulang beberapa jalur ke satu jalur
Contoh berikut menggunakan pencocokan regex untuk beberapa jalur, /app-a(/|$)(.*) dan /app-b(/|$)(.*), dan menulis ulangnya ke satu jalur. Jalur rewrite adalah /app-c/ + ${2} (konten grup penangkapan kedua). Tabel berikut menjelaskan efek penulisan ulang jalur.
Jalur klien asli | Cocok dengan regex Jalur? | Jalur yang ditulis ulang |
| Cocok. Grup penangkapan kedua adalah |
|
| Cocok. 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 regex.
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: 9080Contoh 4: Menulis ulang nama domain
Anotasi alb.ingress.kubernetes.io/rewrite-target hanya mendukung perubahan jalur. Untuk mengubah bagian lain dari URL, seperti nama domain atau parameter, Anda dapat menggunakan aturan pengalihan kustom.
Memverifikasi pencocokan aturan penulisan ulang
Anda dapat menggunakan perintah sed untuk menguji terlebih dahulu apakah jalur klien tertentu cocok dengan ekspresi reguler yang dikonfigurasi dalam path dan untuk melihat jalur yang ditulis ulang.
Ambil jalur penangkapan /items/(.*)/(.*)/(.*) dan aturan penulisan ulang /${2}?code=${3} dari Contoh 2: Menangkap dan mengatur 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-jalur tersebut cocok dan lihat jalur yang ditulis ulang:
Dalam perintah berikut, ekspresi reguler jalur (
/items/(.*)/(.*)/(.*)) dan jalur yang ditulis ulang (/${2}?code=${3}) dari contoh digunakan. Dalam perintah `sed`, karakter khusus/di-escape dengan\, dan notasi grup penangkapan diubah dari${2}menjadi\2.sed -E 's#\/items\/(.*)\/(.*)\/(.*)#Matched: [&] ---> Rewritten: [/\2?code=\3]#' path2.txtOutput yang diharapkan: 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
Mengonfigurasi port pendengar kustom
ALB Ingress mendukung port pendengar kustom yang menggunakan anotasi. Hal ini memungkinkan layanan untuk mengekspos port 80 (HTTP) dan port 443 (HTTPS) secara bersamaan.
ALB tidak mendukung pembuatan pendengar baru secara langsung dalam Ingress. Untuk memastikan Ingress berfungsi sebagaimana mestinya, Anda harus terlebih dahulu membuat port dan protokol pendengar yang diperlukan dalam AlbConfig. Kemudian, Anda dapat mengaitkan pendengar ini dengan layanan dalam Ingress. Untuk informasi lebih lanjut tentang cara membuat pendengar ALB, lihat Mengonfigurasi pendengar ALB menggunakan AlbConfig.
Parameter | Deskripsi | Contoh YAML |
| Mengaktifkan layanan untuk mendengarkan pada port 80 dan port 443. | |
Mengonfigurasi prioritas aturan pengalihan
Secara bawaan, prioritas aturan pengalihan ALB diurutkan dalam urutan berikut:
Resource 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 ingin mengubah bidang namespace/name dari Ingress, Anda dapat mengonfigurasi anotasi Ingress berikut untuk menentukan prioritas aturan pengalihan ALB:
Parameter | Deskripsi | Nilai yang valid | Contoh YAML |
| Menentukan prioritas aturan pengalihan ALB. Nilai yang lebih kecil menunjukkan prioritas yang lebih tinggi. Prioritas aturan harus unik dalam pendengar yang sama. | [1,1000] Nilai bawaan: 10 | |
Menerapkan rilis bertahap melalui anotasi
ALB mendukung routing kompleks dan rilis bertahap berdasarkan header, cookie, dan bobot. Anda dapat mengonfigurasi anotasi berikut untuk secara fleksibel menerapkan berbagai strategi rilis bertahap. Untuk informasi lebih lanjut tentang praktik terbaik rilis bertahap, lihat Menerapkan rilis bertahap menggunakan ALB Ingress.
Parameter | Deskripsi | Catatan |
| Mengaktifkan rilis bertahap. |
|
Mengalokasikan trafik untuk rilis bertahap berdasarkan header tertentu
Parameter
Deskripsi
Contoh YAML
alb.ingress.kubernetes.io/canary-by-headerAturan ini memungkinkan Anda menyesuaikan header permintaan dan nilainya. Anda harus mengonfigurasi kedua anotasi tersebut.
Ketika
headerdanheader-valuedalam permintaan cocok dengan nilai yang dikonfigurasi, trafik permintaan diarahkan ke titik akhir layanan bertahap.Permintaan lain yang tidak cocok dialokasikan ke layanan bertahap berikutnya berdasarkan prioritas 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, trafik diarahkan ke layanan bertahap. Permintaan lain dialokasikan ke layanan bertahap yang sesuai berdasarkan strategi berbasis bobot. Konfigurasi contoh berikut digunakan:Mengalokasikan trafik untuk rilis bertahap berdasarkan cookie tertentu
Parameter
Nilai cookie
Contoh YAML
alb.ingress.kubernetes.io/canary-by-cookiealways: Semua trafik permintaan diarahkan ke titik akhir layanan bertahap.never: Tidak ada trafik permintaan yang diarahkan ke titik akhir layanan bertahap.
Rilis bertahap berbasis cookie hanya mendukung
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, trafik diarahkan ke layanan bertahap. Jika header permintaan berisiCookie: demo=never, trafik tidak diarahkan ke layanan bertahap. Konfigurasi contoh berikut digunakan:Mengalokasikan trafik berdasarkan bobot
Parameter
Deskripsi
Contoh YAML
alb.ingress.kubernetes.io/canary-weightMenetapkan persentase permintaan yang diarahkan ke layanan tertentu. Nilai yang valid: 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-weightAnda dapat mengonfigurasi bobot layanan bertahap menjadi 50%. Konfigurasi contoh berikut digunakan:
Menerapkan persistensi sesi melalui anotasi
ALB Ingress mendukung persistensi sesi yang menggunakan anotasi berikut.
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: "Server" # Ketika 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 pemrosesan cookie.
Catatan Parameter ini hanya berlaku ketika |
|
| Periode timeout cookie, dalam detik. Nilai yang valid: 1–86400. Anotasi ini hanya berlaku ketika | 1000 |
| Nilai cookie kustom. Anotasi ini wajib dan tidak boleh kosong ketika | "" |
Menentukan algoritma penyeimbangan beban untuk grup server
ALB Ingress mendukung penentuan algoritma penyeimbangan beban untuk grup server menggunakan anotasi berikut. Tabel berikut mencantumkan nilai yang valid dan deskripsinya.
Parameter | Nilai | Deskripsi | |
|
| Weighted round-robin. Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan (nilai bawaan). | |
| Mendistribusikan permintaan berdasarkan bobot dan beban saat ini (jumlah koneksi) setiap server backend. Jika bobot sama, server dengan koneksi lebih sedikit lebih disukai. | ||
| Hash konsisten IP sumber. Permintaan dari alamat IP klien yang sama secara konsisten diarahkan ke server backend yang sama. | ||
| Hash konsisten parameter URL. Gunakan anotasi |
Konfigurasi lintas-origin
ALB Ingress mendukung pengendalian perilaku lintas-origin menggunakan parameter anotasi berikut. Anda dapat menentukan situs yang diizinkan, metode permintaan, header permintaan dan respons, transmisi kredensial, serta durasi cache preflight (OPTIONS) untuk memenuhi persyaratan akses lintas-origin yang berbeda dalam skenario keamanan dan bisnis.
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-origin yang diizinkan"
spec:
... ...Parameter | Deskripsi | Nilai bawaan |
| Mengaktifkan konfigurasi lintas-origin CORS. | Nilai bawaan: |
| Situs yang diizinkan mengakses sumber daya server melalui browser. Pisahkan situs dengan koma (,). Setiap nilai harus dimulai dengan http:// atau https:// diikuti oleh nama domain yang valid atau nama domain wildcard tingkat atas. Alamat IP tidak didukung. |
|
| Metode lintas-origin yang diizinkan. Tidak case-sensitive. Pisahkan metode dengan koma (,). |
|
| Header permintaan yang diizinkan untuk propagasi lintas-origin. Dapat diatur ke |
|
| Daftar header yang diizinkan untuk diekspos. Dapat diatur ke |
|
| Menentukan apakah transmisi kredensial diizinkan selama akses lintas-origin. |
|
| Untuk permintaan tidak sederhana, menetapkan durasi cache maksimum (dalam detik) untuk permintaan preflight OPTIONS di browser. Nilai yang valid: [0, 172800]. | Nilai bawaan: |
Koneksi persisten backend
Load balancer tradisional menggunakan koneksi singkat untuk mengakses grup server backend. Setiap permintaan memerlukan koneksi TCP yang dibuat lalu ditutup. Hal ini menjadikan koneksi jaringan sebagai bottleneck untuk sistem berkinerja tinggi. Koneksi persisten backend secara signifikan mengurangi konsumsi sumber daya pada tingkat koneksi dan sangat meningkatkan kinerja pemrosesan. Konfigurasi contoh berikut digunakan:
Parameter | Deskripsi | Contoh YAML |
| Mengaktifkan koneksi persisten backend. Hal ini mengurangi pembuatan dan penutupan koneksi TCP untuk setiap permintaan, menurunkan konsumsi sumber daya dan meningkatkan kinerja untuk sistem berkinerja-tinggi. | |
Dukungan lampiran IPv6 untuk grup server
Setelah Anda mengaktifkan lampiran IPv6 untuk grup server, Anda harus memastikan bahwa fitur dual-stack diaktifkan untuk kluster agar dapat melampirkan pod IPv4 dan IPv6 ke grup server. Untuk informasi lebih lanjut, lihat Membuat kluster ACK yang dikelola.
Batasan berikut berlaku saat Anda mengaktifkan lampiran IPv6:
Jika IPv6 tidak diaktifkan untuk VPC tempat grup server berada, Anda tidak dapat mengaktifkan lampiran IPv6 untuk grup server tersebut.
Lampiran IPv6 tidak didukung saat Anda melampirkan grup server berbasis IP atau berbasis Function Compute menggunakan aksi pengalihan kustom.
Ingress yang dikaitkan dengan instans ALB IPv4 tidak mendukung lampiran IPv6 untuk grup server.
Anda harus mengonfigurasi baik Service maupun ALB Ingress berdasarkan persyaratan dual-stack. Setelah Anda membuat instans ALB dual-stack, grup server dapat melampirkan 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 guna mendukung dual-stack. | ||
ALB Ingress |
|
| Mengaktifkan lampiran IPv6 untuk grup server. | |
Dukungan pembatasan laju QPS
ALB mendukung pembatasan laju queries-per-second (QPS) untuk aturan pengalihan. Anda dapat mengonfigurasi anotasi berikut untuk menerapkan pembatasan laju QPS.
Anotasi | Deskripsi | Contoh YAML |
| Menetapkan batas laju QPS untuk aturan pengalihan. Nilai yang valid: [1,1000000]. | |
Mulai lambat backend
Ketika pod baru ditambahkan ke backend Service, ALB Ingress segera mengarahkan trafik ke pod baru tersebut. Hal ini dapat menyebabkan lonjakan tiba-tiba pada penggunaan CPU atau memori dan mengakibatkan kesalahan akses. Fitur mulai lambat memungkinkan ALB Ingress secara bertahap mengalihkan trafik ke pod baru. Hal ini mengurangi dampak lonjakan trafik tiba-tiba. Konfigurasi contoh berikut digunakan:
Parameter | Deskripsi | Contoh YAML |
| Menentukan apakah mulai lambat diaktifkan. Secara bawaan dinonaktifkan.
| |
| Semakin lama durasi setelah mulai lambat selesai, semakin lambat peningkatan trafik. Satuan: detik. Nilai yang valid: [30, 900]. Nilai bawaan: 30 detik. |
Pengurasan koneksi
Ketika pod memasuki status Terminating, ALB Ingress menghapus pod tersebut dari grup server backend. Namun, koneksi yang sudah ada antara ALB dan pod tidak segera diputus. Klien mungkin terus mengirim permintaan ke server backend ini. Hal ini dapat menyebabkan pod tetap online dalam waktu lama atau mengakibatkan kesalahan permintaan. Untuk menghindari masalah ini, Anda dapat menggunakan fitur pengurasan koneksi ALB. Ketika pod dihapus atau gagal dalam pemeriksaan kesehatan, ALB Ingress mempertahankan transmisi normal selama durasi tertentu lalu secara aktif menutup koneksi untuk memastikan shutdown layanan yang lancar. Untuk informasi lebih lanjut, lihat Mencapai shutdown layanan lancar melalui pengurasan koneksi ALB.
ALB Ingress tidak dapat menjamin bahwa pod tetap berjalan sebelum durasi pengurasan koneksi berakhir. Anda dapat mengonfigurasi spec.terminationGracePeriodSeconds untuk pod atau menggunakan panggilan balik preStop untuk mengontrol ketersediaan pod selama status Terminating.
Parameter | Deskripsi | Contoh YAML |
| Menentukan apakah pengurasan koneksi diaktifkan. Secara bawaan dinonaktifkan.
| |
| Periode timeout terminasi yang lancar, dalam detik. Nilai yang valid: [0, 900]. Nilai bawaan: 300 detik. |
Menonaktifkan cross-zone (AZ)
Secara bawaan, ALB mengaktifkan load balancing cross-zone (AZ). Fitur ini mendistribusikan trafik secara merata di seluruh layanan backend di zona yang berbeda dalam wilayah yang sama. Jika Anda menonaktifkan load balancing cross-zone untuk grup server ALB, trafik hanya didistribusikan di antara layanan backend dalam zona yang sama dalam wilayah yang sama.
Jika Anda menonaktifkan load balancing cross-zone, Anda harus memastikan bahwa ALB memiliki layanan backend yang tersedia yang dikonfigurasi di setiap zona dan server tersebut memiliki sumber daya yang cukup. Lakukan operasi ini dengan hati-hati untuk menghindari gangguan layanan.
Anda dapat melakukan langkah-langkah berikut untuk menonaktifkan load balancing cross-zone:
Parameter | Deskripsi | Contoh YAML |
| Menentukan apakah pengalihan cross-zone dinonaktifkan. Secara bawaan diaktifkan.
| |