Dalam klaster Kubernetes, APIG Ingress adalah objek API yang menyediakan penyeimbangan beban lapisan 7 untuk mengelola akses eksternal ke layanan. Topik ini menjelaskan fitur lanjutan dari APIG Ingress yang dapat digunakan untuk mengelola lalu lintas masuk ke klaster Anda.
Rilis Canary
APIG Ingress menyediakan kemampuan pengarahan, termasuk dukungan untuk rilis canary berdasarkan header, parameter kueri, cookie, dan bobot. Fitur ini dapat dikonfigurasi dengan menambahkan anotasi ke sumber daya Ingress Anda. Untuk mengaktifkan rilis canary, tambahkan anotasi nginx.ingress.kubernetes.io/canary: "true". Anda juga dapat menggunakan anotasi spesifik lainnya untuk mengimplementasikan berbagai jenis rilis canary.
Ketika beberapa metode dikonfigurasikan, urutan prioritas untuk pemilihan rilis canary adalah: Berdasarkan header | Berdasarkan parameter kueri > Berdasarkan cookie > Berdasarkan bobot (dari tinggi ke rendah).
Rilis canary berbasis header
Jika hanya mengonfigurasi
nginx.ingress.kubernetes.io/canary-by-header, lalu lintas diarahkan berdasarkan header permintaan. Jika nilaiheaderyang dikonfigurasi adalahalways, lalu lintas diarahkan ke titik akhir layanan canary. Sebaliknya, lalu lintas tidak diarahkan ke layanan canary.Jika mengonfigurasi kedua
nginx.ingress.kubernetes.io/canary-by-header-value dan nginx.ingress.kubernetes.io/canary-by-header, lalu lintas hanya diarahkan ke layanan canary jika header dan nilai header dalam permintaan sesuai dengan nilai yang dikonfigurasi. Sebaliknya, lalu lintas tidak diarahkan ke layanan canary.
NGINX Ingress dan ALB Ingress mendukung maksimal dua versi layanan selama rilis canary. APIG Ingress mendukung jumlah versi layanan tak terbatas selama rilis canary.
Contoh:
Jika header permintaan adalah
apig: always, permintaan diarahkan ke layanan canary demo-service-canary. Jika tidak, permintaan diarahkan ke layanan produksi demo-service. Kode contoh berikut menunjukkan konfigurasinya:Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-by-header: "apig" name: demo-canary spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service-canary port: number: 80 path: /hello pathType: Exact --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service port: number: 80 path: /hello pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-by-header: "apig" name: demo-canary spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service-canary servicePort: 80 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service servicePort: 80Jika header permintaan adalah
apig: v1, permintaan diarahkan ke layanan canary demo-service-canary-v1. Jika header permintaan adalahapig: v2, permintaan diarahkan ke layanan canary demo-service-canary-v2. Jika tidak, permintaan diarahkan ke layanan produksi demo-service. Kode contoh berikut menunjukkan konfigurasinya:Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-by-header: "apig" nginx.ingress.kubernetes.io/canary-by-header-value: "v1" name: demo-canary-v1 spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service-canary-v1 port: number: 80 path: /hello pathType: Exact --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-by-header: "apig" nginx.ingress.kubernetes.io/canary-by-header-value: "v2" name: demo-canary-v2 spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service-canary-v2 port: number: 80 path: /hello pathType: Exact --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service port: number: 80 path: /hello pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-by-header: "apig" nginx.ingress.kubernetes.io/canary-by-header-value: "v1" name: demo-canary-v1 spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service-canary-v1 servicePort: 80 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-by-header: "apig" nginx.ingress.kubernetes.io/canary-by-header-value: "v2" name: demo-canary-v2 spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service-canary-v2 servicePort: 80 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service servicePort: 80
Rilis canary berbasis parameter query
Konfigurasikan hanya higress.ingress.kubernetes.io/canary-by-query
Permintaan dikirim berdasarkan parameter query di URL. Di URL permintaan, jika kunci parameter query sama dengan yang ditentukan oleh anotasi dan nilai parameter query adalah always, permintaan dikirim ke versi canary. Dalam kasus lain, permintaan tidak dikirim ke versi canary.
Konfigurasikan baik higress.ingress.kubernetes.io/canary-by-query-value maupun higress.ingress.kubernetes.io/canary-by-query
Jika
kunci parameter kueridannilai parameter kueridalam permintaan cocok dengan nilai yang dikonfigurasi, lalu lintas diarahkan ke layanan canary. Sebaliknya, lalu lintas tidak diarahkan ke layanan canary.CatatanRilis canary berbasis header dapat digunakan bersama dengan rilis canary berbasis parameter query. Permintaan hanya dikirim ke versi canary jika kondisi pencocokan untuk kedua metode terpenuhi.
Contoh:
Jika parameter kueri dalam URL permintaan adalah
canary: gray, permintaan diarahkan ke layanan canary demo-service-canary. Sebaliknya, permintaan diarahkan ke layanan produksi demo-service. Contoh konfigurasi:Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion:networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" higress.ingress.kubernetes.io/canary-by-query: "canary" higress.ingress.kubernetes.io/canary-by-query-value: "gray" name: demo-canary spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service-canary port: number: 80 path: /hello pathType: Exact --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service port: number: 80 path: /hello pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" higress.ingress.kubernetes.io/canary-by-query: "canary" higress.ingress.kubernetes.io/canary-by-query-value: "gray" name: demo-canary spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service-canary servicePort: 80 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service servicePort: 80Jika parameter kueri dalam URL permintaan adalah
canary: graydan header permintaan berisix-user-id: test, permintaan diarahkan ke layanan canary demo-service-canary. Sebaliknya, permintaan diarahkan ke layanan produksi demo-service. Contoh konfigurasi:Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion:networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" higress.ingress.kubernetes.io/canary-by-query: "canary" higress.ingress.kubernetes.io/canary-by-query-value: "gray" nginx.ingress.kubernetes.io/canary-by-header: "x-user-id" nginx.ingress.kubernetes.io/canary-by-header-value: "test" name: demo-canary spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service-canary port: number: 80 path: /hello pathType: Exact --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service port: number: 80 path: /hello pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" higress.ingress.kubernetes.io/canary-by-query: "canary" higress.ingress.kubernetes.io/canary-by-query-value: "gray" nginx.ingress.kubernetes.io/canary-by-header: "x-user-id" nginx.ingress.kubernetes.io/canary-by-header-value: "test" name: demo-canary spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service-canary servicePort: 80 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service servicePort: 80
Rilis canary berbasis cookie
nginx.ingress.kubernetes.io/canary-by-cookie: Anotasi ini membagi lalu lintas berdasarkan cookie. Jika nilai cookie yang dikonfigurasi adalah always, lalu lintas diarahkan ke layanan canary. Sebaliknya, lalu lintas tidak diarahkan ke layanan canary.
Rilis canary berbasis cookie tidak mendukung nilai kustom. Nilai cookie yang dikonfigurasi harus always.
Sebagai contoh, jika cookie permintaan adalah demo=always, permintaan diarahkan ke layanan canary demo-service-canary. Sebaliknya, permintaan diarahkan ke layanan produksi demo-service. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-cookie: "demo"
name: demo-canary
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-cookie: "demo"
name: demo-canary
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80Rilis canary berbasis bobot
Anotasi | Deskripsi |
nginx.ingress.kubernetes.io/canary-weight | Menentukan persentase permintaan yang dikirim ke versi canary. Nilainya adalah bilangan bulat yang berkisar antara 0 hingga 100. |
nginx.ingress.kubernetes.io/canary-weight-total | Menentukan total bobot. Nilai default: 100. |
Sebagai contoh, Anda dapat menyetel bobot versi canary demo-service-canary-v1 menjadi 30%, bobot versi canary demo-service-canary-v2 menjadi 20%, dan bobot versi dasar demo-service menjadi 50%. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "30"
name: demo-canary-v1
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary-v1
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
name: demo-canary-v2
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary-v2
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "30"
name: demo-canary-v1
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary-v1
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
name: demo-canary-v2
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary-v2
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80Subset layanan
Subset layanan cocok untuk skenario di mana Layanan terkait dengan beberapa Deployment. Anda dapat menggunakan Ingress untuk meneruskan permintaan ke subset pod dari sebuah Layanan. Pada sebagian besar kasus, permintaan diteruskan ke pod Layanan yang memiliki label tertentu. Anda dapat mengonfigurasi subset layanan menggunakan salah satu metode berikut:
Gunakan konvensi label pod untuk APIG Ingress
Anda dapat menggunakan anotasi higress.ingress.kubernetes.io/service-subset untuk mengatur versi layanan. Secara default, APIG Ingress memetakan versi layanan yang dikonfigurasi ke label pod yang diawali dengan `opensergo.io/canary`. Anotasi ini bekerja sebagai berikut:
Jika nilainya adalah
""ataubase, permintaan diteruskan ke pod yang memiliki labelopensergo.io/canary: ""atau tidak memiliki kunci label dengan awalanopensergo.io/canary. Pod ini dianggap memiliki label kosong atau tanpa label.Jika nilainya diatur ke string lain, permintaan diteruskan ke pod yang memiliki label `opensergo.io/canary-{value}: {value}`. Sebagai contoh, jika nilainya adalah
gray, permintaan diteruskan ke pod dengan labelopensergo.io/canary-gray: gray.
Sebagai contoh, Layanan Kubernetes bernama go-httpbin dikaitkan dengan dua Deployment. Pod yang dikelola oleh satu Deployment tidak memiliki kunci label yang diawali dengan opensergo.io/canary. Pod yang dikelola oleh Deployment lain memiliki label canary opensergo.io/canary-gray: gray. Contoh konfigurasi:
# go-httpbin k8s service
apiVersion: v1
kind: Service
metadata:
name: go-httpbin
namespace: default
spec:
ports:
- port: 8080
protocol: TCP
selector:
app: go-httpbin
---
# go-httpbin base deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-httpbin-base
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: go-httpbin
template:
metadata:
labels:
app: go-httpbin
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/apig/go-httpbin
args:
- "--version=base"
imagePullPolicy: Always
name: go-httpbin
---
# go-httpbin gray deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-httpbin-gray
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: go-httpbin
template:
metadata:
labels:
app: go-httpbin
opensergo.io/canary-gray: gray
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/apig/go-httpbin
args:
- "--version=gray"
imagePullPolicy: Always
name: go-httpbinJika header dari permintaan example.com/test berisi x-user-id: test, permintaan diteruskan ke go-httpbin-gray. Jika tidak, permintaan diteruskan ke httpbin-base. Contoh konfigurasi:
Cluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion:networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
# Teruskan permintaan ke pod yang memiliki label canary opensergo.io/canary-gray: gray.
higress.ingress.kubernetes.io/service-subset: gray
name: demo-canary
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: go-httpbin
port:
number: 8080
path: /test
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
# Teruskan permintaan ke pod yang labelnya tidak diawali dengan opensergo.io/canary.
higress.ingress.kubernetes.io/service-subset: ""
name: demo
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: go-httpbin
port:
number: 8080
path: /test
pathType: Exact Cluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
# Teruskan permintaan ke pod yang memiliki label canary opensergo.io/canary-gray: gray.
higress.ingress.kubernetes.io/service-subset: gray
name: demo-canary
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /test
backend:
# Konfigurasikan layanan go-httpbin dan tentukan versi dalam anotasi.
serviceName: go-httpbin
servicePort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
# Teruskan permintaan ke pod yang labelnya tidak diawali dengan opensergo.io/canary.
higress.ingress.kubernetes.io/service-subset: ""
name: demo
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /test
backend:
# Konfigurasikan layanan go-httpbin dan tentukan versi dalam anotasi.
serviceName: go-httpbin
servicePort: 8080Gunakan label kustom
Anda dapat mengonfigurasi label kustom untuk mendefinisikan koleksi pod untuk subset dengan menyetel anotasi higress.ingress.kubernetes.io/service-subset dan higress.ingress.kubernetes.io/subset-labels.
Dalam hal ini, subset tidak lagi dipetakan ke label yang awalannya adalah opensergo.io/canary.
Sebagai contoh, Layanan Kubernetes bernama go-httpbin dikaitkan dengan dua Deployment. Pod yang dikelola oleh satu Deployment tidak memiliki kunci label yang diawali dengan opensergo.io/canary. Pod yang dikelola oleh Deployment lain memiliki label canary version: gray. Contoh konfigurasi:
# go-httpbin k8s service
apiVersion: v1
kind: Service
metadata:
name: go-httpbin
namespace: default
spec:
ports:
- port: 8080
protocol: TCP
selector:
app: go-httpbin
---
# go-httpbin base deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-httpbin-base
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: go-httpbin
template:
metadata:
labels:
app: go-httpbin
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/apig/go-httpbin
args:
- "--version=base"
imagePullPolicy: Always
name: go-httpbin
---
# go-httpbin base gray
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-httpbin-gray
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: go-httpbin
template:
metadata:
labels:
app: go-httpbin
version: gray
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/apig/go-httpbin
args:
- "--version=gray"
imagePullPolicy: Always
name: go-httpbinJika header dari permintaan example.com/test berisi x-user-id: test, permintaan diteruskan ke go-httpbin-gray. Jika tidak, permintaan diteruskan ke httpbin-base.
Cluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion:networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
# Teruskan permintaan ke pod yang memiliki label canary version: gray.
higress.ingress.kubernetes.io/service-subset: gray
higress.ingress.kubernetes.io/subset-labels: version gray
name: demo-canary
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: go-httpbin
port:
number: 8080
path: /test
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
# Teruskan permintaan ke pod yang labelnya tidak diawali dengan opensergo.io/canary.
higress.ingress.kubernetes.io/service-subset: ""
name: demo
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: go-httpbin
port:
number: 8080
path: /test
pathType: Exact Cluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
# Teruskan permintaan ke pod yang memiliki label canary version: gray.
higress.ingress.kubernetes.io/service-subset: gray
higress.ingress.kubernetes.io/subset-labels: version gray
name: demo-canary
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /test
backend:
# Konfigurasikan layanan go-httpbin dan tentukan versi dalam anotasi.
serviceName: go-httpbin
servicePort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
# Teruskan permintaan ke pod yang labelnya tidak diawali dengan opensergo.io/canary.
higress.ingress.kubernetes.io/service-subset: ""
name: demo
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /test
backend:
# Konfigurasikan layanan go-httpbin dan tentukan versi dalam anotasi.
serviceName: go-httpbin
servicePort: 8080CORS
Berbagi Sumber Daya Lintas Asal (CORS) memungkinkan server aplikasi web untuk mengakses sumber daya lintas asal dan mengamankan transmisi data lintas asal. Untuk informasi lebih lanjut tentang CORS, lihat Berbagi Sumber Daya Lintas Asal (CORS).
Anotasi | Deskripsi |
nginx.ingress.kubernetes.io/enable-cors | Menentukan apakah akan mengaktifkan CORS. |
nginx.ingress.kubernetes.io/cors-allow-origin | Menentukan situs pihak ketiga yang diizinkan. Pisahkan situs pihak ketiga dengan koma (,). Anda dapat menggunakan tanda bintang (*) sebagai karakter wildcard. Nilai default: *. Nilai ini menunjukkan bahwa semua situs pihak ketiga diizinkan untuk CORS. |
nginx.ingress.kubernetes.io/cors-allow-methods | Menentukan metode permintaan yang diizinkan seperti GET, POST, dan PUT. Pisahkan metode permintaan dengan koma (,). Anda dapat menggunakan tanda bintang (*) sebagai karakter wildcard. Nilai default: GET,PUT,POST,DELETE,PATCH,OPTIONS. |
nginx.ingress.kubernetes.io/cors-allow-headers | Menentukan header permintaan yang diizinkan. Pisahkan header permintaan dengan koma (,). Anda dapat menggunakan tanda bintang (*) sebagai karakter wildcard. Nilai default: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization. |
nginx.ingress.kubernetes.io/cors-expose-headers | Menentukan header respons yang dapat diekspos ke browser. Pisahkan header respons dengan koma (,). |
nginx.ingress.kubernetes.io/cors-allow-credentials | Menentukan apakah kredensial diizinkan dibawa dalam permintaan CORS. Secara default, kredensial dapat dilewatkan selama operasi CORS. |
nginx.ingress.kubernetes.io/cors-max-age | Menentukan periode maksimum waktu di mana hasil pra-pemeriksaan dapat disimpan dalam cache. Unit: detik. Nilai default: 1728000. |
Sebagai contoh, konfigurasikan example.com sebagai situs pihak ketiga yang diizinkan, GET dan POST sebagai metode permintaan yang diizinkan, dan X-Foo-Bar sebagai header permintaan yang diizinkan, serta nonaktifkan pengiriman kredensial selama operasi CORS. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "example.com"
nginx.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
nginx.ingress.kubernetes.io/cors-allow-headers: "X-Foo-Bar"
nginx.ingress.kubernetes.io/cors-allow-credentials: "false"
name: demo
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "example.com"
nginx.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
nginx.ingress.kubernetes.io/cors-allow-headers: "X-Foo-Bar"
nginx.ingress.kubernetes.io/cors-allow-credentials: "false"
name: demo
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80Pencocokan ekspresi reguler
Ingress Kubernetes standar hanya mendukung pencocokan tepat dan awalan, tetapi APIG Ingress juga mendukung pencocokan ekspresi reguler. Anda dapat menggunakan anotasi nginx.ingress.kubernetes.io/use-regex: true untuk mengaktifkan pencocokan ekspresi reguler untuk jalur yang didefinisikan dalam spesifikasi Ingress.
Jika nama domain yang diharapkan adalah example.com, permintaan yang jalurnya dimulai dengan /app atau /test diteruskan ke layanan demo. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: 'true'
name: regex-match
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- backend:
service:
name: demo
port:
number: 8080
path: /(app|test)/(.*)
pathType: PrefixKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: 'true'
name: regex-match
namespace: default
spec:
ingressClassName: apig
rules:
- http:
paths:
- path: /(app|test)/(.*)
backend:
serviceName: demo
servicePort: 8080Pengubahan jalur dan host
Anda dapat melakukan operasi rewrite untuk memodifikasi jalur dan host asli dalam permintaan sebelum permintaan tersebut diteruskan ke layanan backend tujuan.
Anotasi | Deskripsi |
nginx.ingress.kubernetes.io/rewrite-target | Menentukan jalur tujuan untuk operasi rewrite. Grup penangkapan didukung. |
nginx.ingress.kubernetes.io/upstream-vhost | Tulis ulang Host |
Pengubahan jalur
Sebelum permintaan example.com/test diteruskan ke layanan backend, ubah example.com/test menjadi example.com/dev. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: "/dev" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: "/dev" name: demo spec: ingressClassName: apig rules: - http: paths: - path: /test pathType: Exact backend: serviceName: demo-service servicePort: 80Sebelum permintaan example.com/v1/xxx diteruskan ke layanan backend, hapus awalan /v1 dan ubah permintaan menjadi example.com/xxx. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /v1/(.*) pathType: PrefixKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: "/$1" name: demo spec: ingressClassName: apig rules: - http: paths: - path: /v1/(.*) pathType: Prefix backend: serviceName: demo-service servicePort: 80Sebelum permintaan example.com/v1/xxx diteruskan ke layanan backend, ubah awalan /v1 menjadi /v2 dan ubah permintaan menjadi example.com/v2/xxx. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: "/v2/$1" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /v1/(.*) pathType: PrefixKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: "/v2/$1" name: demo spec: ingressClassName: apig rules: - http: paths: - path: /v1/(.*) pathType: Prefix backend: serviceName: demo-service servicePort: 80
Pengubahan host
Sebagai contoh, sebelum permintaan example.com/test diteruskan ke layanan backend, ubah example.com/test menjadi test.com/test. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Redirect
Redirect digunakan untuk mengubah permintaan klien asli menjadi permintaan tujuan.
Redirect HTTP ke HTTPS
Anotasi | Deskripsi |
nginx.ingress.kubernetes.io/ssl-redirect | Mengalihkan HTTP ke HTTPS |
nginx.ingress.kubernetes.io/force-ssl-redirect | Menentukan apakah akan mengarahkan ulang permintaan HTTP ke permintaan HTTPS. |
APIG Ingress memperlakukan kedua anotasi tersebut sama dan secara paksa mengarahkan ulang permintaan HTTP ke HTTPS.
Sebagai contoh, arahkan ulang permintaan http://example.com/test ke https://example.com/test. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Redirect permanen
Anotasi | Deskripsi |
nginx.ingress.kubernetes.io/permanent-redirect | Menentukan URL tujuan untuk redirect permanen. URL tujuan harus berisi skema, yaitu HTTP atau HTTPS. |
nginx.ingress.kubernetes.io/permanent-redirect-code | Menentukan kode status HTTP untuk redirect permanen. Nilai default: 301. |
Sebagai contoh, lakukan redirect permanen dari http://example.com/test ke http://example.com/app. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/permanent-redirect: "http://example.com/app"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/permanent-redirect: "http://example.com/app"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Redirect sementara
nginx.ingress.kubernetes.io/temporal-redirect: menentukan URL tujuan untuk redirect sementara. URL tujuan harus berisi skema, yaitu HTTP atau HTTPS.
Sebagai contoh, lakukan redirect sementara dari http://example.com/test ke http://example.com/app. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/temporal-redirect: "http://example.com/app"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/temporal-redirect: "http://example.com/app"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Kontrol header
Kontrol header memungkinkan Anda menambah, menghapus, atau memodifikasi header permintaan sebelum Higress Ingress meneruskan permintaan ke layanan backend. Kontrol header juga memungkinkan Anda menambah, menghapus, atau memodifikasi header respons sebelum Higress Ingress meneruskan respons yang diterima ke klien.
Kontrol header permintaan
Anotasi | Deskripsi |
higress.ingress.kubernetes.io/request-header-control-add | Menentukan header yang ditambahkan ke permintaan saat permintaan diteruskan ke layanan backend. Jika header sudah ada, nilainya digabungkan setelah nilai aslinya. Sintaks:
|
higress.ingress.kubernetes.io/request-header-control-update | Menentukan header yang dimodifikasi dalam permintaan saat permintaan diteruskan ke layanan backend. Jika header sudah ada, nilainya menimpa nilai aslinya. Sintaks:
|
higress.ingress.kubernetes.io/request-header-control-remove | Menentukan header yang dihapus dari permintaan saat permintaan diteruskan ke layanan backend. Sintaks:
|
Contoh:
Tambahkan header foo: bar dan test: true ke permintaan example.com/test. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/request-header-control-add: | foo bar test true name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/request-header-control-add: | foo bar test true name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80Anda dapat menggabungkan kontrol header dengan rilis bertahap untuk memberi tag trafik canary. Jika header permintaan adalah apig: v1, permintaan diarahkan ke layanan canary demo-service-canary-v1 dan header stage: gray ditambahkan. Jika tidak, permintaan diarahkan ke layanan produksi demo-service dan header stage: production ditambahkan. Kode contoh berikut menunjukkan konfigurasinya:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-by-header: "apig" nginx.ingress.kubernetes.io/canary-by-header-value: "v1" higress.ingress.kubernetes.io/request-header-control-add: "stage gray" name: demo-canary-v1 spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service-canary-v1 port: number: 80 path: /hello pathType: Exact --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/request-header-control-add: "stage production" name: demo spec: ingressClassName: apig rules: - http: paths: - backend: service: name: demo-service port: number: 80 path: /hello pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-by-header: "apig" nginx.ingress.kubernetes.io/canary-by-header-value: "v1" higress.ingress.kubernetes.io/request-header-control-add: "stage gray" name: demo-canary-v1 spec: ingressClassName: apig rules: - http: paths: - path: /hello backend: serviceName: demo-service-canary-v1 servicePort: 80 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/request-header-control-add: | foo bar test true name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /hello backend: serviceName: demo-service servicePort: 80
Kontrol header respons
Anotasi | Deskripsi |
higress.ingress.kubernetes.io/response-header-control-add | Menentukan header yang ditambahkan ke respons yang diterima dari layanan backend sebelum respons tersebut diteruskan ke klien. Jika header sudah ada, nilainya digabungkan setelah nilai aslinya. Sintaks:
|
higress.ingress.kubernetes.io/response-header-control-update | Menentukan header yang dimodifikasi dalam respons yang diterima dari layanan backend sebelum respons tersebut diteruskan ke klien. Jika header sudah ada, nilainya menimpa nilai aslinya. Sintaks:
|
higress.ingress.kubernetes.io/response-header-control-remove | Menentukan header yang dihapus dari respons yang diterima dari layanan backend sebelum respons tersebut diteruskan ke klien. Sintaks:
|
Sebagai contoh, hapus header req-cost-time dari respons terhadap permintaan example.com/test. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/response-header-control-remove: "req-cost-time"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/response-header-control-remove: "req-cost-time"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Percobaan ulang
APIG Ingress menyediakan pengaturan percobaan ulang tingkat rute untuk secara otomatis mencoba ulang permintaan yang gagal. Anda dapat mengatur kondisi percobaan ulang sesuai kebutuhan. Sebagai contoh, Anda dapat mencoba ulang permintaan ketika koneksi gagal, layanan backend tidak tersedia, atau kode status HTTP tertentu dikembalikan.
Anotasi | Deskripsi |
nginx.ingress.kubernetes.io/proxy-next-upstream-tries | Menentukan jumlah maksimum percobaan ulang permintaan. Nilai default: 3. |
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout | Menentukan periode waktu habis untuk percobaan ulang permintaan. Unit: detik. Secara default, tidak ada periode waktu habis yang dikonfigurasi. |
nginx.ingress.kubernetes.io/proxy-next-upstream | Kondisi untuk mencoba ulang permintaan. Pisahkan beberapa kondisi dengan koma (,). Nilai default adalah
|
Sebagai contoh, permintaan example/test tersedia. Untuk permintaan tersebut, atur jumlah maksimum percobaan ulang permintaan menjadi 2, atur periode waktu habis percobaan ulang menjadi 5 detik, picu percobaan ulang hanya saat kode status 502 dikembalikan, dan aktifkan percobaan ulang untuk permintaan non-idempoten. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-next-upstream-tries: "2"
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "5"
nginx.ingress.kubernetes.io/proxy-next-upstream: "http_502,non_idempotent"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-next-upstream-tries: "2"
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "5"
nginx.ingress.kubernetes.io/proxy-next-upstream: "http_502,non_idempotent"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Kontrol akses berdasarkan daftar putih dan daftar hitam alamat IP
APIG Ingress menyediakan kontrol akses daftar hitam dan daftar putih alamat IP pada tingkat domain dan rute. Aturan tingkat rute memiliki prioritas lebih tinggi daripada aturan tingkat domain.
Daftar putih dan daftar hitam alamat IP pada tingkat rute
Anotasi | Deskripsi |
nginx.ingress.kubernetes.io/whitelist-source-range | Menentukan daftar putih alamat IP untuk rute tertentu. Alamat IP dan blok CIDR didukung. Pisahkan alamat IP atau blok CIDR dengan koma (,). |
higress.ingress.kubernetes.io/blacklist-source-range | Menentukan daftar hitam alamat IP untuk rute tertentu. Alamat IP dan blok CIDR didukung. Pisahkan alamat IP atau blok CIDR dengan koma (,). |
Contoh:
Mengizinkan akses ke example.com/test dari alamat IP klien 1.1.xx.xx. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/whitelist-source-range: 1.1.X.X name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/whitelist-source-range: 1.1.X.X name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80Tolak akses ke example.com/test dari alamat IP klien 2.2.xx.xx. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/blacklist-source-range: 2.2.2.2 name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/blacklist-source-range: 2.2.2.2 name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80
Daftar putih dan daftar hitam alamat IP pada tingkat nama domain
Anotasi | Deskripsi |
higress.ingress.kubernetes.io/domain-whitelist-source-range | Menentukan daftar putih alamat IP untuk nama domain tertentu. Daftar putih alamat IP pada tingkat rute memiliki prioritas lebih tinggi daripada daftar putih alamat IP pada tingkat nama domain. Alamat IP dan blok CIDR didukung. Pisahkan alamat IP atau blok CIDR dengan koma (,). |
higress.ingress.kubernetes.io/domain-blacklist-source-range | Menentukan daftar hitam alamat IP untuk nama domain tertentu. Daftar hitam alamat IP pada tingkat rute memiliki prioritas lebih tinggi daripada daftar hitam alamat IP pada tingkat nama domain. Alamat IP dan blok CIDR didukung. Pisahkan alamat IP atau blok CIDR dengan koma (,). |
Contoh:
Mengizinkan akses ke semua rute dari nama domain example.com dari alamat IP klien 1.1.xx.xx dan 2.2.xx.xx. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2 name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: Exact - backend: service: name: app-service port: number: 80 path: /app pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2 name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80 - path: /app backend: serviceName: app-service servicePort: 80Gunakan daftar putih dan daftar hitam alamat IP pada tingkat nama domain bersama dengan daftar putih dan daftar hitam alamat IP pada tingkat rute. Izinkan akses ke semua rute dari nama domain example.com dari alamat IP klien 1.1.xx.xx dan 2.2.xx.xx, dan izinkan akses ke rute example.com/order hanya dari alamat IP klien 3.3.xx.xx. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2 name: demo-domain spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: Exact - backend: service: name: app-service port: number: 80 path: /app pathType: Exact --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/whitelist-source-range: 3.3.X.X name: demo-route spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /order pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2 name: demo-domain spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80 - path: /app backend: serviceName: app-service servicePort: 80 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/whitelist-source-range: 3.3.X.X name: demo-route spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /order backend: serviceName: demo-service servicePort: 80
Throttling gateway tunggal
APIG Ingress mendukung kebijakan pembatasan kecepatan tingkat rute untuk instance gateway tunggal. Kebijakan ini membatasi jumlah permintaan untuk rute tertentu pada setiap replika gateway ke ambang batas yang ditentukan dalam periode tertentu.
Sistem melakukan throttling untuk instance Cloud-native API Gateway tunggal berdasarkan ambang batas yang dikonfigurasi. Jika Anda ingin melakukan throttling terhadap lalu lintas rute untuk kluster Cloud-native API Gateway, Anda dapat menggunakan kebijakan kontrol throttling global sebagai gantinya.
Anotasi | Deskripsi |
higress.ingress.kubernetes.io/route-limit-rpm | Menentukan jumlah maksimum permintaan per menit (RPM) yang dirutekan pada instance Cloud-native API Gateway. Batas burst untuk jumlah maksimum RPM sama dengan nilai yang ditentukan dikalikan dengan higress.ingress.kubernetes.io/route-limit-burst-multiplier. Ketika pembatasan kecepatan dipicu, badan respons adalah
|
higress.ingress.kubernetes.io/route-limit-rps | Menentukan jumlah maksimum permintaan per detik (RPS) yang dirutekan pada instance Cloud-native API Gateway. Batas burst untuk jumlah maksimum RPS sama dengan nilai yang ditentukan dikalikan dengan higress.ingress.kubernetes.io/route-limit-burst-multiplier. Ketika pembatasan kecepatan dipicu, badan respons adalah
|
higress.ingress.kubernetes.io/route-limit-burst-multiplier | Menentukan pengali batas burst. Nilai default: 5. |
Contoh:
Untuk permintaan example.com/test, atur jumlah maksimum RPM menjadi 100 dan batas burst untuk jumlah maksimum RPM menjadi 200. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/route-limit-rpm: "100" higress.ingress.kubernetes.io/route-limit-burst-multiplier: "2" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/route-limit-rpm: "100" higress.ingress.kubernetes.io/route-limit-burst-multiplier: "2" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80Untuk permintaan example.com/test, atur jumlah maksimum RPS menjadi 10 dan batas burst untuk jumlah maksimum RPS menjadi 50. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/route-limit-rps: "10" # Nilai default adalah 5. # higress.ingress.kubernetes.io/route-limit-burst-multiplier: "5" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: higress.ingress.kubernetes.io/route-limit-rps: "10" # Nilai default adalah 5. # higress.ingress.kubernetes.io/route-limit-burst-multiplier: "5" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80
Kontrol throttling global
APIG Ingress terintegrasi dengan Sentinel untuk menyediakan pembatasan kecepatan tingkat rute secara global untuk klaster gateway. Ini membatasi jumlah maksimum permintaan per detik (RPS) untuk rute tertentu di seluruh klaster.
Fitur ini memerlukan versi APIG Ingress gateway 1.2.25 atau lebih baru.
Gunakan anotasi higress.ingress.kubernetes.io/rate-limit untuk mengatur jumlah maksimum RPS untuk rute di seluruh klaster gateway. Saat pembatasan kecepatan dipicu, perilaku default adalah mengembalikan kode status 429 dengan badan respons `sentinel rate limited`. APIG Ingress menyediakan dua cara untuk menyesuaikan perilaku ini: respons kustom atau pengalihan. Anda hanya dapat menggunakan salah satu dari metode ini.
Respons kustom
higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-code: Kode status respons saat pembatasan kecepatan dipicu. Defaultnya adalah 429.higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-body-type: Format badan respons saat pembatasan kecepatan dipicu. Defaultnya adalahtext.Jika disetel ke
text, Content-Type dari respons adalahtext/plain; charset=UTF-8.Jika disetel ke
json, Content-Type dari respons adalahapplication/json; charset=UTF-8.
higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-body: Badan respons saat pembatasan kecepatan dipicu. Defaultnya adalahsentinel rate limited.
Contoh 1: Atur jumlah maksimum RPS permintaan example.com/test dalam kluster Cloud-native API Gateway menjadi 100 dan pertahankan perilaku throttling default. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/rate-limit: "100"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/rate-limit: "100"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Contoh 2: Atur jumlah maksimum RPS permintaan example.com/test dalam kluster Cloud-native API Gateway menjadi 100 dan atur kode respons menjadi 503 serta badan respons menjadi server is overload saat throttling dipicu.
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/rate-limit: "100"
higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-code: "503"
higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-body: "server is overload"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/rate-limit: "100"
higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-code: "503"
higress.ingress.kubernetes.io/rate-limit-fallback-custom-response-body: "server is overload"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Pengalihan
higress.ingress.kubernetes.io/rate-limit-fallback-redirect-url: URL untuk dialihkan ketika Pembatasan kecepatan dipicu.
Contoh 1: Atur jumlah maksimum RPS permintaan example.com/test dalam kluster Cloud-native API Gateway menjadi 100 dan URL redirect menjadi example.com/fallback saat throttling dipicu.
Cluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/rate-limit: "100"
higress.ingress.kubernetes.io/rate-limit-fallback-redirect-url: "example.com/fallback"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactCluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/rate-limit: "100"
higress.ingress.kubernetes.io/rate-limit-fallback-redirect-url: "example.com/fallback"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Kontrol konkurensi global
Ingress APIG terintegrasi dengan Sentinel untuk menyediakan kontrol konkurensi tingkat rute secara global untuk klaster gateway. Ini membatasi jumlah maksimum permintaan bersamaan yang diproses untuk rute tertentu di seluruh klaster.
Fitur ini memerlukan versi gateway Ingress APIG 1.2.25 atau lebih baru.
Gunakan anotasi higress.ingress.kubernetes.io/concurrency-limit untuk menetapkan jumlah maksimum permintaan bersamaan untuk sebuah rute di seluruh klaster gateway. Ketika kontrol konkurensi dipicu, tanggapan default memiliki kode status 429 dan badan respons sentinel rate limited. Ingress APIG menyediakan dua cara untuk menyesuaikan perilaku ini: tanggapan kustom atau pengalihan. Anda hanya dapat menggunakan salah satu dari metode ini.
Respons kustom
higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code: Kode status tanggapan ketika kontrol konkurensi dipicu. Defaultnya adalah 429.higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body-type: Format badan respons ketika kontrol konkurensi dipicu. Defaultnya adalahtext.Jika disetel ke
text, Content-Type dari tanggapan adalahtext/plain; charset=UTF-8.Jika disetel ke
json, Content-Type dari tanggapan adalahapplication/json; charset=UTF-8.
higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body: Badan respons ketika kontrol konkurensi dipicu. Defaultnya adalahsentinel rate limited.
Contoh 1: Atur jumlah maksimum permintaan example.com/test yang diproses pada kluster gateway menjadi 1.000 dan pertahankan perilaku kontrol konkurensi default. Contoh konfigurasi:
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/concurrency-limit: "1000"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKlaster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/concurrency-limit: "1000"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Contoh 2: Batasi jumlah maksimum permintaan bersamaan untuk `example.com/test` pada kluster gateway menjadi 1.000. Ketika kontrol konkurensi dipicu, kembalikan kode status 503 dan badan respons server is overloaded.
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/concurrency-limit: "1000"
higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code: "503"
higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body: "server is overload"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/concurrency-limit: "1000"
higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code: "503"
higress.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body: "server is overload"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Redirection
higress.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url: URL untuk dialihkan ketika kontrol konkurensi dipicu.
Atur jumlah maksimum permintaan example.com/test yang diproses oleh kluster API Gateway berbasis cloud menjadi 1.000 dan URL pengalihan ke example.com/fallback saat kontrol konkurensi dipicu.
Klaster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/concurrency-limit: "1000"
higress.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url: "example.com/fallback"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKlaster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/concurrency-limit: "1000"
higress.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url: "example.com/fallback"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Traffic mirroring
Anda dapat mengonfigurasi pemantulan trafik untuk menyalin trafik ke layanan tertentu. Pemantulan trafik cocok untuk skenario seperti audit operasional dan pengujian trafik.
higress.ingress.kubernetes.io/mirror-target-service: layanan tujuan ke mana trafik yang disalin diteruskan. Format layanan adalah namespace/nama:port.
namespace: namespace tempat Kubernetes Service berada. Parameter ini opsional. Namespace default adalah namespace tempat Ingress gateway berada.
name: nama dari Kubernetes Service. Parameter ini wajib.
port: port Kubernetes Service ke mana trafik yang dipantulkan diteruskan. Parameter ini opsional. Secara default, port pertama digunakan.
higress.ingress.kubernetes.io/mirror-percentage: persentase trafik yang dipantulkan. Nilai valid: 0 hingga 100. Nilai default: 100.
Saat trafik yang disalin diteruskan ke layanan tujuan, akhiran -shadow secara otomatis ditambahkan ke header Host dalam permintaan asli.
Sebagai contoh, permintaan dari example.com/test disalin dan diteruskan ke layanan tujuan test/app:8080.
Dalam contoh ini, nilai header Host secara otomatis diubah menjadi example.com-shadow saat trafik yang disalin diteruskan ke layanan tujuan.
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/mirror-target-service: test/app:8080
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/mirror-target-service: test/app:8080
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Sebagai contoh, permintaan dari example.com/test disalin dan diteruskan ke layanan tujuan test/app:8080 dan persentase trafik yang dipantulkan adalah 10%.
Dalam contoh ini, nilai header Host secara otomatis diubah menjadi example.com-shadow saat trafik yang disalin diteruskan ke layanan tujuan.
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/mirror-target-service: test/app:8080
higress.ingress.kubernetes.io/mirror-percentage: "10"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/mirror-target-service: test/app:8080
higress.ingress.kubernetes.io/mirror-percentage: "10"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Protokol layanan backend: HTTPS dan gRPC
Secara default, APIG Ingress menggunakan HTTP untuk meneruskan permintaan ke kontainer aplikasi backend. Jika kontainer aplikasi Anda menggunakan HTTPS, Anda dapat menggunakan anotasi nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" untuk mengonfigurasi APIG Ingress agar mengakses layanan backend melalui HTTPS. Jika kontainer aplikasi Anda adalah layanan gRPC, Anda dapat menggunakan anotasi nginx.ingress.kubernetes.io/backend-protocol: "GRPC" untuk meneruskan permintaan melalui gRPC.
Berbeda dengan NGINX Ingress, jika nama port dalam sumber daya layanan Kubernetes untuk layanan backend Anda didefinisikan sebagai `gRPC` atau `HTTP2`, Anda tidak perlu mengonfigurasi anotasi nginx.ingress.kubernetes.io/backend-protocol: "GRPC". APIG Ingress secara otomatis menggunakan gRPC atau HTTP/2.
Contoh:
Gunakan HTTPS untuk meneruskan permintaan example/test ke layanan backend. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: / pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80Gunakan gRPC untuk meneruskan permintaan example/test ke layanan backend. Metode berikut dapat digunakan:
Metode 1: Gunakan anotasi. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/backend-protocol: "GRPC" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/backend-protocol: "GRPC" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80Metode 2: Konfigurasikan layanan menggunakan Nama Port Layanan sebagai berikut:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /order pathType: Exact --- apiVersion: v1 kind: Service metadata: name: demo-service spec: ports: - name: grpc port: 80 protocol: TCP selector: app: demo-serviceKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80 --- apiVersion: v1 kind: Service metadata: name: demo-service spec: ports: - name: grpc port: 80 protocol: TCP selector: app: demo-service
Algoritma penyeimbangan beban untuk layanan backend
Algoritma penyeimbangan beban menentukan bagaimana node dipilih ketika instance API Gateway berbasis cloud-native meneruskan permintaan ke layanan backend.
Algoritma penyeimbangan beban umum
nginx.ingress.kubernetes.io/load-balance: menentukan algoritma penyeimbangan beban umum yang digunakan oleh layanan backend. Nilai default: round_robin. Nilai valid:
round_robin: penyeimbangan beban berdasarkan round robin.
least_conn: penyeimbangan beban berdasarkan koneksi paling sedikit.
random: penyeimbangan beban secara acak.
API Gateway berbasis cloud-native tidak mendukung algoritma rata-rata bergerak tertimbang eksponensial (EWMA). Jika Anda mengonfigurasi algoritma EWMA, algoritma tersebut akan dikembalikan ke algoritma penyeimbangan beban round robin.
Sebagai contoh, konfigurasikan algoritma penyeimbangan beban koneksi paling sedikit untuk layanan backend demo-service. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/load-balance: "least_conn"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /order
pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/load-balance: "least_conn"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Algoritma penyeimbangan beban berdasarkan penghashan konsisten
Algoritma penyeimbangan beban berbasis hashing konsisten memberikan afinitas permintaan, yang memastikan bahwa permintaan dengan karakteristik yang sama selalu dirutekan ke node yang sama. APIG Ingress mendukung penggunaan variabel NGINX, header permintaan, dan parameter jalur permintaan sebagai kunci hash.
nginx.ingress.kubernetes.io/upstream-hash-by: menentukan algoritma penyeimbangan beban berdasarkan penghashan konsisten. Gateway berbasis cloud-native mendukung jenis-jenis penghashan konsisten berikut:
Cloud-native gateway mendukung konfigurasi variabel Nginx tertentu:
$request_uri: jalur permintaan, yang digunakan sebagai kunci hash. Parameter jalur termasuk.
$host: host permintaan, yang digunakan sebagai kunci hash.
$remote_addr: alamat IP klien, yang digunakan sebagai kunci hash.
Penghashan konsisten berdasarkan header permintaan. Anda hanya perlu mengonfigurasi $http_headerName.
Penghashan konsisten berdasarkan parameter jalur permintaan. Anda hanya perlu mengonfigurasi $arg_varName.
Contoh:
Gunakan alamat IP klien untuk permintaan sebagai kunci hash. Permintaan dari alamat IP klien selalu didistribusikan ke node yang sama. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80Gunakan header permintaan X-Stage sebagai kunci hash, dan distribusikan permintaan dengan nilai yang sama dari header permintaan X-Stage ke node yang sama. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/upstream-hash-by: "$http_x-stage" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/upstream-hash-by: "$http_x-stage" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80Gunakan parameter jalur permintaan X-Stage sebagai kunci hash, dan distribusikan permintaan dengan nilai yang sama dari parameter jalur permintaan X-Stage ke node yang sama. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/upstream-hash-by: "$arg_x-stage" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes sebelum 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/upstream-hash-by: "$arg_x-stage" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80
Pra-pemuatan layanan (mulai dengan lancar)
Fitur pra-pemuatan layanan memungkinkan lalu lintas meningkat secara bertahap dalam jendela pra-pemuatan layanan yang ditentukan ketika node baru dirilis. Ini memastikan bahwa node sepenuhnya dipra-pemuat.
higress.ingress.kubernetes.io/warmup: menentukan periode waktu di mana layanan dipra-pemuat. Satuan: detik. Secara default, fitur pra-pemuatan layanan tidak diaktifkan.
Pra-pemuatan layanan bergantung pada algoritma penyeimbangan beban yang dipilih. Hanya algoritma penyeimbangan beban berbasis round robin dan koneksi paling sedikit yang didukung.
Sebagai contoh, aktifkan fitur pra-pemuatan layanan untuk layanan backend demo-service dan atur jendela waktu pra-pemuatan menjadi 30 detik. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/warmup: "30"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/warmup: "30"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Afinitas Cookie (persistensi sesi)
Gateway selalu merutekan permintaan dengan cookie yang sama ke node yang sama. Jika permintaan pertama klien tidak memiliki cookie afinitas, APIG Ingress menghasilkannya dalam respons. Ini memastikan bahwa permintaan berikutnya dari klien tersebut selalu dirutekan ke node yang sama.
Anotasi | Deskripsi |
nginx.ingress.kubernetes.io/affinity | Menentukan tipe afinitas. Nilai default dan satu-satunya yang valid adalah cookie. |
nginx.ingress.kubernetes.io/affinity-mode | Menentukan mode afinitas. Nilai default dan satu-satunya yang valid adalah balanced. |
nginx.ingress.kubernetes.io/session-cookie-name | Menentukan nama cookie yang digunakan sebagai kunci hash. Nilai default: INGRESSCOOKIE. |
nginx.ingress.kubernetes.io/session-cookie-path | Menentukan jalur cookie yang dihasilkan jika cookie yang ditentukan tidak ada. Nilai default: /. |
nginx.ingress.kubernetes.io/session-cookie-max-age | Menentukan waktu kedaluwarsa cookie yang dihasilkan ketika cookie yang ditentukan tidak ada. Satuan: detik. Secara default, anotasi ini ditentukan pada tingkat sesi. |
nginx.ingress.kubernetes.io/session-cookie-expires | Menentukan waktu kedaluwarsa cookie yang dihasilkan ketika cookie yang ditentukan tidak ada. Satuan: detik. Secara default, anotasi ini ditentukan pada tingkat sesi. |
Contoh:
Untuk mengaktifkan afiniasi cookie dengan konfigurasi APIG Ingress default, gunakan kode sampel berikut. Nama cookie default adalah `INGRESSCOOKIE`, jalurnya adalah `/`, dan siklus hidup cookie berada pada tingkat sesi.
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/affinity: "cookie" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/affinity: "cookie" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80Aktifkan afinitas cookie dan atur nama cookie menjadi test, jalur menjadi /, dan waktu kedaluwarsa cookie menjadi 10 detik. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/affinity: "cookie" nginx.ingress.kubernetes.io/session-cookie-name: "test" nginx.ingress.kubernetes.io/session-cookie-max-age: "10" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - backend: service: name: demo-service port: number: 80 path: /test pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/affinity: "cookie" nginx.ingress.kubernetes.io/session-cookie-name: "test" nginx.ingress.kubernetes.io/session-cookie-max-age: "10" name: demo spec: ingressClassName: apig rules: - host: example.com http: paths: - path: /test backend: serviceName: demo-service servicePort: 80
Konfigurasi kumpulan koneksi antara instance Cloud-native API Gateway dan layanan backend
Setelah Anda mengonfigurasi kumpulan koneksi untuk layanan backend tertentu pada instance Cloud-native API Gateway, Anda dapat mengontrol jumlah koneksi antara instance Cloud-native API Gateway dan layanan backend. Hal ini membantu mencegah layanan backend kelebihan beban dan memastikan stabilitas serta ketersediaan tinggi layanan backend.
higress.ingress.kubernetes.io/connection-policy-tcp-max-connection: jumlah maksimum koneksi yang dapat dibentuk antara instance Cloud-native API Gateway dan layanan backend.
higress.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint: jumlah maksimum koneksi yang dapat dibentuk antara instance Cloud-native API Gateway dan satu node dari layanan backend.
higress.ingress.kubernetes.io/connection-policy-http-max-request-per-connection: jumlah maksimum permintaan pada satu koneksi antara instance Cloud-native API Gateway dan layanan backend.
Sebagai contoh, untuk layanan backend demo-service, Anda dapat menetapkan jumlah maksimum koneksi yang dapat dibentuk antara instance Cloud-native API Gateway dan layanan backend menjadi 10, dan menetapkan jumlah maksimum koneksi yang dapat dibentuk antara instance Cloud-native API Gateway dan satu node dari layanan backend menjadi 2.
Cluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/connection-policy-tcp-max-connection: "10"
higress.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint: "2"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactCluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/connection-policy-tcp-max-connection: "10"
higress.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint: "2"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Versi TLS dan cipher suite untuk komunikasi antara klien dan instance Cloud-native API Gateway
Secara default, APIG Ingress mendukung versi TLS dari 1.0 hingga 1.3. Paket sandi default adalah:
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES128-SHA
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-SHA
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES256-SHA
ECDHE-RSA-AES256-SHA
AES256-GCM-SHA384
AES256-SHA
Tabel berikut menjelaskan anotasi yang dapat digunakan untuk menentukan versi TLS paling awal atau terbaru dan cipher suite untuk nama domain tertentu.
Anotasi | Deskripsi |
higress.ingress.kubernetes.io/tls-min-protocol-version | Menentukan versi minimum TLS. Nilai default: TLSv1.0. Nilai valid:
|
higress.ingress.kubernetes.io/tls-max-protocol-version | Menentukan versi terbaru TLS. Nilai default: TLSv1.3. |
nginx.ingress.kubernetes.io/ssl-cipher | Menentukan cipher suite TLS. Anda dapat menentukan beberapa cipher suite TLS, yang dipisahkan dengan koma (,). Anotasi ini hanya berlaku jika versi TLS dari v1.0 hingga v1.2 digunakan untuk jabat tangan TLS. |
Sebagai contoh, nama domain example.com tersedia. Untuk nama domain ini, atur versi TLS paling awal ke TLSv1.2 dan versi terbaru ke TLSv1.2. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 atau lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/tls-min-protocol-version: "TLSv1.2"
higress.ingress.kubernetes.io/tls-max-protocol-version: "TLSv1.2"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
higress.ingress.kubernetes.io/tls-min-protocol-version: "TLSv1.2"
higress.ingress.kubernetes.io/tls-max-protocol-version: "TLSv1.2"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80Autentikasi mTLS antara instance Cloud-native API Gateway dan layanan backend
Secara default, APIG Ingress menggunakan HTTP untuk meneruskan permintaan ke kontainer aplikasi backend. Anda dapat menggunakan anotasi nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" untuk mengonfigurasi APIG Ingress agar mengakses layanan backend melalui HTTPS. Ini adalah TLS satu arah, di mana hanya APIG Ingress yang memverifikasi sertifikat yang diberikan oleh layanan backend. Sertifikat layanan backend harus diterbitkan oleh Otoritas Sertifikat (CA) tepercaya. Untuk model zero-trust yang lebih aman, Anda dapat menggunakan mutual TLS (mTLS). Dengan mTLS, gateway dan layanan backend melakukan otentikasi timbal balik. Gateway memverifikasi sertifikat layanan backend, dan layanan backend memverifikasi sertifikat gateway.
Anotasi | Deskripsi |
nginx.ingress.kubernetes.io/proxy-ssl-secret | Menentukan sertifikat klien yang digunakan oleh instance Cloud-native API Gateway. Sertifikat klien digunakan agar layanan backend dapat mengautentikasi instance Cloud-native API Gateway. Formatnya adalah secretNamespace/secretName. |
nginx.ingress.kubernetes.io/proxy-ssl-name | Menentukan Server Name Indication (SNI) yang digunakan selama proses jabat tangan TLS. |
nginx.ingress.kubernetes.io/proxy-ssl-server-name | Menentukan apakah akan mengaktifkan atau menonaktifkan SNI yang digunakan selama proses jabat tangan TLS. |
Sebagai contoh, lakukan mTLS antara instance Cloud-native API Gateway dan layanan backend, atur secretName menjadi gateway-cert, dan atur secretNamespace menjadi default. Contoh konfigurasi:
Kluster yang menjalankan Kubernetes 1.19 dan yang lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-ssl-secret: "default/gateway-cert"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: ExactKluster yang menjalankan versi Kubernetes lebih lama dari 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-ssl-secret: "default/gateway-cert"
name: demo
spec:
ingressClassName: apig
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80