Aturan routing Ingress ALB terdiri dari kondisi dan aksi. Kondisi mencocokkan permintaan berdasarkan nama domain, path, header permintaan, string kueri, metode permintaan, cookie, atau alamat IP sumber. Aksi menentukan tindakan terhadap permintaan yang cocok: mengembalikan respons tetap, mengalihkan, menyisipkan atau menghapus header, mencerminkan traffic, meneruskan ke beberapa grup server backend, atau menulis ulang permintaan.
Prasyarat
Sebelum memulai, pastikan bahwa:
ALB Ingress Controller versi 2.5.0 atau lebih baru telah diinstal di kluster Anda. Untuk informasi selengkapnya, lihat Kelola komponen.
Konfigurasi aturan routing kustom dari konsol ALB sedang dalam rilis canary. Untuk mengaktifkan fitur ini, submit a ticket
Kondisi routing
Konfigurasikan kondisi routing menggunakan anotasi alb.ingress.kubernetes.io/conditions.<service-name>. Nilai <service-name> harus sesuai dengan nama Service pada bidang backend dalam rules Ingress.
Logika kondisi:
Blok kondisi ganda dalam satu aturan: AND (semua blok harus cocok)
Nilai ganda dalam satu blok kondisi: OR (salah satu nilai cocok)
Satu aturan routing mendukung paling banyak 10 kondisi. Jenis kondisi ResponseHeader dan ResponseStatusCode hanya berlaku untuk aturan routing arah keluar.
Tabel berikut mencantumkan semua jenis kondisi yang tersedia beserta templat anotasinya.
| Kondisi | type nilai |
|---|---|
| Nama domain | Host |
| Path | Path |
| Header permintaan | Header |
| String kueri | QueryString |
| Metode permintaan | Method |
| Cookie | Cookie |
| IP sumber | SourceIp |
| Header respons (hanya arah keluar) | ResponseHeader |
| Kode status respons (hanya arah keluar) | ResponseStatusCode |
Referensi kondisi
Domain name
Mengarahkan permintaan yang ditujukan ke nama domain tertentu. Nilai ganda menggunakan logika OR.
alb.ingress.kubernetes.io/conditions.host-example: |
[{
"type": "Host",
"hostConfig": {
"values": [
"anno.example.com"
]
}
}]Path
Mengarahkan permintaan yang dikirim ke path tertentu. Nilai ganda menggunakan logika OR.
alb.ingress.kubernetes.io/conditions.path-example: |
[{
"type": "Path",
"pathConfig": {
"values": [
"/pathvalue1",
"/pathvalue2"
]
}
}]Header permintaan
Mengarahkan permintaan yang berisi pasangan kunci-nilai header tertentu. Nilai ganda untuk kunci yang sama menggunakan logika OR.
alb.ingress.kubernetes.io/conditions.http-header-example: |
[{
"type": "Header",
"headerConfig": {
"key": "headername",
"values": [
"headervalue1",
"headervalue2"
]
}
}]String kueri
Mengarahkan permintaan yang berisi pasangan kunci-nilai string kueri tertentu. Kunci dan nilai harus terdiri dari 1–100 karakter dan dapat berisi huruf kecil, karakter yang terlihat, *, dan ?. Spasi dan karakter # [] {} \ | <> & tidak diperbolehkan. Pasangan ganda menggunakan logika OR.
alb.ingress.kubernetes.io/conditions.query-string-example: |
[{
"type": "QueryString",
"queryStringConfig": {
"values": [
{
"key": "querystringkey1",
"value": "querystringvalue2"
}
]
}
}]Metode permintaan
Mengarahkan permintaan yang menggunakan metode HTTP tertentu. Metode yang didukung: GET, POST, PUT, DELETE, HEAD, OPTIONS, dan PATCH. Nilai ganda menggunakan logika OR.
alb.ingress.kubernetes.io/conditions.http-method-example: |
[{
"type": "Method",
"methodConfig": {
"values": [
"GET",
"HEAD"
]
}
}]Cookie
Mengarahkan permintaan yang berisi pasangan kunci-nilai cookie tertentu. Kunci dan nilai harus terdiri dari 1–100 karakter dan dapat berisi huruf kecil, karakter yang terlihat, *, dan ?. Spasi dan karakter # [] {} \ | <> & tidak diperbolehkan. Pasangan ganda menggunakan logika OR.
alb.ingress.kubernetes.io/conditions.http-cookie-example: |
[{
"type": "Cookie",
"cookieConfig": {
"values": [
{
"key": "cookiekey1",
"value": "cookievalue2"
}
]
}
}]IP sumber
Mengarahkan permintaan dari rentang alamat IP sumber tertentu. Nilai ganda menggunakan logika OR.
Satu aturan routing mendukung paling banyak lima alamat IP sumber.
alb.ingress.kubernetes.io/conditions.source-ip-example: |
[{
"type": "SourceIp",
"sourceIpConfig": {
"values": [
"192.168.0.0/16",
"172.16.0.0/16"
]
}
}]Header respons (hanya untuk aturan arah keluar)
Mencocokkan respons yang berisi header respons tertentu. Nilai ganda menggunakan logika OR.
alb.ingress.kubernetes.io/conditions.response-header-example: |
[{
"type": "ResponseHeader",
"headerConfig": {
"key": "headername",
"values": [
"headervalue1",
"headervalue2"
]
}
}]Response status code (hanya untuk aturan arah keluar)
Mencocokkan respons yang mengembalikan kode status HTTP tertentu. Nilai ganda menggunakan logika OR.
alb.ingress.kubernetes.io/conditions.response-code-example: |
[{
"type": "ResponseStatusCode",
"responseStatusCodeConfig": {
"values": [
"statuscode1",
"statuscode2"
]
}
}]Contoh kondisi
Arahkan traffic berdasarkan IP sumber dan header permintaan
Ingress berikut mengarahkan permintaan ke gray-hello hanya jika ketiga kondisi terpenuhi: IP sumber berada dalam 192.168.0.0/16 atau 172.16.0.0/16, nilai header gray-hello adalah value1 atau value2, dan path-nya adalah /hello. Permintaan lainnya dialihkan ke Service lain.
alb.ingress.kubernetes.io/order menetapkan prioritas Ingress — nilai lebih rendah memiliki prioritas lebih tinggi.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "1"
alb.ingress.kubernetes.io/conditions.gray-hello: |
[{
"type": "Header",
"headerConfig": {
"key": "gray-hello",
"values": [
"value1",
"value2"
]
}
},
{
"type": "SourceIp",
"sourceIpConfig": {
"values": [
"192.168.0.0/16",
"172.16.0.0/16"
]
}
}]
name: gray-hello
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
pathType: ImplementationSpecific
backend:
service:
name: gray-hello
port:
number: 88Arahkan traffic berdasarkan nama domain, metode permintaan, dan cookie
Ingress berikut mengarahkan permintaan ke service-a hanya jika semua kondisi cocok: domain adalah www.hostvalue1.edu atau www.hostvalue2.edu, metodenya adalah GET atau HEAD, cookie cookiekey1 bernilai cookievalue1, dan path-nya adalah /test. Permintaan lainnya dialihkan ke service-b.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: |
[{
"type": "Cookie",
"cookieConfig": {
"values": [
{
"key": "cookiekey1",
"value": "cookievalue1"
}
]
}
},
{
"type": "Method",
"methodConfig": {
"values": [
"GET",
"HEAD"
]
}
},
{
"type": "Host",
"hostConfig": {
"values": [
"www.hostvalue1.edu",
"www.hostvalue2.edu"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88Arahkan traffic berdasarkan string kueri, beberapa header permintaan, dan beberapa path
Ingress berikut mengarahkan permintaan ke service-a jika semua kondisi cocok: path adalah /pathvalue1, /pathvalue2, atau /test; string kueri querystringkey1 bernilai querystringvalue2; header headerkey1 bernilai headervalue1 atau headervalue2; dan header headerkey2 bernilai headervalue3 atau headervalue4. Permintaan lainnya dialihkan ke service-b.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: |
[{
"type": "Path",
"pathConfig": {
"values": [
"/pathvalue1",
"/pathvalue2"
]
}
},
{
"type": "QueryString",
"queryStringConfig": {
"values": [
{
"key": "querystringkey1",
"value": "querystringvalue2"
}
]
}
},
{
"type": "Header",
"headerConfig": {
"key": "headerkey1",
"values": [
"headervalue1",
"headervalue2"
]
}
},
{
"type": "Header",
"headerConfig": {
"key": "headerkey2",
"values": [
"headervalue3",
"headervalue4"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88Aksi routing
Konfigurasikan aksi routing menggunakan anotasi alb.ingress.kubernetes.io/actions.<service-name>. Nilai <service-name> harus sesuai dengan nama Service pada bidang backend dalam rules Ingress.
Dalam aturan routing yang sama, Anda tidak dapat menggabungkan beberapa aksi terminasi. Respons tetap, pengalihan, dan penerusan ke beberapa grup server backend saling eksklusif.
Saat menggunakan respons tetap, pengalihan, atau penerusan ke beberapa grup server backend, atur nama
servicePortpada bidangbackendmenjadiuse-annotation.
Aksi untuk aturan routing inbound
| Aksi | Deskripsi |
|---|---|
| Respons tetap | Mengembalikan konten tetap (kode status, tipe konten, dan badan) langsung ke client |
| Pengalihan | Mengalihkan permintaan menggunakan kode status HTTP 3xx |
| Sisipkan header permintaan | Menyisipkan atau menimpa header dalam permintaan |
| Hapus header permintaan | Menghapus header dari permintaan |
| Mirroring Lalu Lintas | Menyalin traffic ke grup server tertentu |
| Teruskan ke beberapa grup server backend | Mendistribusikan permintaan ke grup server berdasarkan bobot |
| Tulis ulang | Menulis ulang nama domain, path, atau string kueri |
| Pembatasan laju QPS | Membatasi laju permintaan secara global atau per IP client |
Aksi untuk aturan routing outbound
| Tindakan | Deskripsi |
|---|---|
| Sisipkan header respons | Menyisipkan atau menimpa header dalam respons |
| Hapus header respons | Menghapus header dari respons |
Contoh aksi
Kembalikan respons tetap dengan kode status 503
Gunakan konsol ACS
Login ke konsol ACS. Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, klik ID kluster target. Di panel navigasi sebelah kiri, pilih Network > Ingresses.
Pada halaman Ingresses, klik Create Ingress dan konfigurasikan parameter berikut.
Parameter Deskripsi Contoh Gateway type Pilih ALB atau MSE Ingress. ALB Application name Nama Ingress. ingressIngress class Kelas Ingress. albListener/Port Port dan protokol listener yang didefinisikan dalam AlbConfig. HTTP:80Rules Klik +Add Rule untuk mengonfigurasi nama domain, path, aturan pencocokan, Service, dan port. Nama domain: (kosong); Path: /; Aturan: Prefix; Service:response-503; Port:80TLS settings Aktifkan autentikasi TLS. Disabled Custom forwarding rules Klik +Add Rule untuk menambahkan kondisi dan aksi pengalihan. Maksimal 10 kondisi per aturan. Kondisi: Path (default); Aksi: Return fixed response — Kode status: 503, Tipe konten:text/plain, Konten:errorKlik OK.
kubectl
Ingress berikut mengembalikan kode status 503 dengan isi 503 error text untuk semua permintaan ke /.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.insert-header: |
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: insert-header
port:
number: 80Parameter FixedResponseConfig:
| Parameter | Deskripsi |
|---|---|
contentType | Tipe konten dari badan respons. Nilai yang valid: text/plain, text/css, text/html, application/javascript, application/json |
httpCode | Kode status HTTP yang dikembalikan ke client |
content | Isi badan respons |
Arahkan permintaan ke HTTPS menggunakan 301
Ingress berikut mengalihkan semua permintaan HTTP ke HTTPS menggunakan pengalihan permanen 301.
Setidaknya satu parameter pengalihan selain httpCode harus berbeda dari nilai default-nya.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.redirect: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "${host}",
"path": "${path}",
"port": "${port}",
"protocol": "https",
"query": "${query}",
"httpCode": "301"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: redirect
port:
name: use-annotation # Harus use-annotation untuk aksi pengalihanParameter RedirectConfig:
| Parameter | Deskripsi |
|---|---|
host | Nama domain tujuan pengalihan. Gunakan ${host} untuk mempertahankan aslinya. |
path | Path tujuan pengalihan. Gunakan ${path} untuk mempertahankan aslinya. |
port | Port tujuan pengalihan. Gunakan ${port} untuk mempertahankan aslinya. |
protocol | Protokol permintaan yang dialihkan (misalnya, https). Gunakan ${protocol} untuk mempertahankan aslinya. |
query | String kueri permintaan yang dialihkan. Gunakan ${query} untuk mempertahankan aslinya. |
httpCode | Kode status HTTP untuk pengalihan (misalnya, 301, 302). |
Sisipkan header permintaan
Ingress berikut menyisipkan header source: alibaba ke semua permintaan sebelum meneruskannya ke backend. Jika header tersebut sudah ada, nilainya akan ditimpa.
Nama Service dalam anotasi harus sesuai dengan nama Service pada bidang backend.apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.insert-header: |
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: insert-header
port:
number: 80Cerminkan traffic ke grup server
Ingress berikut mencerminkan semua traffic yang cocok dengan demo.domain.ingress.top/test ke grup server tertentu sambil tetap meneruskan permintaan aslinya secara normal.
Pencerminan traffic dapat digabungkan dengan aksi forward, sisipkan header, hapus header, dan pembatasan laju QPS. Aksi ini saling eksklusif dengan aksi rewrite, respons tetap, dan pengalihan.
Tentukan grup server target hanya menggunakan
ServerGroupID.
Untuk mendapatkan ID grup server, login ke konsol Server Load Balancer (SLB), pilih ALB > Server Groups, lalu temukan ID-nya di halaman Server Groups.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traffic-mirror-ingress
annotations:
# Nama Service dalam anotasi harus sesuai dengan nama Service pada bidang backend.
alb.ingress.kubernetes.io/actions.traffic-mirror: |
[{
"type": "TrafficMirror",
"TrafficMirrorConfig": {
"TargetType": "ForwardGroupMirror",
"MirrorGroupConfig": {
"ServerGroupTuples": [{
"ServerGroupID": "sgp-2auud2fxj1r46*****"
}]
}
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: traffic-mirror
port:
number: 80Teruskan permintaan ke beberapa grup server backend
Distribusikan permintaan ke beberapa grup server backend berdasarkan bobot.
Instans ALB standar mendukung paling banyak lima grup server backend.
Jika
ServerGroupIDdanServiceName/ServicePortdiatur untuk entri yang sama,ServerGroupIDmemiliki prioritas lebih tinggi.
Gunakan konsol ACS
Login ke konsol ACS. Di panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, klik ID kluster target. Di panel navigasi sebelah kiri, pilih Network > Ingresses.
Pada halaman Ingresses, klik Create Ingress dan konfigurasikan parameter berikut.
Jika Anda memilih Forward To sebagai aksi, Anda tidak perlu mengonfigurasi parameter Mappings di bagian Rules. Kluster yang menggunakan komponen Flannel tidak mendukung Service ClusterIP.
Parameter Deskripsi Contoh Gateway type Pilih ALB atau MSE Ingress. ALB Application name Nama Ingress. forward-ingressIngress class Kelas Ingress. albListener/Port Port dan protokol listener. HTTP:80Rules Klik +Add Rule untuk mengatur nama domain, path, Service, dan port. Nama domain: demo.domain.ingress.top; Path:/path; Aturan: Prefix; Service:forward; Port:80TLS settings Aktifkan autentikasi TLS. Disabled Custom forwarding rules Kondisi: Domain name = demo.domain.ingress.top. Aksi: Forward to — Service:tea-svc, Port:80, Bobot:80; tambahkan Service kedua:coffee-svc, Port:80, Bobot:20.Lihat contoh nilai Klik OK.
kubectl
Ingress berikut mendistribusikan permintaan yang cocok dengan demo.domain.ingress.top/path ke tea-svc (bobot 80) dan coffee-svc (bobot 20).
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: forward-ingress
annotations:
# Nama Service dalam anotasi harus sesuai dengan nama Service pada bidang backend.
alb.ingress.kubernetes.io/actions.forward: |
[{
"type": "ForwardGroup",
"ForwardConfig": {
"ServerGroups": [{
"ServiceName": "tea-svc",
"Weight": 80,
"ServicePort": 80
},
{
"ServiceName": "coffee-svc",
"Weight": 20,
"ServicePort": 80
}]
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /path
pathType: Prefix
backend:
service:
name: forward
port:
name: use-annotation # Harus use-annotation untuk aksi forwardUntuk mereferensikan grup server yang sudah ada berdasarkan ID alih-alih nama Service, gunakan ServerGroupID dan Weight:
alb.ingress.kubernetes.io/actions.forward: |
[{
"type": "ForwardGroup",
"ForwardConfig": {
"ServerGroups": [{
"ServerGroupID": "sgp-71aexb9y93ypo*****",
"Weight": 80
},
{
"ServerGroupID": "sgp-slygpbvm2cydo*****",
"Weight": 20
}]
}
}]Tulis ulang nama domain, path, atau string kueri
Ingress berikut menulis ulang nama domain menjadi demo.domain.ingress.top, path menjadi /test, dan string kueri menjadi querystring untuk semua permintaan yang cocok dengan /path.
Aksi rewrite bertentangan dengan anotasi
rewrite-target. Jangan gunakan keduanya sekaligus.Rewrite tidak dapat digabungkan dengan aksi respons tetap atau pengalihan.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/actions.rewrite: |
[{
"type": "Rewrite",
"RewriteConfig": {
"Host": "demo.domain.ingress.top",
"Path": "/test",
"Query": "querystring"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /path
pathType: Prefix
backend:
service:
name: rewrite
port:
number: 80Untuk informasi selengkapnya tentang aturan rewrite, lihat Konfigurasi aturan penulisan ulang.
Modifikasi header respons berdasarkan nilai header respons
Secara default, aturan routing kustom berlaku untuk lalu lintas masuk. Untuk menerapkan aturan pada lalu lintas keluar (respons), atur alb.ingress.kubernetes.io/rule-direction.<service-name> menjadi Response.
Untuk aturan routing arah keluar, atur nama servicePort pada bidang backend menjadi use-annotation.
Ingress berikut menyisipkan header source: alibaba ke respons ketika respons tersebut sudah berisi header response-hello dengan nilai value1 atau value2.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-header: Response
alb.ingress.kubernetes.io/conditions.response-header: |
[{
"type": "ResponseHeader",
"responseHeaderConfig": {
"key": "response-hello",
"values": [
"value1",
"value2"
]
}
}]
alb.ingress.kubernetes.io/actions.response-header: |
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
name: response-header
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: response-header
port:
name: use-annotation # Harus use-annotation untuk aturan routing arah keluarHapus header respons berdasarkan kode status respons
Ingress berikut menghapus header response-hello dari respons yang mengembalikan kode status 200 atau 300.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-hello: Response
alb.ingress.kubernetes.io/conditions.response-hello: |
[{
"type": "ResponseStatusCode",
"responseStatusCodeConfig": {
"values": [
"200",
"300"
]
}
}]
alb.ingress.kubernetes.io/actions.response-hello: |
[{
"type": "RemoveHeader",
"RemoveHeaderConfig": {
"key": "response-hello"
}
}]
name: response-hello
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: response-hello
port:
name: use-annotation # Harus use-annotation untuk aturan routing arah keluarBatasi laju permintaan dengan Pembatasan laju QPS
Tetapkan batas laju permintaan global, batas laju per IP client, atau keduanya. Aksi Pembatasan laju QPS harus digabungkan dengan aksi forward.
Nilai yang valid untuk
QPSdanQPSPerIp: 1 hingga 1.000.000.Jika
QPSdanQPSPerIpdiatur,QPSPerIpharus lebih kecil dariQPS.Saat batas laju terlampaui, instans ALB menolak koneksi baru dan mengembalikan HTTP 503.
Untuk menggunakan
QPSPerIp(pembatasan laju per IP), aktifkan opsi untuk mengambil alamat IP client di halaman detail listener agar instans ALB dapat membaca headerX-Forwarded-For. Untuk informasi selengkapnya, lihat XForwardedForConfig.
annotations:
alb.ingress.kubernetes.io/actions.traffic-limit: |
[{
"type": "TrafficLimit",
"TrafficLimitConfig": {
"QPS": "1000",
"QPSPerIp": "100"
}
}]| Parameter | Deskripsi |
|---|---|
QPS | Batas laju permintaan global (permintaan per detik). Saat terlampaui, koneksi baru ditolak dan HTTP 503 dikembalikan. |
QPSPerIp | Batas laju permintaan per IP client (permintaan per detik). Harus lebih kecil dari QPS jika keduanya diatur. Saat terlampaui, koneksi baru ditolak dan HTTP 503 dikembalikan. |