Application Load Balancer (ALB) Ingress adalah objek API yang menyediakan load balancing lapisan 7 untuk mengelola akses eksternal ke Layanan dalam kluster Kubernetes. Topik ini menjelaskan cara menggunakan ALB Ingress di kluster Container Compute Service (ACS) Alibaba Cloud untuk meneruskan permintaan ke grup server backend berdasarkan nama domain dan jalur URL, mengarahkan permintaan HTTP ke HTTPS, serta melaksanakan rilis canary.
Prasyarat
Sebuah kluster ACS telah dibuat. Untuk informasi lebih lanjut, lihat Create an ACS cluster.
Sebuah objek AlbConfig telah dibuat. Untuk informasi lebih lanjut, lihat Getting started with ALB Ingress.
Meneruskan permintaan berdasarkan nama domain
Ikuti langkah-langkah berikut untuk membuat Ingress dengan nama domain dan Ingress tanpa nama domain, lalu gunakan Ingress tersebut untuk meneruskan permintaan.
Penerusan Permintaan Berdasarkan Domain Normal
Gunakan templat berikut untuk membuat Deployment, Service, dan Ingress. Permintaan ke nama domain dari Ingress akan diteruskan ke 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: ImplementationSpecificJalankan perintah berikut untuk mengakses aplikasi menggunakan nama domain yang ditentukan.
Ganti ADDRESS dengan nama domain dari instans ALB, yang dapat Anda ambil dengan menjalankan perintah
kubectl get ing.curl -H "host: demo.domain.ingress.top" <ADDRESS>/helloKeluaran yang diharapkan:
{"hello":"coffee"}
Buat Ingress tanpa nama domain
Templat berikut menunjukkan konfigurasi dari Ingress:
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: /helloJalankan perintah berikut untuk mengakses aplikasi menggunakan nama domain.
Ganti ADDRESS dengan nama domain dari instans ALB. Anda bisa mendapatkan nama domain ini dengan menjalankan perintah
kubectl get ing.curl <ADDRESS>/helloKeluaran yang diharapkan:
{"hello":"coffee"}
Meneruskan permintaan berdasarkan jalur URL
Ingress ALB dapat meneruskan permintaan berdasarkan jalur URL. Anda dapat mengatur bidang pathType untuk menentukan kebijakan pencocokan URL. pathType mendukung tiga jenis pencocokan: Exact, ImplementationSpecific (default), dan Prefix.
Kebijakan pencocokan URL mungkin saling bertentangan. Saat terdapat kebijakan pencocokan URL yang bertentangan, permintaan akan dicocokkan dengan kebijakan-kebijakan tersebut berdasarkan urutan prioritas kebijakan secara menurun. Untuk informasi lebih lanjut, lihat Konfigurasikan prioritas aturan pengalihan.
Mode pencocokan | Aturan | Jalur URL | Apakah jalur URL cocok dengan aturan |
Prefix | / | (Semua jalur) | Ya |
Prefix | /foo |
| Ya |
Prefix | /foo/ |
| Ya |
Prefix | /aaa/bb | /aaa/bbb | Tidak |
Prefix | /aaa/bbb | /aaa/bbb | Ya |
Prefix | /aaa/bbb/ | /aaa/bbb | Ya. Jalur URL mengabaikan garis miring (/) di akhir aturan. |
Prefix | /aaa/bbb | /aaa/bbb/ | Ya. Aturan mencocokkan garis miring (/) di akhir jalur URL. |
Prefix | /aaa/bbb | /aaa/bbb/ccc | Ya. Aturan mencocokkan subjalur dari jalur URL. |
Prefix | Konfigurasikan dua aturan secara bersamaan:
| /aaa/ccc | Ya. Jalur permintaan cocok dengan awalan |
Prefix | Konfigurasikan dua aturan secara bersamaan:
| /aaa/ccc | Ya. Jalur permintaan cocok dengan awalan |
Prefix | Konfigurasikan dua aturan secara bersamaan:
| /ccc | Ya. Jalur permintaan cocok dengan 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 |
Berikut adalah contoh dari ketiga metode pencocokan:
Exact
Templat berikut menunjukkan konfigurasi Ingress:
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: ExactJalankan perintah berikut untuk mengakses aplikasi.
Ganti ADDRESS dengan nama domain instans ALB. Anda dapat menjalankan perintah
kubectl get inguntuk mendapatkan nama domain.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
ImplementationSpecific: kebijakan pencocokan default
Dalam Ingress ALB, kebijakan ini ditangani dengan cara yang sama seperti kebijakan Exact.
Templat berikut menunjukkan konfigurasi Ingress:
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: ImplementationSpecificJalankan perintah berikut untuk mengakses aplikasi.
Ganti ADDRESS dengan nama domain instans ALB, yang dapat Anda peroleh dengan menjalankan perintah
kubectl get ing.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Prefix
Kebijakan ini melakukan pencocokan awalan yang sensitif terhadap huruf besar/kecil pada elemen jalur URL yang dibatasi oleh /.
Templat berikut menunjukkan konfigurasi Ingress:
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: PrefixJalankan perintah berikut untuk mengakses aplikasi.
Ganti ADDRESS dengan nama domain instans ALB, yang dapat Anda peroleh dengan menjalankan perintah
kubectl get ing.curl <ADDRESS>/helloOutput yang diharapkan:
{"hello":"coffee"}
Konfigurasi pemeriksaan kesehatan
Anda dapat mengonfigurasi pemeriksaan kesehatan untuk Ingress ALB menggunakan anotasi berikut. Templat YAML berikut memberikan contoh cara membuat Ingress dengan pemeriksaan kesehatan yang diaktifkan.
Tembakan YAML berikut memberikan contoh cara membuat Ingress yang memiliki pemeriksaan kesehatan diaktifkan:
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-method: "HEAD"
alb.ingress.kubernetes.io/healthcheck-httpcode: "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:
ingressClassName: alb
rules:
- http:
paths:
# Konfigurasikan jalur konteks.
- path: /tea
backend:
service:
name: tea-svc
port:
number: 80
# Konfigurasikan jalur konteks.
- path: /coffee
backend:
service:
name: coffee-svc
port:
number: 80Tabel berikut menjelaskan parameter dalam templat YAML.
Parameter | Deskripsi |
alb.ingress.kubernetes.io/healthcheck-enabled | (Opsional) Menentukan apakah akan mengaktifkan pemeriksaan kesehatan. Secara default, fitur ini dinonaktifkan (false). |
alb.ingress.kubernetes.io/healthcheck-path | Opsional. Jalur URL berdasarkan mana pemeriksaan kesehatan dilakukan. Nilai default: /.
|
alb.ingress.kubernetes.io/healthcheck-protocol | Opsional. Protokol yang digunakan untuk pemeriksaan kesehatan.
|
alb.ingress.kubernetes.io/healthcheck-method | Opsional. Metode permintaan yang digunakan untuk pemeriksaan kesehatan.
|
alb.ingress.kubernetes.io/healthcheck-httpcode | Kode status yang dikembalikan ketika server backend lulus pemeriksaan kesehatan. Nilai valid: http_2xx (default), http_3xx, http_4xx, dan http_5xx. |
alb.ingress.kubernetes.io/healthcheck-timeout-seconds | Periode waktu habis untuk pemeriksaan kesehatan. Jika server backend tidak merespons dalam periode waktu habis yang ditentukan, server gagal melewati pemeriksaan kesehatan. Nilai valid: 1 hingga 300. Nilai default: 5. Unit: detik. |
alb.ingress.kubernetes.io/healthcheck-interval-seconds | Interval antara dua pemeriksaan kesehatan berturut-turut. Unit: detik. Nilai valid: 1 hingga 50. Nilai default: 2. Unit: detik. |
alb.ingress.kubernetes.io/healthy-threshold-count | Jumlah kali server backend yang tidak sehat harus secara berturut-turut lulus pemeriksaan kesehatan sebelum server dianggap sehat. Nilai valid: 2 hingga 10. Nilai default: 3. |
alb.ingress.kubernetes.io/unhealthy-threshold-count | Jumlah kali server backend yang sehat harus secara berturut-turut gagal pemeriksaan kesehatan sebelum server dianggap tidak sehat. Nilai valid: 2 hingga 10. Nilai default: 3. |
Konfigurasikan pengalihan dari permintaan HTTP ke permintaan HTTPS
Anda dapat menyetel anotasi alb.ingress.kubernetes.io/ssl-redirect: "true" dalam Ingress ALB untuk mengarahkan ulang permintaan HTTP ke Port HTTPS 443.
Anda tidak dapat membuat pendengar menggunakan Ingress ALB. Untuk memastikan bahwa Ingress ALB dapat bekerja sesuai harapan, Anda perlu menentukan port dan protokol pendengar dalam AlbConfig, lalu mengaitkan pendengar dengan Layanan di Ingress ALB. Untuk informasi lebih lanjut tentang cara membuat pendengar ALB, lihat Gunakan AlbConfigs untuk mengonfigurasi pendengar ALB.
Contoh:
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: Penyebaran
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: PrefixKonfigurasikan HTTPS atau gRPC sebagai protokol backend
ALB mendukung HTTPS dan gRPC sebagai protokol backend. Untuk mengonfigurasi protokol backend untuk Ingress ALB, Anda hanya perlu menyetel alb.ingress.kubernetes.io/backend-protocol: "grpc" atau alb.ingress.kubernetes.io/backend-protocol: "https" anotasi. Untuk menggunakan Ingress guna meneruskan layanan gRPC, nama domain yang sesuai harus memiliki Sertifikat SSL dan menggunakan protokol TLS. Contoh berikut menunjukkan konfigurasi sampel untuk protokol gRPC:
Anda tidak dapat memodifikasi protokol backend. Untuk mengubah protokol, hapus dan bangun kembali Ingress.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/backend-protocol: "grpc"
name: lxd-grpc-ingress
spec:
ingressClassName: alb
tls:
- hosts:
- demo.alb.ingress.top
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grpc-demo-svc
port:
number: 9080Konfigurasikan ekspresi reguler
Untuk mengonfigurasi kondisi penerusan kustom, Anda dapat menulis ekspresi reguler di dalam bidang path. Contoh berikut menunjukkan konfigurasi sampel:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # Mendukung ekspresi reguler di dalam bidang path.
alb.ingress.kubernetes.io/conditions.service-a: | # Service yang ditentukan dalam anotasi harus merupakan Service yang ada di dalam kluster, dan nama Service harus sama dengan nama Service di backend dari bidang aturan.
[{
"type": "Path",
"pathConfig": {
"values": [
"~*^/pathvalue1", # Ekspresi reguler harus mengikuti tanda ekspresi reguler ~ *.
"/pathvalue2" # Tidak perlu menambahkan ~ * sebelum path untuk kecocokan eksak.
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: service-a
port:
number: 88Konfigurasikan aturan penulisan ulang
ALB mendukung fitur penulisan ulang. Untuk mengonfigurasi fitur ini untuk Ingress ALB, tambahkan anotasi alb.ingress.kubernetes.io/rewrite-target: /path/${2}. Aturan berikut berlaku:
Dalam anotasi
rewrite-target, variabel dalam format${number}harus dikonfigurasi padapathyang pathType-nya diatur ke Prefix.Secara default, Anda tidak dapat menggunakan simbol ekspresi reguler, seperti
*dan?, di dalam bidangpath. Anda harus mengonfigurasi anotasirewrite-targetuntuk menggunakan simbol ekspresi reguler.pathharus dimulai dengan/.
Jika Anda ingin menentukan ekspresi reguler dalam aturan penulisan ulang, perhatikan hal-hal berikut:
Anda dapat menulis satu atau lebih ekspresi reguler yang berisi beberapa set tanda kurung
()di dalam bidangpathdari sebuah Ingress. Namun, jalur penulisan ulang dalam anotasirewrite-targetdapat menggunakan maksimal tiga variabel:${1},${2}, dan${3}.Variabel yang cocok dengan ekspresi reguler digabungkan untuk membentuk jalur yang menimpa jalur aslinya.
Logika untuk menulis ulang dengan penggantian ekspresi reguler adalah sebagai berikut: Permintaan Klien cocok dengan ekspresi reguler yang berisi beberapa set tanda kurung
(), dan anotasirewrite-targetberisi satu atau lebih dari variabel${1},${2}, dan${3}.
Sebagai contoh, jika path dari sebuah Ingress diatur ke /sys/(.*)/(.*)/aaa dan anotasi rewrite-target diatur ke /${1}/${2}, ketika Klien mengirim permintaan ke jalur /sys/ccc/bbb/aaa, path cocok dengan /sys/(.*)/(.*)/aaa. Anotasi rewrite-target mengganti ${1} dengan ccc dan ${2} dengan bbb. Jalur permintaan akhir yang diterima oleh server backend adalah /ccc/bbb.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # Mendukung ekspresi reguler di dalam bidang path.
alb.ingress.kubernetes.io/rewrite-target: /path/${2} # Variabel yang cocok dengan ekspresi reguler digabungkan untuk membentuk jalur yang menimpa jalur aslinya.
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: 9080Konfigurasikan port mendengarkan kustom
ALB Ingress memungkinkan Anda mengonfigurasi port mendengarkan kustom. Ini memungkinkan Anda mengekspos layanan melalui port 80 dan 443 secara bersamaan.
Anda tidak dapat membuat Pendengar menggunakan ALB Ingress. Untuk memastikan bahwa ALB Ingress dapat bekerja seperti yang diharapkan, Anda perlu menentukan port dan protokol dari Pendengar dalam AlbConfig, lalu mengaitkan Pendengar dengan Layanan di ALB Ingress. Untuk informasi lebih lanjut tentang cara membuat Pendengar ALB, lihat Gunakan AlbConfigs untuk mengonfigurasi Pendengar ALB.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' # Mengonfigurasi port mendengarkan kustom
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: 80Konfigurasikan prioritas aturan pengalihan
Secara default, aturan pengalihan diprioritaskan berdasarkan aturan berikut:
Ingress diurutkan berdasarkan urutan leksikografis dari
namespace/name. Nilai yang lebih kecil menunjukkan prioritas yang lebih tinggi.Di dalam Ingress yang sama, aturan diurutkan berdasarkan urutan mereka di dalam bidang
rule. Aturan yang dikonfigurasi lebih awal memiliki prioritas yang lebih tinggi.
Jika Anda tidak ingin memodifikasi namespace/name dari Ingress, Anda dapat mengonfigurasi anotasi Ingress berikut untuk menentukan prioritas aturan pengalihan:
Prioritas aturan harus unik di dalam Pendengar yang sama. Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/order untuk menentukan prioritas sebuah Ingress. Nilainya harus berupa bilangan bulat dari 1 hingga 1.000. Nilai yang lebih kecil menunjukkan prioritas yang lebih tinggi. Prioritas default adalah 10. Untuk memberikan prioritas yang lebih tinggi, tentukan nilai yang lebih kecil.
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: 80Gunakan anotasi untuk melakukan rilis bertahap
ALB menyediakan kemampuan pengarahan lalu lintas yang kompleks dan mendukung rilis canary berdasarkan header, cookie, dan bobot. Anda dapat mengimplementasikan rilis canary dengan menyetel anotasi. Untuk mengaktifkan rilis canary, Anda harus menyetel anotasi alb.ingress.kubernetes.io/canary: "true". Anda dapat menggunakan anotasi yang berbeda untuk mengimplementasikan fitur rilis canary yang berbeda:
Rilis canary yang menggunakan aturan berbeda berlaku dalam urutan berikut: berbasis header > berbasis cookie > berbasis bobot.
Saat Anda melakukan rilis canary untuk menguji versi aplikasi baru, jangan ubah aturan Ingress asli. Jika tidak, akses ke aplikasi mungkin terganggu. Setelah versi aplikasi baru lolos uji, ganti layanan Backend yang digunakan oleh versi aplikasi sebelumnya dengan layanan Backend yang digunakan oleh versi aplikasi baru. Kemudian, hapus aturan Ingress untuk mengimplementasikan rilis canary.
alb.ingress.kubernetes.io/canary-by-headerdanalb.ingress.kubernetes.io/canary-by-header-value: Aturan ini menentukan nilai dari header permintaan dan harus digunakan bersama denganalb.ingress.kubernetes.io/canary-by-header.Jika
headerdanheader-valuedalam permintaan cocok dengan nilai yang ditetapkan, permintaan dialokasikan ke titik akhir layanan rilis bertahap.Untuk nilai
headerlainnya,headerdiabaikan, dan lalu lintas permintaan dialokasikan berdasarkan prioritas rilis bertahap ke layanan rilis bertahap yang ditetapkan oleh aturan lain.
Jika header permintaan adalah
location: hz, permintaan diarahkan ke layanan rilis canary. Permintaan dengan header lainnya diarahkan berdasarkan bobot rilis canary. Contoh berikut menunjukkan konfigurasi sampel: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: ImplementationSpecificalb.ingress.kubernetes.io/canary-by-cookie: Membagi lalu lintas berdasarkan cookie.Jika nilai
cookiedisetel kealways, lalu lintas permintaan dialokasikan ke titik akhir layanan rilis bertahap.Jika nilai
cookiedisetel kenever, lalu lintas permintaan tidak dialokasikan ke titik akhir layanan rilis bertahap.
CatatanRilis canary berbasis cookie hanya mendukung nilai
alwaysdannever. Nilai kustom tidak didukung.Jika cookie permintaan adalah
demo=always, permintaan diarahkan ke layanan rilis canary. Contoh berikut menunjukkan konfigurasi sampel: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: ImplementationSpecificalb.ingress.kubernetes.io/canary-weight: Menentukan persentase permintaan yang diarahkan ke layanan canary. Nilainya harus berupa bilangan bulat dari 0 hingga 100.Dalam contoh berikut, persentase permintaan yang diarahkan ke versi aplikasi baru disetel menjadi 50%:
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: ImplementationSpecific
Konfigurasikan persistensi sesi menggunakan anotasi
Ingress ALB memungkinkan Anda mengonfigurasi persistensi sesi menggunakan anotasi berikut:
alb.ingress.kubernetes.io/sticky-session: Menentukan apakah akan mengaktifkan persistensi sesi. Nilai yang valid:trueataufalse. Nilai default:false.alb.ingress.kubernetes.io/sticky-session-type: Metode untuk menangani cookie. Nilai yang valid:InsertatauServer. Nilai default:Insert.Insert: Menyisipkan cookie. Ketika klien mengirim permintaan pertama, Server Load Balancer menyisipkan cookie (SERVERID) ke dalam tanggapan. Ketika klien mengirim permintaan berikutnya dengan cookie ini, Server Load Balancer meneruskan permintaan ke server backend yang sebelumnya tercatat.Server: Menulis ulang cookie. Ketika Server Load Balancer menemukan cookie yang ditentukan pengguna, ia menulis ulang cookie aslinya. Ketika klien mengirim permintaan berikutnya dengan cookie baru, Server Load Balancer meneruskan permintaan ke server backend yang sebelumnya tercatat.
CatatanParameter ini hanya berlaku ketika
StickySessionEnableddiatur ketrueuntuk kelompok server.alb.ingress.kubernetes.io/cookie-timeout: Periode waktu habis cookie dalam detik. Anda dapat menentukan bilangan bulat dari 1 hingga 86.400. Nilai default adalah1000.
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:
# Konfigurasikan jalur konteks.
- path: /tea2
backend:
service:
name: tea-svc
port:
number: 80
# Konfigurasikan jalur konteks.
- path: /coffee2
backend:
service:
name: coffee-svc
port:
number: 80Tentukan algoritma penyeimbangan beban untuk kelompok server backend
Ingress ALB memungkinkan Anda menentukan algoritma penyeimbangan beban untuk sebuah kelompok server dengan mengatur anotasi Ingress alb.ingress.kubernetes.io/backend-scheduler. Contoh berikut menunjukkan konfigurasi sampel. Secara default, versi kluster harus 1.19 atau lebih baru:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/backend-scheduler: "uch" # Ganti uch dengan wrr, sch, atau wlc sesuai kebutuhan.
alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # Parameter ini hanya diperlukan jika algoritma penyeimbangan beban adalah uch. Anda tidak perlu mengonfigurasi parameter ini jika algoritma penjadwalan adalah wrr, sch, atau wlc.
name: cafe-ingress
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80Nilai-nilai berikut didukung untuk anotasi alb.ingress.kubernetes.io/backend-scheduler:
wrr: Ini adalah nilai default. Permintaan didistribusikan ke server backend berdasarkan bobotnya. Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan.wlc: Permintaan didistribusikan ke server backend berdasarkan bobot dan jumlah koneksi yang ada. Jika server backend memiliki bobot yang sama, server dengan koneksi paling sedikit akan dipilih.sch: Permintaan dari alamat IP sumber yang sama diarahkan ke server backend yang sama.uch: Permintaan yang berisi parameter URL yang sama diarahkan ke server backend yang sama. Jika Anda mengatur algoritma penjadwalan menjadiuch, Anda dapat menggunakan anotasialb.ingress.kubernetes.io/backend-scheduler-uch-valueuntuk menentukan parameter URL untuk penghashan konsisten.
Konfigurasi CORS
Blok kode berikut menunjukkan contoh konfigurasi Cross-origin Resource Sharing (CORS) yang didukung oleh Ingress ALB:
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: 80Parameter | Deskripsi |
| URL yang dapat digunakan untuk mengakses sumber daya di server asal menggunakan browser. Pisahkan beberapa URL dengan koma (,). Setiap URL harus dimulai dengan http:// atau https:// dan berisi nama domain yang valid atau nama domain wildcard tingkat atas. Nilai default: |
| Metode HTTP yang diizinkan. Nilai tidak peka huruf besar/kecil. Pisahkan beberapa metode HTTP dengan koma (,). Nilai default: |
| Header permintaan yang diizinkan. Header permintaan dapat berisi huruf, angka, garis bawah (_), dan tanda hubung (-). Pisahkan beberapa header permintaan dengan koma (,). Nilai default: |
| Header yang dapat diekspos. Header dapat berisi huruf, angka, garis bawah (_), tanda hubung (-), dan tanda bintang (*). Pisahkan beberapa header dengan koma (,). Nilai default: |
| Menentukan apakah akan menyertakan kredensial dalam permintaan CORS. Nilai default: |
| Jangka waktu maksimum selama permintaan preflight yang menggunakan metode OPTIONS dapat disimpan dalam cache. Konfigurasikan parameter ini untuk permintaan kompleks. Nilai valid: -1 hingga 172.800. Satuan: detik. Nilai default: |
Koneksi persisten Backend
Load balancer tradisional menggunakan koneksi singkat untuk mengakses kelompok server backend. Setiap permintaan memerlukan pembuatan koneksi TCP baru yang kemudian dihentikan. Hal ini dapat menciptakan hambatan konektivitas jaringan pada sistem berkinerja-tinggi. Server Load Balancer mendukung koneksi persisten ke server backend. Fitur ini mengurangi konsumsi sumber daya pada lapisan koneksi dan secara signifikan meningkatkan kinerja pemrosesan. Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/backend-keepalive untuk mengaktifkan koneksi persisten pada Ingress ALB. Contoh berikut menunjukkan konfigurasi sampel:
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 QPS
ALB mendukung pembatasan queries per second (QPS) untuk aturan pengalihan. Nilai pembatasan harus berupa bilangan bulat dari 1 hingga 100.000. Untuk Ingress ALB, Anda hanya perlu mengatur alb.ingress.kubernetes.io/traffic-limit-qps Anotasi. Contoh berikut menunjukkan konfigurasi sampel:
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