Application Load Balancer (ALB) Ingress adalah objek API Kubernetes yang menyediakan load balancing lapisan 7 untuk akses eksternal ke layanan dalam kluster ACS. Topik ini mencakup konfigurasi ALB Ingress tingkat lanjut, termasuk pengalihan permintaan berbasis domain dan path, pemeriksaan kesehatan, pengalihan HTTPS, rilis canary, dan lainnya.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster ACS. Untuk informasi lebih lanjut, lihat Create an ACS cluster.
Objek AlbConfig. Untuk informasi lebih lanjut, lihat Getting started with ALB Ingress.
Referensi cepat anotasi
Semua konfigurasi ALB Ingress menggunakan anotasi Kubernetes. Tabel berikut mencantumkan anotasi yang dibahas dalam topik ini.
| Anotasi | Tipe | Default | Versi kluster | Bagian |
|---|---|---|---|---|
alb.ingress.kubernetes.io/healthcheck-enabled | "true" | "false" | "false" | — | Konfigurasikan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/healthcheck-path | string | "/" | — | Konfigurasikan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/healthcheck-protocol | "HTTP" | "TCP" | "HTTP" | — | Konfigurasikan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/healthcheck-method | "HEAD" | "GET" | "HEAD" | — | Konfigurasikan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/healthcheck-httpcode | "http_2xx" | "http_3xx" | "http_4xx" | "http_5xx" | "http_2xx" | — | Konfigurasikan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/healthcheck-timeout-seconds | integer, 1–300 | 5 | — | Konfigurasikan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/healthcheck-interval-seconds | integer, 1–50 | 2 | — | Konfigurasikan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/healthy-threshold-count | integer, 2–10 | 3 | — | Konfigurasikan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/unhealthy-threshold-count | integer, 2–10 | 3 | — | Konfigurasikan pemeriksaan kesehatan |
alb.ingress.kubernetes.io/ssl-redirect | "true" | "false" | — | — | Alihkan HTTP ke HTTPS |
alb.ingress.kubernetes.io/backend-protocol | "https" | "grpc" | — | — | Tetapkan protokol backend |
alb.ingress.kubernetes.io/use-regex | "true" | "false" | — | — | Gunakan ekspresi reguler |
alb.ingress.kubernetes.io/conditions.<service-name> | JSON | — | — | Gunakan ekspresi reguler |
alb.ingress.kubernetes.io/rewrite-target | string | — | — | Konfigurasikan aturan penulisan ulang |
alb.ingress.kubernetes.io/listen-ports | JSON | — | — | Konfigurasikan port pendengar kustom |
alb.ingress.kubernetes.io/order | integer, 1–1.000 | 10 | — | Tetapkan prioritas aturan pengalihan |
alb.ingress.kubernetes.io/canary | "true" | "false" | — | — | Rilis canary |
alb.ingress.kubernetes.io/canary-by-header | string | — | — | Rilis canary |
alb.ingress.kubernetes.io/canary-by-header-value | string | — | — | Rilis canary |
alb.ingress.kubernetes.io/canary-by-cookie | string | — | — | Rilis canary |
alb.ingress.kubernetes.io/canary-weight | integer, 0–100 | — | — | Rilis canary |
alb.ingress.kubernetes.io/sticky-session | "true" | "false" | "false" | — | Konfigurasikan persistensi sesi |
alb.ingress.kubernetes.io/sticky-session-type | "Insert" | "Server" | "Insert" | — | Konfigurasikan persistensi sesi |
alb.ingress.kubernetes.io/cookie-timeout | integer, 1–86.400 | 1000 | — | Konfigurasikan persistensi sesi |
alb.ingress.kubernetes.io/backend-scheduler | "wrr" | "wlc" | "sch" | "uch" | "wrr" | 1.19+ | Tetapkan algoritma penyeimbangan beban |
alb.ingress.kubernetes.io/backend-scheduler-uch-value | string | — | 1.19+ | Tetapkan algoritma penyeimbangan beban |
alb.ingress.kubernetes.io/enable-cors | "true" | "false" | — | — | Konfigurasikan CORS |
alb.ingress.kubernetes.io/cors-allow-origin | string | "*" | — | Konfigurasikan CORS |
alb.ingress.kubernetes.io/cors-allow-methods | string | "GET, PUT, POST, DELETE, PATCH, OPTIONS" | — | Konfigurasikan CORS |
alb.ingress.kubernetes.io/cors-allow-headers | string | "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization" | — | Konfigurasikan CORS |
alb.ingress.kubernetes.io/cors-expose-headers | string | empty | — | Konfigurasikan CORS |
alb.ingress.kubernetes.io/cors-allow-credentials | "true" | "false" | "true" | — | Konfigurasikan CORS |
alb.ingress.kubernetes.io/cors-max-age | bilangan bulat, -1–172.800 | 172800 | — | Konfigurasikan CORS |
alb.ingress.kubernetes.io/backend-keepalive | "true" | "false" | — | — | Aktifkan koneksi persisten backend |
alb.ingress.kubernetes.io/traffic-limit-qps | integer, 1–100.000 | — | — | Konfigurasikan pembatasan kecepatan QPS |
Alihkan permintaan berdasarkan nama domain
ALB Ingress mengarahkan permintaan masuk ke layanan berdasarkan bidang host dalam aturan Ingress. Bagian ini menunjukkan cara mengalihkan permintaan menggunakan domain bernama dan tanpa domain.
Alihkan permintaan ke domain bernama
Terapkan manifes berikut untuk membuat Penyebaran, Layanan, dan Ingress. Permintaan ke
demo.domain.ingress.topdialihkan kedemo-service.apiVersion: v1 kind: Service metadata: name: demo-service namespace: default spec: ports: - name: port1 port: 80 protocol: TCP targetPort: 8080 selector: app: demo sessionAffinity: None type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: demo namespace: default spec: replicas: 1 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1 imagePullPolicy: IfNotPresent name: demo ports: - containerPort: 8080 protocol: TCP --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo namespace: default spec: ingressClassName: alb rules: - host: demo.domain.ingress.top http: paths: - backend: service: name: demo-service port: number: 80 path: /hello pathType: ImplementationSpecificDapatkan alamat instans ALB dengan menjalankan
kubectl get ing, lalu kirim permintaan uji. Ganti<ADDRESS>dengan nama domain instans ALB.curl -H "host: demo.domain.ingress.top" <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Alihkan permintaan tanpa domain
Atur host ke string kosong untuk mencocokkan permintaan apa pun terlepas dari header Host.
Terapkan manifes Ingress berikut:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo namespace: default spec: ingressClassName: alb rules: - host: "" http: paths: - backend: service: name: demo-service port: number: 80 path: /helloDapatkan alamat instans ALB dengan menjalankan
kubectl get ing, lalu kirim permintaan uji. Ganti<ADDRESS>dengan nama domain instans ALB.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Alihkan permintaan berdasarkan path URL
Atur bidang pathType untuk mengontrol cara ALB Ingress mencocokkan path URL. Tiga jenis pencocokan didukung: Exact, ImplementationSpecific (default), dan Prefix.
Kebijakan pencocokan URL dapat bertentangan satu sama lain. Ketika terjadi bentrokan, permintaan dicocokkan berdasarkan urutan menurun prioritas kebijakan. Untuk detail selengkapnya, lihat Mengatur prioritas aturan pengalihan.
Perilaku pencocokan path
| Mode pencocokan | Aturan | Path URL | Cocok? |
|---|---|---|---|
| Prefix | / | (semua path) | Ya |
| Prefix | /foo | /foo | Ya |
| Prefix | /foo | /foo/ | Ya |
| Prefix | /aaa/bb | /aaa/bbb | Tidak |
| Prefix | /aaa/bbb | /aaa/bbb | Ya |
| Prefix | /aaa/bbb/ | /aaa/bbb | Ya — trailing / dalam aturan diabaikan |
| Prefix | /aaa/bbb | /aaa/bbb/ | Ya — trailing / dalam path URL dicocokkan |
| Prefix | /aaa/bbb | /aaa/bbb/ccc | Ya — subpath dicocokkan |
| Prefix | / dan /aaa | /aaa/ccc | Ya — mencocokkan awalan /aaa |
| Prefix | /aaa dan / | /aaa/ccc | Ya — mencocokkan awalan /aaa |
| Prefix | /aaa dan / | /ccc | Ya — mencocokkan awalan / |
| Prefix | /aaa | /ccc | Tidak |
| Exact atau ImplementationSpecific | /foo | /foo | Ya |
| Exact atau ImplementationSpecific | /foo | /bar | Tidak |
| Exact atau ImplementationSpecific | /foo | /foo/ | Tidak |
| Exact atau ImplementationSpecific | /foo/ | /foo | Tidak |
Exact
Permintaan harus cocok persis dengan path tersebut.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-path
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
backend:
service:
name: demo-service
port:
number: 80
pathType: ExactImplementationSpecific
Dalam ALB Ingress, ImplementationSpecific berperilaku identik dengan Exact.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-path
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
backend:
service:
name: demo-service
port:
number: 80
pathType: ImplementationSpecificPrefix
Prefix melakukan pencocokan case-sensitive pada elemen path yang dipisahkan oleh /. Mengatur path: / akan mencocokkan semua permintaan masuk.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-path-prefix
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
backend:
service:
name: demo-service
port:
number: 80
pathType: PrefixUntuk memverifikasi salah satu contoh di atas, jalankan kubectl get ing untuk mendapatkan <ADDRESS>, lalu:
curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}Konfigurasikan pemeriksaan kesehatan
Tambahkan anotasi pemeriksaan kesehatan ke Ingress agar ALB dapat memeriksa server backend dan secara otomatis menghapus server yang tidak sehat dari rotasi.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/backend-scheduler: "uch"
alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80| Annotation | Description |
|---|---|
alb.ingress.kubernetes.io/healthcheck-enabled | (Opsional) Aktifkan pemeriksaan kesehatan. Default: false. |
alb.ingress.kubernetes.io/healthcheck-path | (Opsional) Path URL untuk pemeriksaan kesehatan. Harus diawali dengan / dan terdiri dari 1–80 karakter. URL dapat berisi huruf, angka, tanda hubung (-), garis miring (/), titik (.), tanda persen (%), tanda tanya (?), tanda pagar (#), dan tanda ampersand (&). URL juga dapat berisi karakter tambahan berikut: _ ; ~ ! ( ) * [ ] @ $ ^ : ' , +. Default: /. Secara default, instans ALB mengirim permintaan HTTP HEAD ke halaman utama aplikasi default yang dikonfigurasi pada instans Elastic Compute Service (ECS) backend untuk melakukan pemeriksaan kesehatan. Instans ALB mengirim permintaan tersebut ke Alamat IP pribadi instans ECS. Jika Anda tidak ingin menggunakan halaman utama aplikasi default untuk pemeriksaan kesehatan, Anda harus menentukan path URL tertentu. |
alb.ingress.kubernetes.io/healthcheck-protocol | (Opsional) Protokol untuk pemeriksaan kesehatan. |
alb.ingress.kubernetes.io/healthcheck-method | (Opsional) Metode HTTP untuk pemeriksaan kesehatan. |
alb.ingress.kubernetes.io/healthcheck-httpcode | Kode status yang menunjukkan backend dalam kondisi sehat. Nilai yang valid: http_2xx (default), http_3xx, http_4xx, http_5xx. |
alb.ingress.kubernetes.io/healthcheck-timeout-seconds | Timeout untuk satu kali pemeriksaan kesehatan. Jika backend tidak memberikan tanggapan dalam periode ini, pemeriksaan dianggap gagal. Nilai yang valid: 1–300. Default: 5. Satuan: detik. |
alb.ingress.kubernetes.io/healthcheck-interval-seconds | Interval antara pemeriksaan kesehatan berturut-turut. Nilai yang valid: 1–50. Default: 2. Satuan: detik. |
alb.ingress.kubernetes.io/healthy-threshold-count | Jumlah pemeriksaan sukses berturut-turut yang diperlukan sebelum backend yang tidak sehat dianggap sehat. Nilai yang valid: 2–10. Default: 3. |
alb.ingress.kubernetes.io/unhealthy-threshold-count | Jumlah pemeriksaan gagal berturut-turut yang menyebabkan backend yang sehat dianggap tidak sehat. Nilai yang valid: 2–10. Default: 3. |
Alihkan HTTP ke HTTPS
Atur alb.ingress.kubernetes.io/ssl-redirect: "true" untuk mengalihkan semua permintaan HTTP ke Port HTTPS 443.
ALB Ingress tidak dapat membuat pendengar secara langsung. Tentukan port dan protokol pendengar dalam objek AlbConfig, lalu kaitkan pendengar tersebut dengan layanan dalam Ingress. Untuk detailnya, lihat Use AlbConfigs to configure ALB listeners.
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: PrefixTetapkan protokol backend
ALB mendukung HTTPS dan gRPC sebagai protokol backend. Atur anotasi alb.ingress.kubernetes.io/backend-protocol menjadi "https" atau "grpc".
Protokol backend tidak dapat diubah setelah Ingress dibuat. Untuk mengubah protokol, hapus Ingress dan buat ulang.
Untuk gRPC, domain harus memiliki Sertifikat SSL dan menggunakan TLS. Contoh berikut mengonfigurasi backend gRPC:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
alb.ingress.kubernetes.io/rewrite-target: /path/${2}
name: rewrite-ingress
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080Gunakan ekspresi reguler
Atur alb.ingress.kubernetes.io/use-regex: "true" untuk mengaktifkan pencocokan ekspresi reguler dalam bidang path. Gunakan anotasi alb.ingress.kubernetes.io/conditions.<service-name> untuk menentukan kondisi path kustom.
Layanan yang disebutkan dalam anotasi harus ada dalam kluster dan sesuai dengan nama layanan dalam bidang backend aturan.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
alb.ingress.kubernetes.io/conditions.service-a: |
[{
"type": "Path",
"pathConfig": {
"values": [
"~*^/pathvalue1",
"/pathvalue2"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: service-a
port:
number: 88Pola ekspresi reguler harus menggunakan awalan flag~*(misalnya,~*^/pathvalue1). Path pencocokan eksak tidak memerlukan awalan~*.
Konfigurasikan aturan penulisan ulang
Gunakan alb.ingress.kubernetes.io/rewrite-target bersama dengan alb.ingress.kubernetes.io/use-regex: "true" untuk menulis ulang path permintaan sebelum mencapai backend.
Aturan:
Variabel dalam format
${number}harus digunakan padapathyangpathType-nyaPrefix.Maksimal tiga variabel grup tangkapan didukung:
${1},${2}, dan${3}.pathharus dimulai dengan/.Secara default,
*dan?tidak diperbolehkan dalam bidangpath. Aktifkanuse-regexuntuk menggunakannya.
Contoh berikut menulis ulang path yang cocok dengan /something(/|$)(.*):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
alb.ingress.kubernetes.io/rewrite-target: /path/${2}
name: rewrite-ingress
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080Variabel ${2} menangkap segmen path setelah /something/. Backend menerima path berikut:
| Permintaan klien | Diterima backend |
|---|---|
/something | /path/ |
/something/ | /path/ |
/something/new | /path/new |
Untuk penulisan ulang multi-grup, pertimbangkan contoh ini: path diatur ke /sys/(.*)/(.*)/aaa dan rewrite-target diatur ke /${1}/${2}. Permintaan ke /sys/ccc/bbb/aaa cocok dengan pola — ${1} diganti dengan ccc dan ${2} dengan bbb — sehingga backend menerima /ccc/bbb.
Konfigurasikan port pendengar kustom
Atur alb.ingress.kubernetes.io/listen-ports untuk mengekspos layanan pada beberapa port secara bersamaan — misalnya, HTTP pada port 80 dan HTTPS pada port 443.
ALB Ingress tidak dapat membuat pendengar secara langsung. Tentukan port dan protokol pendengar dalam objek AlbConfig, lalu kaitkan pendengar tersebut dengan layanan dalam Ingress. Untuk detailnya, lihat Use AlbConfigs to configure ALB listeners.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
spec:
ingressClassName: alb
tls:
- hosts:
- demo.alb.ingress.top
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80Tetapkan prioritas aturan pengalihan
Secara default, ALB Ingress memprioritaskan aturan pengalihan sebagai berikut:
Ingress diberi peringkat berdasarkan urutan leksikografis
namespace/nama. Nilai yang lebih rendah berarti prioritas lebih tinggi.Dalam Ingress yang sama, aturan dicocokkan dari atas ke bawah sesuai urutan kemunculannya dalam bidang
rules.
Untuk mengganti peringkat default tanpa mengganti nama Ingress, gunakan anotasi alb.ingress.kubernetes.io/order.
Prioritas harus unik dalam pendengar yang sama. Nilainya harus berupa bilangan bulat dari 1 hingga 1.000. Nilai yang lebih rendah berarti prioritas lebih tinggi. Default-nya adalah 10.apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/order: "2"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80Rilis canary
ALB Ingress mendukung rilis canary yang mengarahkan sebagian kecil trafik ke versi baru layanan Anda. Tiga metode pemisahan trafik tersedia: berbasis header, berbasis cookie, dan berbasis bobot.
Aktifkan rilis canary pada Ingress dengan mengatur alb.ingress.kubernetes.io/canary: "true", lalu tambahkan anotasi pengarahan yang sesuai.
Canary rule priority: berbasis header > berbasis cookie > berbasis bobot.
Selama pengujian canary, jangan ubah aturan Ingress asli — hal ini dapat mengganggu trafik. Setelah versi baru lolos pengujian, perbarui layanan backend dalam Ingress asli dan hapus Ingress canary.
Canary berbasis header
canary-by-header menentukan nama header permintaan yang akan dicocokkan. canary-by-header-value menentukan nilai header yang diperlukan dan harus digunakan bersama dengan canary-by-header. Permintaan yang header-nya cocok akan diarahkan ke layanan canary; semua permintaan lainnya akan dilanjutkan ke aturan canary berikutnya berdasarkan prioritas.
Dalam contoh berikut, permintaan dengan header location: hz diarahkan ke layanan 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
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
service:
name: demo-service-hello
port:
number: 80
path: /hello
pathType: ImplementationSpecificCanary berbasis cookie
canary-by-cookie membagi trafik berdasarkan nama cookie. Atur cookie ke always untuk mengarahkan permintaan ke layanan canary, atau never untuk mengecualikannya.
Hanyaalwaysdanneveryang didukung. Nilai cookie kustom tidak didukung.
Dalam contoh berikut, permintaan dengan cookie demo=always diarahkan ke layanan canary:
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
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
service:
name: demo-service-hello
port:
number: 80
path: /hello
pathType: ImplementationSpecificCanary berbasis bobot
canary-weight menetapkan persentase permintaan yang diarahkan ke layanan canary. Nilainya harus berupa bilangan bulat dari 0 hingga 100.
Dalam contoh berikut, 50% permintaan diarahkan ke layanan canary:
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-weight
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
service:
name: demo-service-hello
port:
number: 80
path: /hello
pathType: ImplementationSpecificKonfigurasikan persistensi sesi
ALB Ingress mengarahkan permintaan dari klien yang sama ke server backend yang sama melalui beberapa koneksi. Konfigurasikan persistensi sesi menggunakan anotasi berikut:
| Anotasi | Deskripsi |
|---|---|
alb.ingress.kubernetes.io/sticky-session | Aktifkan persistensi sesi. Nilai yang valid: true, false. Default: false. |
alb.ingress.kubernetes.io/sticky-session-type | Metode penanganan cookie. Insert (default): Server Load Balancer menyisipkan cookie SERVERID ke respons dan menggunakannya untuk mengarahkan permintaan selanjutnya ke backend yang sama. Server: Server Load Balancer menulis ulang cookie yang ditentukan pengguna untuk tujuan yang sama. Berlaku hanya ketika StickySessionEnabled bernilai true untuk grup server. |
alb.ingress.kubernetes.io/cookie-timeout | Timeout cookie dalam detik. Nilai yang valid: 1–86.400. Default: 1000. |
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"
alb.ingress.kubernetes.io/cookie-timeout: "1800"
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /tea2
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee2
backend:
service:
name: coffee-svc
port:
number: 80Tetapkan algoritma penyeimbangan beban
Gunakan alb.ingress.kubernetes.io/backend-scheduler untuk menetapkan algoritma penyeimbangan beban untuk grup server backend. Versi kluster harus 1.19 atau lebih baru.
Empat algoritma didukung:
| Nilai | Algoritma | Cara kerja |
|---|---|---|
wrr (default) | Weighted round robin | Mendistribusikan permintaan secara proporsional sesuai bobot masing-masing server. |
wlc | Weighted least connections | Mendistribusikan permintaan ke server backend berdasarkan bobot dan jumlah koneksi yang ada. Jika server backend memiliki bobot yang sama, server dengan koneksi paling sedikit yang dipilih. |
sch | Source IP hashing | Mengarahkan permintaan dari IP sumber yang sama ke server backend yang sama. |
uch | URL-based consistent hashing | Mengarahkan permintaan dengan parameter URL yang sama ke server backend yang sama. Memerlukan alb.ingress.kubernetes.io/backend-scheduler-uch-value untuk menentukan nama parameter. |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/backend-scheduler: "uch"
alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80Konfigurasikan CORS
Atur alb.ingress.kubernetes.io/enable-cors: "true" untuk mengaktifkan Cross-Origin Resource Sharing (CORS) pada ALB Ingress.
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 | URL yang diizinkan mengakses resource melalui browser. Setiap URL harus dimulai dengan http:// atau https:// dan menggunakan domain valid atau wildcard tingkat atas. Pisahkan beberapa URL dengan koma. Contoh: "https://example.com:4443, http://aliyundoc.com". | * |
alb.ingress.kubernetes.io/cors-allow-methods | Metode HTTP yang diizinkan untuk permintaan CORS. Nilai tidak case-sensitive. 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 dalam permintaan CORS. 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 dapat diakses klien dalam respons. Header dapat berisi huruf, angka, garis bawah, tanda hubung, dan tanda bintang. Pisahkan beberapa header dengan koma. Contoh: "*, X-CustomResponseHeader". | empty |
alb.ingress.kubernetes.io/cors-allow-credentials | Apakah kredensial disertakan dalam permintaan CORS. | true |
alb.ingress.kubernetes.io/cors-max-age | Durasi cache maksimum untuk hasil permintaan preflight OPTIONS. Nilai yang valid: -1 hingga 172.800. Satuan: detik. | 172800 |
Aktifkan koneksi persisten backend
Secara default, ALB menggunakan koneksi singkat ke grup server backend — setiap permintaan membuka lalu menutup koneksi TCP. Koneksi persisten menggunakan kembali koneksi TCP yang ada untuk beberapa permintaan, mengurangi overhead koneksi dan meningkatkan throughput di bawah beban tinggi.
Atur 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: 80Konfigurasikan pembatasan kecepatan QPS
Atur alb.ingress.kubernetes.io/traffic-limit-qps untuk membatasi jumlah permintaan per detik (QPS) untuk aturan pengalihan. Nilainya harus berupa bilangan bulat dari 1 hingga 100.000.
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