Konfigurasikan anotasi ALB Ingress untuk pengalihan rute, pengalihan HTTPS, pemeriksaan kesehatan, dan rilis canary.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Membuat kluster ACK serverless dengan Virtual Private Cloud (VPC) dan NAT Gateway untuk akses internet.
-
kubectl terhubung ke kluster.
-
Sebuah AlbConfig dibuat.
Referensi cepat anotasi
Fitur ALB Ingress dikonfigurasi melalui anotasi pada bidang metadata.annotations. Tabel berikut mencantumkan anotasi yang didukung berdasarkan kategori.
| Kategori | Anotasi | Deskripsi |
|---|---|---|
| Pemeriksaan kesehatan | alb.ingress.kubernetes.io/healthcheck-enabled |
Aktifkan atau nonaktifkan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/healthcheck-path |
Jalur pemeriksaan kesehatan | |
alb.ingress.kubernetes.io/healthcheck-protocol |
Protokol: HTTP, HTTPS, TCP, GRPC |
|
alb.ingress.kubernetes.io/healthcheck-httpversion |
Versi HTTP: HTTP1.0, HTTP1.1 |
|
alb.ingress.kubernetes.io/healthcheck-method |
Metode: HEAD, POST, GET |
|
alb.ingress.kubernetes.io/healthcheck-code |
Kode status yang diharapkan (mengambil prioritas lebih tinggi daripada healthcheck-httpcode) |
|
alb.ingress.kubernetes.io/healthcheck-httpcode |
Kode status HTTP yang diharapkan (untuk kluster sebelum versi 1.19) | |
alb.ingress.kubernetes.io/healthcheck-timeout-seconds |
Timeout dalam detik (1–300) | |
alb.ingress.kubernetes.io/healthcheck-interval-seconds |
Interval pemeriksaan dalam detik (1–50) | |
alb.ingress.kubernetes.io/healthy-threshold-count |
Jumlah keberhasilan berturut-turut untuk menandai sebagai sehat (2–10) | |
alb.ingress.kubernetes.io/unhealthy-threshold-count |
Jumlah kegagalan berturut-turut untuk menandai sebagai tidak sehat (2–10) | |
alb.ingress.kubernetes.io/healthcheck-connect-port |
Port untuk pemeriksaan kesehatan (0 = port backend) | |
| TLS / HTTPS | alb.ingress.kubernetes.io/ssl-redirect |
Alihkan Port HTTP 80 ke Port HTTPS 443 |
| Protokol backend | alb.ingress.kubernetes.io/backend-protocol |
Protokol backend: https, grpc |
| Pencocokan jalur | alb.ingress.kubernetes.io/use-regex |
Aktifkan ekspresi reguler dalam aturan jalur |
| Penulisan ulang | alb.ingress.kubernetes.io/rewrite-target |
Tulis ulang jalur permintaan sebelum dialihkan |
| Port pendengar | alb.ingress.kubernetes.io/listen-ports |
Port pendengar kustom, contoh: [{"HTTP": 80},{"HTTPS": 443}] |
| Prioritas pengalihan | alb.ingress.kubernetes.io/order |
Prioritas aturan pengalihan (1–1000; angka lebih kecil = prioritas lebih tinggi) |
| Canary Release | alb.ingress.kubernetes.io/canary |
Aktifkan perutean canary |
alb.ingress.kubernetes.io/canary-by-header |
Rute berdasarkan nama header permintaan | |
alb.ingress.kubernetes.io/canary-by-header-value |
Rute berdasarkan nilai header yang tepat | |
alb.ingress.kubernetes.io/canary-by-cookie |
Rute berdasarkan nama cookie (always atau never) |
|
alb.ingress.kubernetes.io/canary-weight |
Persentase trafik yang dialihkan ke canary (0–100) | |
| Persistensi sesi | alb.ingress.kubernetes.io/sticky-session |
Aktifkan persistensi sesi |
alb.ingress.kubernetes.io/sticky-session-type |
Mode cookie: Insert atau Server |
|
alb.ingress.kubernetes.io/cookie-timeout |
Timeout cookie dalam detik (1–86400) | |
alb.ingress.kubernetes.io/cookie |
Nama cookie kustom (wajib saat tipe adalah Server) |
|
| Algoritma penyeimbangan beban | alb.ingress.kubernetes.io/backend-scheduler |
Algoritma: wrr, wlc, sch, uch |
alb.ingress.kubernetes.io/backend-scheduler-uch-value |
Nama parameter URL untuk penghashan uch |
|
| CORS | alb.ingress.kubernetes.io/enable-cors |
Aktifkan Berbagi Sumber Daya Lintas Asal (CORS) |
alb.ingress.kubernetes.io/cors-allow-origin |
Asal yang diizinkan | |
alb.ingress.kubernetes.io/cors-allow-methods |
Metode HTTP yang diizinkan | |
alb.ingress.kubernetes.io/cors-allow-headers |
Header permintaan yang diizinkan | |
alb.ingress.kubernetes.io/cors-expose-headers |
Header yang diekspos ke browser | |
alb.ingress.kubernetes.io/cors-allow-credentials |
Apakah kredensial diizinkan | |
alb.ingress.kubernetes.io/cors-max-age |
Durasi cache preflight dalam detik (−1–172800) | |
| Koneksi backend | alb.ingress.kubernetes.io/backend-keepalive |
Aktifkan koneksi backend persisten |
| Pembatasan laju | alb.ingress.kubernetes.io/traffic-limit-qps |
Batas QPS per aturan pengalihan (1–100.000) |
| Mulai lambat | alb.ingress.kubernetes.io/slow-start-enabled |
Aktifkan mulai lambat untuk Pod baru |
alb.ingress.kubernetes.io/slow-start-duration |
Durasi peningkatan bertahap dalam detik (30–900) | |
| Pengurasan koneksi | alb.ingress.kubernetes.io/connection-drain-enabled |
Aktifkan pengurasan koneksi |
alb.ingress.kubernetes.io/connection-drain-timeout |
Timeout pengurasan dalam detik (0–900) |
Alihkan permintaan berdasarkan nama domain
Buat Ingress untuk mengalihkan permintaan berdasarkan nama domain. ALB Ingress mendukung nama domain standar maupun kosong.
Alihkan permintaan berdasarkan nama domain standar
Contoh berikut menetapkan jalur perutean ke /hello. Permintaan ke demo.domain.ingress.top/hello dialihkan ke layanan backend.
-
Terapkan templat berikut untuk membuat Service, Penyebaran, dan Ingress. Permintaan dialihkan ke Service melalui nama domain dalam Ingress.
-
Uji perutean. Ganti
ADDRESSdengan nama domain instans ALB (kubectl get inguntuk mengambilnya).curl -H "host: demo.domain.ingress.top" <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Alihkan permintaan berdasarkan nama domain kosong
Saat bidang host kosong, Ingress mencocokkan semua permintaan tanpa memperhatikan domain. Contoh berikut mengarahkan permintaan ke <ADDRESS>/hello ke layanan backend.
-
Terapkan templat berikut untuk membuat Ingress.
-
Uji perutean. Ganti
ADDRESSdengan nama domain instans ALB.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Alihkan permintaan berdasarkan jalur URL
ALB Ingress mengalihkan permintaan berdasarkan jalur URL menggunakan bidang pathType. Tiga jenis pencocokan didukung:
pathType |
Perilaku |
|---|---|
Prefix |
Mencocokkan awalan jalur, segmen demi segmen, peka huruf besar/kecil |
Exact |
Hanya cocok jika persis sama |
ImplementationSpecific |
Ditangani sebagai pencocokan eksak (Exact) oleh pengontrol ALB Ingress. Jika path tidak ditetapkan, ALB menggunakan / sebagai nilai default |
Jika pathType diatur ke Exact atau Prefix, path harus berupa jalur mutlak yang tidak kosong. Jika tidak, pembuatan Ingress gagal dengan error validasi. Saat beberapa aturan pencocokan URL bentrok, ALB mengevaluasinya berdasarkan prioritas aturan pengalihan.
Referensi pencocokan jalur
Jalur sederhana (`/`, `/foo`, `/foo/`)
| Jenis pencocokan | Jalur aturan | Jalur permintaan | Cocok? |
|---|---|---|---|
| Prefix | / |
/ (mencocokkan semua) |
Ya |
| Prefix | /foo |
/foo |
Ya |
| Prefix | /foo |
/foo/ |
Ya |
| Prefix | /foo/ |
/foo |
Ya |
| Prefix | /foo/ |
/foo/ |
Ya |
| Prefix | /aaa |
/ccc |
Tidak — awalan tidak cocok |
| Exact atau ImplementationSpecific | /foo |
/foo |
Ya |
| Exact atau ImplementationSpecific | /foo |
/bar |
Tidak |
| Exact atau ImplementationSpecific | /foo |
/foo/ |
Tidak |
| Exact atau ImplementationSpecific | /foo/ |
/foo |
Tidak |
Jalur hierarkis (`/aaa/bb`, `/aaa/bbb`, `/aaa/bbb/`)
| Jenis pencocokan | Jalur aturan | Jalur permintaan | Cocok? |
|---|---|---|---|
| Prefix | /aaa/bb |
/aaa/bbb |
Tidak |
| Prefix | /aaa/bbb |
/aaa/bbb |
Ya |
| Prefix | /aaa/bbb/ |
/aaa/bbb |
Ya — garis miring di akhir aturan diabaikan |
| Prefix | /aaa/bbb |
/aaa/bbb/ |
Ya — garis miring di akhir permintaan dicocokkan |
| Prefix | /aaa/bbb |
/aaa/bbb/ccc |
Ya — subjalur dicocokkan |
Banyak jalur aturan
| Jenis pencocokan | Jalur aturan | Jalur permintaan | Cocok? |
|---|---|---|---|
| Prefix | /, /aaa |
/aaa/ccc |
Ya — mencocokkan awalan / |
| Prefix | /aaa, / |
/aaa/ccc |
Ya — mencocokkan awalan /aaa |
| Prefix | /aaa, / |
/ccc |
Ya — mencocokkan awalan / |
| Prefix | /aaa, /bbb |
/ccc |
Tidak — awalan tidak cocok |
Pencocokan awalan (Prefix)
Pencocokan awalan membandingkan segmen jalur yang dipisahkan oleh /, peka huruf besar/kecil. Contoh berikut menetapkan jalur aturan ke /, yang mencocokkan semua jalur termasuk /hello.
-
Terapkan templat berikut untuk membuat Ingress.
-
Uji perutean. Ganti
ADDRESSdengan nama domain instans ALB.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Pencocokan eksak (Exact atau ImplementationSpecific)
Contoh berikut menetapkan jalur aturan ke /hello. Hanya jalur persis /hello yang dicocokkan.
-
Terapkan templat berikut untuk membuat Ingress.
-
Uji perutean. Ganti
ADDRESSdengan nama domain instans ALB.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Alihkan HTTP ke HTTPS
Tambahkan anotasi alb.ingress.kubernetes.io/ssl-redirect: "true" untuk mengalihkan permintaan HTTP ke Port HTTPS 443.
Anotasi ini hanya berlaku untuk aturan pengalihan HTTP pada port pendengar 80. Fitur ini hanya berfungsi dengan anotasi RemoveHeader, InsertHeader, dan CORS lintas domain. Sebelum menambahkan anotasi ini, konfigurasikan pendengar HTTPS pada port 443 di AlbConfig.
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: v1
kind: Service
metadata:
name: demo-service-ssl
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo-ssl
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-ssl
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-ssl
template:
metadata:
labels:
app: demo-ssl
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo-ssl
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/ssl-redirect: "true"
name: demo-ssl
namespace: default
spec:
ingressClassName: alb
tls:
- hosts:
- ssl.alb.ingress.top
rules:
- host: ssl.alb.ingress.top
http:
paths:
- backend:
service:
name: demo-service-ssl
port:
number: 80
path: /
pathType: Prefix
Kluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: v1
kind: Service
metadata:
name: demo-service-ssl
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo-ssl
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-ssl
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-ssl
template:
metadata:
labels:
app: demo-ssl
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo-ssl
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/ssl-redirect: "true"
name: demo-ssl
namespace: default
spec:
ingressClassName: alb
tls:
- hosts:
- ssl.alb.ingress.top
rules:
- host: ssl.alb.ingress.top
http:
paths:
- backend:
serviceName: demo-service-ssl
servicePort: 80
path: /
pathType: Prefix
Konfigurasi pemeriksaan kesehatan
Konfigurasikan pemeriksaan kesehatan untuk grup server backend menggunakan anotasi berikut.
Gunakan HTTPS dan gRPC sebagai protokol backend
Tambahkan anotasi alb.ingress.kubernetes.io/backend-protocol untuk menggunakan HTTPS atau gRPC sebagai protokol backend.
Setelah Ingress dibuat, protokol backend tidak dapat diubah. Untuk mengganti protokol, hapus Ingress tersebut dan buat yang baru.
Saat mengalihkan trafik gRPC melalui Ingress, konfigurasikan sertifikat TLS untuk nama domain dan gunakan TLS untuk komunikasi.
| Anotasi | Nilai | Deskripsi |
|---|---|---|
alb.ingress.kubernetes.io/backend-protocol |
https |
Layanan backend menggunakan HTTPS |
grpc |
Layanan backend menggunakan gRPC. Memerlukan konfigurasi TLS pada nama domain |
Konfigurasi ekspresi reguler
Gunakan anotasi alb.ingress.kubernetes.io/use-regex: "true" untuk mengaktifkan pencocokan ekspresi reguler dalam aturan jalur. Anotasi ini hanya berlaku untuk aturan jalur dengan pathType: Prefix.
| Anotasi | Deskripsi |
|---|---|
alb.ingress.kubernetes.io/use-regex: "true" |
Mengaktifkan ekspresi reguler dalam aturan jalur |
alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME> |
Mengonfigurasi kondisi pengalihan kustom. Ganti <YOUR-SVC-NAME> dengan nama Service yang sebenarnya, yang harus sesuai dengan backend.service.name |
Aturan pencocokan ekspresi reguler:
| Target | Awalan | Contoh aturan | Jalur klien | Cocok? | Catatan |
|---|---|---|---|---|---|
| Nama domain | Diawali dengan ~ |
~test.example.com |
test.EXAMPLE.com |
Ya | Nama domain mendukung pencocokan tidak peka huruf besar/kecil |
| Jalur | Diawali dengan ~ |
~/api |
/API |
Ya | Pencocokan tidak peka huruf besar/kecil |
| Jalur | Diawali dengan ~* |
~*/api |
/Api |
Tidak | Pencocokan peka huruf besar/kecil |
Konfigurasi penulisan ulang
ALB Ingress menulis ulang jalur permintaan sebelum mengalihkan. Dua anotasi mengontrol perilaku penulisan ulang:
-
alb.ingress.kubernetes.io/rewrite-target: /<path>/${number}— mengaktifkan penulisan ulang dan menetapkan jalur target. Gunakan format${number}untuk mereferensikan grup penangkapan dari jalur asli (maksimal tiga grup:${1},${2},${3}).pathTypeharusPrefix. -
alb.ingress.kubernetes.io/use-regex— menentukan apakah akan menggunakan ekspresi reguler dalam jalur. Secara otomatis diaktifkan saatrewrite-targetdikonfigurasi. Atur ke"false"untuk menonaktifkan; perhatikan bahwa jalur dengan karakter khusus (%#;!()[]^,"\") tidak dapat dibuat saat regex dinonaktifkan.
Skenario 1: Hapus awalan
Jalur path: /something(/|$)(.*) menggunakan tiga grup penangkapan:
-
/something— mencocokkan awalan yang akan dihapus -
(/|$)— grup pertama: mencocokkan/atau akhir jalur -
(.*)— grup kedua: menangkap semua yang ada setelah/something/, direferensikan sebagai${2}dalam target penulisan ulang
Target penulisan ulang / + ${2} menghapus awalan /something:
| Jalur asli | Cocok? | Jalur hasil penulisan ulang |
|---|---|---|
/something |
Ya (grup kedua kosong) | / |
/something/ |
Ya (grup kedua kosong) | / |
/something/new |
Ya (grup kedua: new) |
/new |
/something-new/item |
Tidak | 503 |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
alb.ingress.kubernetes.io/rewrite-target: /${2}
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
Skenario 2: Tangkap dan susun ulang beberapa bagian
Jalur /items/(.*)/(.*)/(.*) menangkap tiga segmen. Target penulisan ulang /${2}?code=${3} menyusun ulang URL menggunakan grup kedua dan ketiga.
Pola ini memerlukan tepat empat segmen jalur. Klien harus menggunakan format jalur tetap.
| Jalur asli | Cocok? | Rewritten Path |
|---|---|---|
/items/electronics/computers/554 |
Ya (grup 2: computers, grup 3: 554) |
/computers?code=554 |
/items/produce/fruits/12 |
Ya (grup 2: fruits, grup 3: 12) |
/fruits?code=12 |
/items/headphones/5 |
Tidak | 503 |
/drinks/41 |
Tidak | 503 |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
alb.ingress.kubernetes.io/rewrite-target: /${2}?code=${3}
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /items/(.*)/(.*)/(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
Skenario 3: Tulis ulang banyak jalur ke satu jalur
Contoh berikut mengarahkan /app-a dan /app-b ke /app-c dengan mendefinisikan dua aturan jalur yang memiliki target penulisan ulang yang sama /${2} → /app-c/${2}.
| Jalur asli | Cocok? | Jalur Tulis Ulang |
|---|---|---|
/app-a/item1 |
Ya (grup 2: item1) |
/app-c/item1 |
/app-a/item2 |
Ya (grup 2: item2) |
/app-c/item2 |
/app-a atau /app-a/ |
Ya (grup 2 kosong) | /app-c/ |
/drinks/41 |
Tidak | 503 |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
alb.ingress.kubernetes.io/rewrite-target: /app-c/${2}
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: 9080
Skenario 4: Tulis ulang nama domain
Anotasi rewrite-target hanya mengubah jalur. Untuk menulis ulang bagian lain dari URL seperti nama domain atau parameter kueri, gunakan aturan pengalihan kustom.
Verifikasi aturan penulisan ulang secara lokal
Gunakan sed untuk menguji kecocokan regex jalur dan melihat pratinjau hasil penulisan ulang sebelum menerapkan.
Contoh berikut menguji regex jalur /items/(.*)/(.*)/(.*) dan aturan penulisan ulang /${2}?code=${3} dari Skenario 2.
-
Simpan jalur uji ke
path2.txt:/items/electronics/computers/554 /items/produce/fruits/12 /items/headphones/5 /drinks/41 -
Simulasikan penulisan ulang dengan
sed. Escape/menjadi\/dalam regex jalur, dan gunakan\2alih-alih${2}untuk grup penangkapan:sed -E 's#\/items\/(.*)\/(.*)\/(.*)#Matched: [&] ---> Rewritten: [/\2?code=\3]#' path2.txtOutput yang diharapkan — dua jalur pertama cocok dengan aturan penulisan ulang; dua terakhir tidak:
Matched: [/items/electronics/computers/554] ---> Rewritten: [/computers?code=554] Matched: [/items/produce/fruits/12] ---> Rewritten: [/fruits?code=12] /items/headphones/5 /drinks/41
Konfigurasi port pendengar kustom
Gunakan anotasi alb.ingress.kubernetes.io/listen-ports untuk mengekspos layanan pada beberapa port, seperti HTTP 80 dan HTTPS 443.
ALB tidak membuat pendengar dari Ingress. Buat port dan protokol pendengar yang diperlukan di AlbConfig terlebih dahulu, lalu kaitkan dengan Ingress.
| Anotasi | Deskripsi |
|---|---|
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' |
Mengonfigurasi layanan untuk mendengarkan pada port 80 dan port 443 |
Konfigurasi prioritas aturan pengalihan
Secara default, ALB mengurutkan aturan pengalihan dalam urutan berikut:
-
Antar Ingress: diurutkan secara leksikografis berdasarkan
namespace/name. Nilai lebih kecil memiliki prioritas lebih tinggi. Namespace dibandingkan terlebih dahulu, lalu nama. -
Dalam Ingress yang sama: diurutkan berdasarkan urutan dalam bidang
rules. Aturan yang tercantum lebih awal memiliki prioritas lebih tinggi.rules: - host: www.example.com # Prioritas lebih tinggi http: ... - host: www.test.com # Prioritas lebih rendah http: ...
Untuk mengganti urutan pengurutan default tanpa mengganti nama Ingress, gunakan anotasi alb.ingress.kubernetes.io/order.
Prioritas dalam pendengar yang sama harus unik.
| Anotasi | Rentang | Default | Deskripsi |
|---|---|---|---|
alb.ingress.kubernetes.io/order |
[1, 1000] | 10 | Prioritas aturan pengalihan. Nilai lebih rendah memiliki prioritas lebih tinggi |
Implementasikan rilis canary menggunakan anotasi
ALB mendukung rilis canary berdasarkan header permintaan, cookie, dan bobot trafik. Buat Ingress canary terpisah bersama Ingress produksi.
Canary routing priority: Header > Cookie > Bobot (dari tertinggi ke terendah).
Jangan hapus Ingress produksi selama rilis canary. Setelah rilis canary divalidasi, perbarui layanan backend di Ingress produksi agar mengarah ke versi baru, lalu hapus Ingress canary.
Lihat Implementasikan rilis bertahap melalui ALB Ingress.
Rute berdasarkan header
Gunakan canary-by-header dan canary-by-header-value bersama-sama untuk mengarahkan permintaan yang cocok dengan nilai header tertentu ke layanan canary. Permintaan yang tidak cocok akan dilanjutkan ke aturan canary berikutnya (cookie atau bobot).
Dengan konfigurasi ini, permintaan dengan location: hz diarahkan ke layanan canary. Semua permintaan lain dilanjutkan ke aturan canary berikutnya.
| Anotasi | Deskripsi |
|---|---|
alb.ingress.kubernetes.io/canary-by-header |
Nama header permintaan yang dicocokkan |
alb.ingress.kubernetes.io/canary-by-header-value |
Nilai header yang tepat untuk dicocokkan. Kedua anotasi harus dikonfigurasi bersama |
Rute berdasarkan cookie
Gunakan canary-by-cookie untuk mengarahkan permintaan berdasarkan nama cookie. Atur nilai cookie ke always untuk selalu mengarahkan ke layanan canary, atau never untuk selalu mengecualikannya.
Dengan konfigurasi ini, permintaan dengan Cookie: demo=always diarahkan ke layanan canary. Permintaan dengan Cookie: demo=never sepenuhnya melewati layanan canary.
| Anotasi | Nilai | Deskripsi |
|---|---|---|
alb.ingress.kubernetes.io/canary-by-cookie |
always |
Semua permintaan diarahkan ke layanan canary |
never |
Tidak ada permintaan yang diarahkan ke layanan canary |
Perutean canary berbasis cookie hanya mendukung always dan never. Nilai cookie kustom tidak didukung.
Rute berdasarkan bobot
Gunakan canary-weight untuk mengirim persentase trafik ke layanan canary. Contoh berikut mengarahkan 50% trafik ke canary:
| Anotasi | Rentang | Deskripsi |
|---|---|---|
alb.ingress.kubernetes.io/canary-weight |
0–100 | Persentase permintaan yang diarahkan ke layanan canary |
Implementasikan persistensi sesi menggunakan anotasi
ALB Ingress mendukung persistensi sesi berbasis cookie. Tambahkan anotasi berikut untuk mengaktifkan dan mengonfigurasinya.
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" # Gunakan "Server" untuk cookie kustom
alb.ingress.kubernetes.io/cookie-timeout: "1800"
alb.ingress.kubernetes.io/cookie: "test"
spec:
...
| Anotasi | Deskripsi | Default |
|---|---|---|
alb.ingress.kubernetes.io/sticky-session |
Aktifkan persistensi sesi: true atau false |
false |
alb.ingress.kubernetes.io/sticky-session-type |
Mode penanganan cookie. Insert: ALB menyisipkan cookie SERVERID untuk mengarahkan permintaan berikutnya ke backend yang sama. Server: ALB menulis ulang cookie kustom untuk perutean. Memerlukan StickySessionEnabled diatur ke true pada grup server. Lihat Buat grup server |
Insert |
alb.ingress.kubernetes.io/cookie-timeout |
Timeout cookie dalam detik. Rentang: [1, 86400]. Berlaku saat sticky-session-type adalah Insert |
1000 |
alb.ingress.kubernetes.io/cookie |
Nama cookie kustom. Wajib dan tidak boleh kosong saat sticky-session-type adalah Server |
"" |
Tentukan algoritma penyeimbangan beban
Gunakan anotasi alb.ingress.kubernetes.io/backend-scheduler untuk menetapkan algoritma penyeimbangan beban untuk grup server backend.
| Nilai | Algoritma | Deskripsi |
|---|---|---|
wrr |
Round-robin berbobot | Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan. Algoritma default |
wlc |
Koneksi terkecil berbobot | Mengarahkan ke server dengan koneksi aktif paling sedikit, dibobot berdasarkan bobot server |
sch |
Penghashan konsisten berdasarkan IP sumber | Mengarahkan permintaan dari IP klien yang sama ke server backend yang sama |
uch |
Penghashan konsisten berdasarkan parameter URL | Mengarahkan berdasarkan hash parameter URL. Tetapkan nama parameter dengan alb.ingress.kubernetes.io/backend-scheduler-uch-value |
Konfigurasi berbagi sumber daya lintas asal
Tambahkan anotasi CORS untuk mengizinkan browser membuat permintaan lintas asal ke layanan.
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"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cloud-nodeport
port:
number: 80
| Anotasi | Deskripsi | Default |
|---|---|---|
alb.ingress.kubernetes.io/cors-allow-origin |
Asal yang diizinkan. Harus diawali dengan http:// atau https://, diikuti domain yang valid atau domain wildcard tingkat atas. Pisahkan beberapa asal dengan koma. Contoh: "https://example.com:4443, http://aliyundoc.com, https://example.org:1199" |
* |
alb.ingress.kubernetes.io/cors-allow-methods |
Metode lintas asal yang diizinkan. Tidak peka huruf besar/kecil. Pisahkan beberapa metode dengan koma. Contoh: "PUT, GET, POST, OPTIONS" |
GET, PUT, POST, DELETE, PATCH, OPTIONS |
alb.ingress.kubernetes.io/cors-allow-headers |
Header permintaan yang diizinkan. Header dapat berisi huruf, angka, garis bawah (_), dan tanda hubung (-). Pisahkan beberapa header dengan koma. Contoh: "X-Forwarded-For, X-app123-XPTO" |
DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization |
alb.ingress.kubernetes.io/cors-expose-headers |
Header yang diekspos ke browser. Dapat berisi huruf, angka, garis bawah (_), tanda hubung (-), dan tanda bintang (*). Pisahkan beberapa header dengan koma. Contoh: "*, X-CustomResponseHeader" |
Kosong |
alb.ingress.kubernetes.io/cors-allow-credentials |
Apakah kredensial diizinkan dalam permintaan lintas asal. Contoh: "false" |
true |
alb.ingress.kubernetes.io/cors-max-age |
Durasi cache maksimum dalam detik untuk respons preflight OPTIONS. Rentang: [−1, 172800] | 172800 |
Aktifkan koneksi backend persisten
Koneksi backend persisten menggunakan kembali koneksi TCP ke server backend, mengurangi overhead membuka dan menutup koneksi per permintaan.
Tambahkan anotasi alb.ingress.kubernetes.io/backend-keepalive: "true" untuk mengaktifkan fitur ini:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/backend-keepalive: "true"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cloud-nodeport
port:
number: 80
Tetapkan batas laju QPS
Tambahkan anotasi alb.ingress.kubernetes.io/traffic-limit-qps untuk menetapkan pembatasan kecepatan QPS pada tingkat aturan pengalihan:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/traffic-limit-qps: "50"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee
pathType: ImplementationSpecific
backend:
service:
name: coffee-svc
port:
number: 80
| Anotasi | Rentang | Deskripsi |
|---|---|---|
alb.ingress.kubernetes.io/traffic-limit-qps |
[1, 100.000] | QPS maksimum untuk aturan pengalihan |
Konfigurasi mulai lambat untuk Pod baru
Mulai lambat secara bertahap meningkatkan trafik ke Pod baru selama durasi yang dikonfigurasi, mencegah lonjakan CPU atau memori sementara akibat trafik penuh yang mengenai Pod dingin.
| Anotasi | Deskripsi | Default |
|---|---|---|
alb.ingress.kubernetes.io/slow-start-enabled |
Aktifkan mulai lambat: true atau false |
false |
alb.ingress.kubernetes.io/slow-start-duration |
Durasi peningkatan bertahap dalam detik. Durasi lebih lama memperlambat peningkatan trafik. Rentang: [30, 900] | 30 |
Konfigurasi pengurasan koneksi
Saat sebuah Pod memasuki status Terminating, ALB menghapusnya dari grup server backend. Tanpa pengurasan koneksi, permintaan yang sedang berlangsung pada koneksi yang ada mungkin gagal.
Pengurasan koneksi menjaga koneksi aktif tetap terbuka selama periode yang dikonfigurasi, memungkinkan permintaan yang sedang berlangsung selesai sebelum Pod offline.
Sebelum timeout pengurasan berakhir, ALB tidak dapat menjamin Pod tetap sehat. Konfigurasikan spec.terminationGracePeriodSeconds pada Pod atau gunakan panggilan balik preStop untuk mengontrol ketersediaan Pod selama status Terminating.
Lihat Capai offline bisnis yang lancar melalui pengurasan koneksi ALB.
| Anotasi | Deskripsi | Default |
|---|---|---|
alb.ingress.kubernetes.io/connection-drain-enabled |
Aktifkan pengurasan koneksi: true atau false |
false |
alb.ingress.kubernetes.io/connection-drain-timeout |
Waktu maksimum dalam detik yang ditunggu ALB sebelum menutup koneksi setelah Pod dihapus atau gagal pemeriksaan kesehatan. Rentang: [0, 900] | 300 |