Ingress adalah objek API yang digunakan untuk menyediakan layanan penyeimbangan beban lapisan 7 guna mengelola akses eksternal ke Layanan di dalam ACK Serverless cluster. Topik ini menjelaskan cara menggunakan Application Load Balancer (ALB) Ingresses untuk meneruskan permintaan ke grup server backend berdasarkan nama domain dan jalur URL, mengarahkan ulang permintaan HTTP ke HTTPS, serta melaksanakan rilis canary.
Daftar isi
Prasyarat
Sebuah ACK Serverless cluster telah dibuat. Anda harus mengonfigurasi NAT gateway untuk virtual private cloud (VPC) tempat klaster dibuat agar klaster dapat mengunduh gambar kontainer dari Internet. Untuk informasi lebih lanjut, lihat Panduan Cepat ACK Serverless.
Klien kubectl terhubung ke klaster ASK. Untuk informasi lebih lanjut, lihat Hubungkan ke Klaster ACK Menggunakan kubectl.
Sebuah AlbConfig telah dibuat. Untuk informasi lebih lanjut, lihat Buat Sebuah AlbConfig.
Teruskan permintaan berdasarkan nama domain
Lakukan langkah-langkah berikut untuk membuat Ingress dengan nama domain dan Ingress tanpa nama domain, lalu gunakan Ingress tersebut untuk meneruskan permintaan.
Nama domain valid
Gunakan template berikut untuk membuat Deployment, Service, dan Ingress. Permintaan ke nama domain Ingress akan diteruskan ke Service.
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: NodePort --- 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: ImplementationSpecificKlaster yang menjalankan versi Kubernetes sebelum 1.19
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: NodePort --- 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/v1beta1 kind: Ingress metadata: name: demo namespace: default spec: ingressClassName: alb rules: - host: demo.domain.ingress.top http: paths: - backend: serviceName: demo-service servicePort: 80 path: /hello pathType: ImplementationSpecificJalankan perintah berikut untuk mengakses aplikasi menggunakan nama domain tertentu.
Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah
kubectl get ing.curl -H "host: demo.domain.ingress.top" <ADDRESS>/helloOutput yang Diharapkan:
{"hello":"coffee"}
Nama domain kosong
Template berikut menunjukkan konfigurasi Ingress:
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: /hello pathType: ImplementationSpecificKlaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: demo namespace: default spec: ingressClassName: alb rules: - host: "" http: paths: - backend: serviceName: demo-service servicePort: 80 path: /hello pathType: ImplementationSpecificJalankan perintah berikut untuk mengakses aplikasi tanpa menggunakan nama domain.
Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah
kubectl get ing.curl <ADDRESS>/helloOutput yang Diharapkan:
{"hello":"coffee"}
Teruskan permintaan berdasarkan jalur URL
ALB Ingresses dapat meneruskan permintaan berdasarkan jalur URL. Anda dapat menggunakan parameter pathType untuk mengonfigurasi kebijakan pencocokan URL yang berbeda. Nilai valid dari pathType adalah Exact, ImplementationSpecific, dan Prefix.
Kebijakan pencocokan URL mungkin bertentangan satu sama lain. Saat kebijakan pencocokan URL yang bertentangan ada, permintaan dicocokkan dengan kebijakan dalam urutan prioritas kebijakan 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 URL cocok dengan aturan |
Prefix | Konfigurasikan dua aturan secara bersamaan:
| /aaa/ccc | Ya. Jalur URL cocok dengan aturan |
Prefix | Konfigurasikan dua aturan secara bersamaan:
| /ccc | Ya. Jalur URL cocok dengan aturan |
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 |
Anda dapat melakukan langkah-langkah berikut untuk mengonfigurasi kebijakan pencocokan URL yang berbeda.
Exact
Template berikut menunjukkan konfigurasi Ingress:
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: ExactKlaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: demo-path namespace: default spec: ingressClassName: alb rules: - http: paths: - path: /hello backend: serviceName: demo-service servicePort: 80 pathType: ExactJalankan perintah berikut untuk mengakses aplikasi.
Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah
kubectl get ing.curl <ADDRESS>/helloOutput yang Diharapkan:
{"hello":"coffee"}
ImplementationSpecific: kebijakan pencocokan default
Konfigurasi ALB Ingress sama dengan kebijakan pencocokan Exact.
Template berikut menunjukkan konfigurasi Ingress:
Jalankan perintah berikut untuk mengakses aplikasi.
Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah
kubectl get ing.
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: ImplementationSpecificKlaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo-path
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
pathType: ImplementationSpecificcurl <ADDRESS>/helloOutput yang Diharapkan:
{"hello":"coffee"}Prefix
Cocokkan awalan tertentu dengan jalur URL. Elemen dalam jalur URL dipisahkan oleh garis miring (/). Awalan bersifat peka huruf besar-kecil dan dicocokkan dengan setiap elemen dari jalur.
Template berikut menunjukkan konfigurasi Ingress:
Jalankan perintah berikut untuk mengakses aplikasi.
Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah
kubectl get ing.
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: PrefixKlaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo-path-prefix
namespace: default
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
backend:
serviceName: demo-service
servicePort: 80
pathType: Prefixcurl <ADDRESS>/helloOutput yang Diharapkan:
{"hello":"coffee"}Konfigurasikan pemeriksaan kesehatan
Anda dapat mengonfigurasi pemeriksaan kesehatan untuk ALB Ingresses menggunakan anotasi berikut.
Template YAML berikut memberikan contoh cara membuat Ingress dengan pemeriksaan kesehatan yang diaktifkan.
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/healthcheck-enabled: "true"
alb.ingress.kubernetes.io/healthcheck-path: "/"
alb.ingress.kubernetes.io/healthcheck-protocol: "HTTP"
alb.ingress.kubernetes.io/healthcheck-httpversion: "HTTP1.1"
alb.ingress.kubernetes.io/healthcheck-method: "HEAD"
alb.ingress.kubernetes.io/healthcheck-code: "http_2xx"
alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5"
alb.ingress.kubernetes.io/healthcheck-interval-seconds: "2"
alb.ingress.kubernetes.io/healthy-threshold-count: "3"
alb.ingress.kubernetes.io/unhealthy-threshold-count: "3"
spec:
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: 80Klaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
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:
serviceName: tea-svc
servicePort: 80
# Konfigurasikan jalur konteks.
- path: /coffee
backend:
serviceName: coffee-svc
servicePort: 80Parameter | Deskripsi |
alb.ingress.kubernetes.io/healthcheck-enabled | Menentukan apakah akan mengaktifkan pemeriksaan kesehatan untuk grup server backend.
Nilai default: |
alb.ingress.kubernetes.io/healthcheck-path | Jalur URL berdasarkan mana pemeriksaan kesehatan dilakukan. Nilai default: |
alb.ingress.kubernetes.io/healthcheck-protocol | Protokol yang digunakan untuk pemeriksaan kesehatan.
Nilai default: |
alb.ingress.kubernetes.io/healthcheck-httpversion | Versi protokol HTTP. Parameter ini berlaku hanya ketika
Nilai default: |
alb.ingress.kubernetes.io/healthcheck-method | Metode permintaan yang digunakan untuk pemeriksaan kesehatan.
Nilai default: Penting Jika Anda menyetel |
alb.ingress.kubernetes.io/healthcheck-httpcode | Kode status yang dikembalikan untuk pemeriksaan kesehatan. Server backend dianggap sehat hanya jika permintaan pemeriksaan kesehatan berhasil dan salah satu kode status yang ditentukan dikembalikan. Anda dapat memilih satu atau lebih kode status berikut, dan pisahkan beberapa kode status dengan koma (,):
Nilai default: |
alb.ingress.kubernetes.io/healthcheck-code | Kode status yang dikembalikan untuk pemeriksaan kesehatan. Server backend dianggap sehat hanya jika permintaan pemeriksaan kesehatan berhasil dan salah satu kode status yang ditentukan dikembalikan. Jika Anda menentukan parameter ini dan Nilai untuk parameter ini bergantung pada nilai yang ditentukan dalam
|
alb.ingress.kubernetes.io/healthcheck-timeout-seconds | Periode timeout untuk pemeriksaan kesehatan. Satuan: detik. Nilai valid: 1 hingga 300. Nilai default: |
alb.ingress.kubernetes.io/healthcheck-interval-seconds | Interval antara dua pemeriksaan kesehatan berturut-turut. Satuan: detik. Nilai valid: 1 hingga 50. Nilai default: |
alb.ingress.kubernetes.io/healthy-threshold-count | Jumlah kali server backend harus lulus pemeriksaan kesehatan berturut-turut sebelum server dianggap sehat. Nilai valid: 2 hingga 10. Nilai default: |
alb.ingress.kubernetes.io/unhealthy-threshold-count | Jumlah kali server backend harus gagal pemeriksaan kesehatan berturut-turut sebelum server dianggap tidak sehat. Nilai valid: 2 hingga 10. Nilai default: |
alb.ingress.kubernetes.io/healthcheck-connect-port | Port yang digunakan untuk pemeriksaan kesehatan. Nilai default: Catatan Nilai |
Arahkan ulang permintaan HTTP ke HTTPS
Anda dapat mengonfigurasi ALB Ingress untuk mengarahkan ulang permintaan HTTP ke port HTTPS 443 dengan menambahkan anotasi alb.ingress.kubernetes.io/ssl-redirect: "true".
Anda tidak dapat membuat pendengar menggunakan ALB Ingress. Untuk memastikan bahwa ALB Ingress dapat bekerja sesuai harapan, Anda perlu menentukan port dan protokol pendengar dalam AlbConfig, lalu asosiasikan pendengar dengan Layanan dalam ALB Ingress.
Klaster 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: PrefixKlaster 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: PrefixKonfigurasikan HTTPS atau gRPC sebagai protokol backend
ALB Ingresses mendukung HTTPS atau gRPC sebagai protokol backend. Untuk mengonfigurasi HTTPS atau gRPC, tambahkan anotasi alb.ingress.kubernetes.io/backend-protocol: "grpc" atau alb.ingress.kubernetes.io/backend-protocol: "https". Jika Anda ingin menggunakan Ingress untuk mendistribusikan permintaan ke layanan gRPC, Anda harus mengonfigurasi sertifikat SSL untuk layanan gRPC dan menggunakan protokol TLS untuk berkomunikasi dengan layanan gRPC. Contoh:
Setelah membuat Ingress, Anda tidak dapat memodifikasi protokol backend. Hapus dan buat ulang Ingress untuk memodifikasi protokol.
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: 9080Klaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
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:
- backend:
serviceName: grpc-demo-svc
servicePort: 9080
path: /
pathType: PrefixKonfigurasikan ekspresi reguler
Anda dapat menentukan ekspresi reguler sebagai kondisi pengarahan di bidang path. Contoh:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # Mendukung ekspresi reguler di bidang path.
alb.ingress.kubernetes.io/conditions.service-a: | # Layanan yang ditentukan dalam anotasi harus merupakan Layanan yang ada di klaster, dan nama Layanan harus sama dengan nama Layanan di backend dari bidang rule.
[{
"type": "Path",
"pathConfig": {
"values": [
"~*^/pathvalue1", # Ekspresi reguler harus diikuti oleh flag ekspresi reguler ~*.
"/pathvalue2" # Tidak perlu menambahkan ~* sebelum jalur untuk pencocokan tepat.
]
}
}]
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 Ingresses mendukung aturan penulisan ulang. Untuk mengonfigurasi aturan penulisan ulang, tambahkan anotasi alb.ingress.kubernetes.io/rewrite-target: /path/${2}. Aturan berikut berlaku:
Dalam anotasi
rewrite-target, Anda harus menyetel bidangpathTypeke Prefix untuk variabel tipe${number}.Secara default, parameter
pathtidak mendukung karakter yang didukung oleh ekspresi reguler, seperti tanda bintang (*) dan tanda tanya (?). Untuk menentukan karakter yang digunakan oleh ekspresi reguler di parameter path, Anda harus menambahkan anotasi alb.ingress.kubernetes.io/use-regex: "true".Nilai parameter
pathharus dimulai dengan garis miring (/).
Jika Anda ingin menentukan ekspresi reguler dalam aturan penulisan ulang, perhatikan hal-hal berikut:
Anda dapat menentukan satu atau lebih ekspresi reguler di bidang
pathdari ALB Ingress dan menggunakan tanda kurung()untuk mengelilingi ekspresi reguler. Namun, Anda hanya dapat menggunakan hingga tiga variabel (${1},${2}, dan${3}) dalam anotasirewrite-targetuntuk membentuk jalur yang menimpa jalur asli.Variabel yang cocok dengan ekspresi reguler digabungkan untuk membentuk jalur yang menimpa jalur asli.
Jalur asli hanya ditimpa oleh variabel yang cocok dengan ekspresi reguler jika persyaratan berikut terpenuhi: Beberapa ekspresi reguler yang dikelilingi oleh tanda kurung
()ditentukan dan anotasirewrite-targetdisetel ke satu atau lebih variabel berikut:${1},${2}, dan${3}.
Misalkan parameter path dari ALB Ingress disetel ke /sys/(.*)/(.*)/aaa dan anotasi rewrite-target disetel ke /${1}/${2}. Jika klien mengirim permintaan ke /sys/ccc/bbb/aaa path, permintaan tersebut cocok dengan ekspresi reguler /sys/(.*)/(.*)/aaa. Anotasi rewrite-target berlaku dan mengganti ${1} dengan ccc dan ${2} dengan bbb. Akibatnya, permintaan dialihkan ke /ccc/bbb.
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # Mendukung ekspresi reguler di bidang path.
alb.ingress.kubernetes.io/rewrite-target: /path/${2} # Variabel yang cocok dengan ekspresi reguler digabungkan untuk membentuk jalur yang menimpa jalur asli.
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: 9080Klaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/use-regex: "true" # Mendukung ekspresi reguler di bidang path.
alb.ingress.kubernetes.io/rewrite-target: /path/${2} # Variabel yang cocok dengan ekspresi reguler digabungkan untuk membentuk jalur yang menimpa jalur asli.
name: rewrite-ingress
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- backend:
serviceName: rewrite-svc
servicePort: 9080
path: /something(/|$)(.*)
pathType: PrefixKonfigurasikan port pendengar kustom
ALB Ingresses memungkinkan Anda mengonfigurasi port pendengar 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 berfungsi sesuai harapan, Anda perlu menentukan port dan protokol pendengar dalam AlbConfig, lalu mengasosiasikan pendengar dengan Layanan dalam ALB Ingress.
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80Klaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
name: cafe-ingress
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- backend:
serviceName: tea-svc
servicePort: 80
path: /tea-svc
pathType: ImplementationSpecificKonfigurasikan prioritas aturan pengalihan
Secara default, aturan pengalihan diprioritaskan berdasarkan aturan berikut:
Aturan pengalihan dari ALB Ingress yang berbeda diprioritaskan dalam urutan leksikografis nilai parameter
namespace/name. Aturan pengalihan yang nilainya muncul pertama kali di antara semua aturan pengalihan dalam urutan leksikografis memiliki prioritas tertinggi.Aturan pengalihan dari ALB Ingress ditampilkan dalam urutan prioritas menurun di parameter
rule.
Untuk memprioritaskan aturan pengalihan tanpa memodifikasi bidang namespace/name dari ALB Ingress, konfigurasikan anotasi berikut:
Prioritas setiap aturan pengalihan dalam pendengar harus unik. Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/order untuk menentukan prioritas aturan pengalihan dari ALB Ingress. Nilai valid: 1 hingga 1000. Nilai yang lebih kecil menunjukkan prioritas lebih tinggi. Nilai default adalah 10.
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: 80Klaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "2"
name: cafe-ingress
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- backend:
serviceName: tea-svc
servicePort: 80
path: /tea-svc
pathType: ImplementationSpecificGunakan anotasi untuk melakukan rilis bertahap
ALB memungkinkan Anda mengonfigurasi rilis canary berdasarkan header permintaan, cookie, dan bobot untuk menangani pengalihan lalu lintas yang kompleks. Anda dapat menambahkan anotasi alb.ingress.kubernetes.io/canary: "true" untuk mengaktifkan fitur rilis canary. Kemudian, Anda dapat menggunakan anotasi berikut untuk mengonfigurasi aturan 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 modifikasi aturan Ingress asli. Jika tidak, akses ke aplikasi mungkin terganggu. Setelah versi aplikasi baru lulus pengujian, ganti Layanan backend yang digunakan oleh versi aplikasi sebelumnya dengan Layanan backend yang digunakan oleh versi aplikasi baru. Lalu, hapus aturan Ingress untuk melaksanakan rilis canary.
alb.ingress.kubernetes.io/canary-by-headerdanalb.ingress.kubernetes.io/canary-by-header-value: Aturan ini mencocokkan header dan nilai header dari permintaan. Anda harus menambahkan keduaannotationsjika ingin menggunakan aturan ini.Jika
headerdannilai headerdari permintaan cocok dengan aturan, permintaan tersebut akan dirutekan ke versi aplikasi baru.Jika
headerdari permintaan tidak cocok dengan aturan berbasisheader, permintaan tersebut akan dicocokkan dengan jenis aturan lain berdasarkan prioritas aturan.
Jika Anda menyetel alb.ingress.kubernetes.io/canary-by-header menjadi
location: hz, permintaan yang cocok dengan aturan akan dirutekan ke versi aplikasi baru. Permintaan yang gagal cocok dengan aturan akan dirutekan berdasarkan aturan berbasis bobot. Contoh:Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: ImplementationSpecificKlaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 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: serviceName:demo-service-hello servicePort: 80 path: /hello pathType: ImplementationSpecificalb.ingress.kubernetes.io/canary-by-cookie: Aturan ini mencocokkan cookie dari permintaan.Jika Anda menyetel
cookiekealways, permintaan yang cocok dengan aturan akan dirutekan ke versi aplikasi baru.Jika Anda menyetel
cookiekenever, permintaan yang cocok dengan aturan akan dirutekan ke versi aplikasi lama.
CatatanAturan rilis canary berbasis cookie tidak mendukung pengaturan lainnya. Nilai cookie harus
alwaysataunever.Permintaan yang berisi cookie
demo=alwaysakan dirutekan ke versi aplikasi baru. Contoh:Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: ImplementationSpecificKlaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 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: serviceName:demo-service-hello servicePort: 80 path: /hello pathType: ImplementationSpecificalb.ingress.kubernetes.io/canary-weight: Aturan ini memungkinkan Anda menetapkan persentase permintaan yang dikirim ke Layanan tertentu. Anda dapat memasukkan bilangan bulat dari 0 hingga 100.Dalam contoh berikut, persentase permintaan yang dirutekan ke versi aplikasi baru disetel ke 50%:
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
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: ImplementationSpecificKlaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 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: serviceName: demo-service-hello servicePort: 80 path: /hello pathType: ImplementationSpecific
Konfigurasikan persistensi sesi menggunakan anotasi
ALB Ingresses memungkinkan Anda mengonfigurasi persistensi sesi menggunakan anotasi berikut:
alb.ingress.kubernetes.io/sticky-session: Menentukan apakah akan mengaktifkan persistensi sesi. Nilai valid:truedanfalse. Nilai default:false.alb.ingress.kubernetes.io/sticky-session-type: Metode yang digunakan untuk menangani cookie. Nilai valid:InsertdanServer. Nilai default:Insert.Insert: Menyisipkan cookie. ALB menyisipkan cookie (SERVERID) ke dalam paket respons HTTP atau HTTPS pertama yang dikirim ke klien. Permintaan berikutnya dari klien akan berisi cookie ini dan pendengar akan mendistribusikan permintaan ini ke server backend yang direkam.Server: Menulis ulang cookie. Saat ALB mendeteksi cookie yang ditentukan pengguna, ia menimpa cookie asli dengan cookie yang ditentukan pengguna. Permintaan berikutnya dari klien akan berisi cookie yang ditentukan pengguna, dan pendengar akan mendistribusikan permintaan ini ke server backend yang direkam.
CatatanParameter ini berlaku saat parameter
StickySessionEnableddisetel ketrueuntuk grup server.alb.ingress.kubernetes.io/cookie-timeout: Menentukan periode timeout cookie. Nilai valid: 1 hingga 86400. Nilai default:1000. Satuan: detik.alb.ingress.kubernetes.io/cookie: Menentukan cookie kustom. Tipe: string. Nilai default:"".
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
ServerapiVersion: 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" # Untuk mendukung cookie kustom, tipe cookie yang disisipkan harus disetel ke <code data-tag="code">ServerKlaster yang menjalankan versi Kubernetes sebelum 1.19
ServerapiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: cafe-ingress-v3
annotations:
alb.ingress.kubernetes.io/sticky-session: "true"
alb.ingress.kubernetes.io/sticky-session-type: "Insert" # Untuk mendukung cookie kustom, tipe cookie yang disisipkan harus disetel ke <code data-tag="code">ServerTentukan algoritma penyeimbangan beban untuk grup server backend
ALB Ingresses memungkinkan Anda menentukan algoritma penyeimbangan beban untuk grup server backend menggunakan anotasi alb.ingress.kubernetes.io/backend-scheduler. Contoh:
Klaster yang menjalankan Kubernetes 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 berdasarkan kebutuhan bisnis Anda.
alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # Parameter ini diperlukan hanya jika algoritma penyeimbangan beban adalah uch. Anda tidak perlu mengonfigurasi parameter ini jika algoritma penjadwalan adalah wrr, sch, atau wlc.
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80Klaster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/backend-scheduler: "uch" # Ganti uch dengan wrr, sch, atau wlc berdasarkan kebutuhan bisnis Anda.
alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # Parameter ini diperlukan hanya ketika algoritma penyeimbangan beban adalah uch. Anda tidak perlu mengonfigurasi parameter ini ketika algoritma penjadwalan adalah wrr, sch, atau wlc.
name: cafe-ingress
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- backend:
serviceName: tea-svc
servicePort: 80
path: /tea-svc
pathType: ImplementationSpecificSetel anotasi alb.ingress.kubernetes.io/backend-scheduler berdasarkan deskripsi berikut:
wrr: Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan daripada yang memiliki bobot lebih rendah. Ini adalah nilai default.wlc: Permintaan didistribusikan berdasarkan bobot dan beban setiap server backend. Beban merujuk pada jumlah koneksi ke server backend. Jika beberapa server backend memiliki bobot yang sama, permintaan akan diteruskan ke server backend dengan koneksi paling sedikit.sch: hashing konsisten berdasarkan alamat IP sumber.uch: hashing konsisten berdasarkan parameter URL. Anda dapat menambahkan anotasialb.ingress.kubernetes.io/backend-scheduler-uch-valueke ALB Ingress untuk menentukan parameter URL untuk hashing konsisten ketika algoritma penyeimbangan beban untuk grup server backend adalahuch.
Konfigurasikan CORS
Blok kode berikut menunjukkan contoh konfigurasi Cross-origin Resource Sharing (CORS) yang didukung oleh ALB Ingresses:
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 domain yang valid atau nama domain tingkat atas dengan wildcard. 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 membawa kredensial dalam permintaan CORS. Nilai default: |
| Periode maksimum untuk mana permintaan preflight yang menggunakan metode OPTIONS dapat di-cache. Tentukan parameter ini untuk permintaan kompleks. Nilai valid: -1 hingga 172800. Satuan: detik. Nilai default: |
Konfigurasikan koneksi TCP persisten
Load balancer tradisional mengakses server backend melalui koneksi singkat. Setiap permintaan membuat dan menutup koneksi TCP, yang menjadi hambatan bagi sistem berperforma tinggi. Untuk mengurangi jumlah sumber daya yang digunakan untuk membangun koneksi jaringan dan meningkatkan performa pengalihan, Anda dapat mengaktifkan koneksi persisten dengan menambahkan anotasi alb.ingress.kubernetes.io/backend-keepalive ke file konfigurasi ALB Ingress. Contoh:
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 QPS berdasarkan aturan pengalihan. Anda dapat membatasi QPS dalam rentang 1 hingga 100000. Anda dapat menambahkan anotasi alb.ingress.kubernetes.io/traffic-limit-qps ke ALB Ingress untuk mengaktifkan fitur pembatasan QPS. Contoh:
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: 80Startup lambat backend
Setelah pod baru ditambahkan ke backend Layanan, jika ALB Ingress segera mendistribusikan lalu lintas ke pod baru tersebut, hal itu dapat menyebabkan lonjakan tiba-tiba dalam penggunaan CPU atau memori, yang mengakibatkan masalah akses. Dalam mode startup lambat, ALB Ingress secara bertahap mengalihkan lalu lintas ke pod baru untuk mengurangi dampak dari lonjakan lalu lintas mendadak. Blok kode sampel berikut menunjukkan contohnya:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/slow-start-enabled: "true"
alb.ingress.kubernetes.io/slow-start-duration: "100"
name: alb-ingress
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80Parameter | Deskripsi |
alb.ingress.kubernetes.io/slow-start-enabled | Menentukan apakah akan mengaktifkan mode startup lambat.
Secara default, mode ini dinonaktifkan. |
alb.ingress.kubernetes.io/slow-start-duration | Durasi peningkatan lalu lintas setelah startup lambat dalam detik. Memperpanjang durasi mengurangi laju pertumbuhan lalu lintas. Nilai valid: 30 hingga 900. Nilai default: |
Pengurasan koneksi
Jika sebuah pod memasuki status Terminating, ALB Ingress akan menghapusnya dari backend. Namun, permintaan yang sedang berlangsung mungkin masih ada dalam koneksi yang telah dibuat, dan kesalahan mungkin terjadi jika ALB Ingress segera menutup semua koneksi. Dengan pengurasan koneksi diaktifkan, ALB Ingress menjaga koneksi tetap terbuka selama periode tertentu setelah pod dihapus, memastikan shutdown yang lancar setelah permintaan saat ini selesai. Mode pengurasan koneksi adalah:
Nonaktif: Saat pod memasuki status Terminating, ALB Ingress menghapus pod dari backend dan segera menutup semua koneksi.
Aktif: Saat pod memasuki status Terminating, ALB Ingress mempertahankan permintaan yang sedang berlangsung tetap terbuka tetapi tidak menerima yang baru:
Jika ada permintaan yang sedang berlangsung, ALB Ingress menutup semua koneksi dan menghapus pod ketika timeout tercapai.
Jika pod menyelesaikan semua permintaan sebelum timeout, ALB Ingress segera menghapusnya.
Sebelum akhir pengurasan koneksi, ALB Ingress tidak akan mengakhiri koneksi dengan pod, tetapi tidak dapat menjamin pod tetap berjalan. Anda dapat mengontrol ketersediaan pod dalam status Terminating dengan mengonfigurasi spec.terminationGracePeriodSeconds atau menggunakan hook preStop.
Blok kode sampel berikut menunjukkan contoh untuk mengonfigurasi pengurasan koneksi:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/connection-drain-enabled: "true"
alb.ingress.kubernetes.io/connection-drain-timeout: "199"
name: alb-ingress
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80Parameter | Deskripsi |
alb.ingress.kubernetes.io/connection-drain-enabled | Menentukan apakah akan mengaktifkan pengurasan koneksi.
Secara default, pengurasan koneksi dinonaktifkan. |
alb.ingress.kubernetes.io/connection-drain-timeout | Periode timeout untuk pengurasan koneksi. Satuan: detik. Nilai valid: 0 hingga 900. Nilai default: |