Buat, konfigurasikan, dan gunakan kembali instans ALB serta pendengar melalui CRD AlbConfig, dengan dukungan IPv6, log akses Simple Log Service (SLS), kebijakan TLS, dan ACL jaringan.
Prasyarat
-
ALB Ingress Controller telah diinstal di kluster Anda.
-
Dua vSwitch di zona berbeda telah dibuat dalam VPC yang sama dengan kluster ACK Anda.
Untuk menggunakan ALB Ingress dengan cluster khusus ACK, berikan izin yang diperlukan ke kluster terlebih dahulu.
Catatan penggunaan
-
Untuk memodifikasi konfigurasi resource, gunakan
kubectl edit. Jika Anda menggunakankubectl apply, jalankankubectl diffterlebih dahulu untuk melihat pratinjau perubahan sebelum menerapkannya. -
Jika kluster Anda menggunakan plugin jaringan Flannel, layanan backend untuk ALB Ingress harus bertipe NodePort atau LoadBalancer.
Parameter utama sekilas
Parameter AlbConfig yang umum digunakan:
|
Parameter |
Tipe |
Bawaan |
Hanya saat pembuatan |
Deskripsi |
|
|
string |
— |
Tidak |
Nama instans ALB |
|
|
string |
|
Tidak |
Mengatur mode IP instans ALB. Nilai yang valid: |
|
|
string |
|
Ya |
|
|
|
string |
— |
Ya |
Atur ke |
|
|
array |
— |
Ya |
ID vSwitch (minimal dua, di zona berbeda) |
|
|
string |
|
Tidak |
Edisi Instance ALB |
|
|
string |
— |
Tidak |
ID instans ALB yang ada untuk digunakan kembali |
|
|
boolean |
|
Tidak |
Apakah akan menimpa atribut instans ALB yang digunakan kembali |
|
|
boolean |
|
Tidak |
Apakah akan menimpa atribut pendengar dari instans yang digunakan kembali |
|
|
string |
— |
Tidak |
Proyek log SLS |
|
|
string |
— |
Tidak |
Logstore SLS (harus diawali dengan |
|
|
string |
— |
Tidak |
ID instans Internet Shared Bandwidth |
|
|
integer |
— |
Tidak |
Port pendengar |
|
|
string |
— |
Tidak |
|
|
|
integer |
|
Tidak |
Timeout respons backend dalam detik (1–600) |
|
|
boolean |
|
Tidak |
Aktifkan kompresi Gzip/Brotli |
Konfigurasi instans ALB
Buat AlbConfig
Setiap AlbConfig mengonfigurasi satu instans ALB. Untuk menggunakan beberapa instans ALB, buat satu AlbConfig untuk setiap instans.
Saat Anda menginstal ALB Ingress Controller dan memilih Create atau Select Existing untuk Gateway Source, controller secara otomatis membuat AlbConfig bernama alb dan IngressClass bernama alb.
-
Buat
alb.yamldengan konten berikut:Parameter
Deskripsi
spec.config.nameNama instans ALB.
spec.config.addressTypeInternet(bawaan): IP publik.Intranet: hanya internal-VPC. Hanya saat pembuatan; tidak dapat diubah nanti.spec.config.zoneMappingsMinimal dua vSwitch di zona yang didukung ALB berbeda, dalam VPC yang sama dengan kluster. Hanya saat pembuatan; tidak dapat diubah nanti. Wilayah single-zone hanya memperbolehkan satu vSwitch.
spec.config.zoneMappings[].allocationId(Opsional) ID EIP untuk diasosiasikan dengan instans ALB. Jika dihilangkan, EIP BGP (multi-ISP) bayar sesuai penggunaan dibuat secara otomatis. Hanya EIP bayar sesuai penggunaan (bayar-berdasarkan-transfer-data) yang tidak berada dalam instans Internet Shared Bandwidth yang didukung. EIP untuk zona berbeda harus bertipe sama.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: name: alb addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # Ganti dengan ID vSwitch Anda. allocationId: eip-asdfas**** # Ganti dengan ID EIP Anda. Jika dihilangkan, EIP ditetapkan secara otomatis. - vSwitchId: vsw-uf6nun9tql5t8nh15**** allocationId: eip-dpfmss**** listeners: - port: 80 protocol: HTTPPengaturan AlbConfig bawaan (kecuali
vSwitchId):apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: accessLogConfig: logProject: "" logStore: "" addressAllocatedMode: Dynamic addressType: Internet billingConfig: internetBandwidth: 0 internetChargeType: "" payType: PostPay deletionProtectionEnabled: true edition: Standard forceOverride: false zoneMappings: - vSwitchId: #... - vSwitchId: #... status: loadBalancer: dnsname: alb-s2em8fr9debkg5****.cn-shenzhen.alb.aliyuncs.com id: alb-s2em8fr9debkg5**** -
Terapkan konfigurasi:
kubectl apply -f alb.yamlOutput yang diharapkan:
AlbConfig.alibabacloud.com/alb created -
Verifikasi AlbConfig:
PORT&PROTOCOLdanCERTIDkosong hingga Anda mengonfigurasi pendengar HTTPS dan sertifikat.kubectl get AlbConfigOutput yang diharapkan:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncs.com 28m
Perbarui AlbConfig
-
Daftar AlbConfig Anda:
kubectl get AlbConfig -
Edit AlbConfig:
kubectl edit albconfig <ALBCONFIG_NAME>Sebagai contoh, untuk mengganti nama instans ALB menjadi
new_alb:spec: config: name: new_alb
Hapus AlbConfig
Menghapus AlbConfig akan menghapus instans ALB yang terkait.
Hapus semua Ingress yang diasosiasikan dengan AlbConfig sebelum menghapusnya.
kubectl delete AlbConfig <AlbConfig_NAME>
Bind instans Internet Shared Bandwidth
Untuk mengikat instans Internet Shared Bandwidth ke instans ALB, atur billingConfig.bandWidthPackageId:
Ini hanya berlaku untuk instans ALB yang menghadap internet. Untuk membeli instans Internet Shared Bandwidth, lihat Buat Internet Shared Bandwidth.
spec:
config:
name: alb
addressType: Internet
edition: Standard
zoneMappings:
- vSwitchId: vsw-2vcqeyvwsnd***
- vSwitchId: vsw-2vcbhjlqu7y***
billingConfig:
bandWidthPackageId: cbwp-2vcjucp49otd8qolhm***
Buat dan gunakan beberapa instans ALB
Untuk menggunakan beberapa instans ALB, buat AlbConfig dan IngressClass terpisah untuk setiap instans.
-
Buat
alb-2.yaml:apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-2 spec: config: name: alb-2 addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** - vSwitchId: vsw-uf6nun9tql5t8nh15**** -
Terapkan:
kubectl apply -f alb-2.yaml -
Buat
ingress_class2.yaml:Kluster v1.19 dan lebih baru
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb-2 spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-2Kluster sebelum v1.19
apiVersion: networking.k8s.io/v1beta1 kind: IngressClass metadata: name: alb-2 spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-2 -
Terapkan:
kubectl apply -f ingress_class2.yaml -
Buat
ingress2.yaml. AturingressClassNameke IngressClass untuk instans ALB target:Kluster v1.19 dan lebih baru
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress2 spec: ingressClassName: alb-2 rules: - 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: 80Kluster sebelum v1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: cafe-ingress2 spec: ingressClassName: alb-2 rules: - http: paths: - path: /tea backend: serviceName: tea-svc servicePort: 80 - path: /coffee backend: serviceName: coffee-svc servicePort: 80 -
Terapkan:
kubectl apply -f ingress2.yaml
Asosiasikan AlbConfig dengan Ingress menggunakan IngressClass
Gunakan IngressClass untuk mengikat AlbConfig ke ALB Ingress.
Buat IngressClass
Buat ingress_class.yaml:
Kluster v1.19 dan lebih baru
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: alb
spec:
controller: ingress.k8s.alibabacloud/alb
parameters:
apiGroup: alibabacloud.com
kind: AlbConfig
name: alb
Kluster sebelum v1.19
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: alb
spec:
controller: ingress.k8s.alibabacloud/alb
parameters:
apiGroup: alibabacloud.com
kind: AlbConfig
name: alb
Terapkan:
kubectl apply -f ingress_class.yaml
Output yang diharapkan:
ingressclass.networking.k8s.io/alb created
Buat Ingress yang mereferensikan IngressClass
Buat ingress.yaml dan atur ingressClassName ke nama IngressClass:
Kluster v1.19 dan lebih baru
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee
pathType: ImplementationSpecific
backend:
service:
name: coffee-svc
port:
number: 80
Kluster sebelum v1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /tea
backend:
serviceName: tea-svc
servicePort: 80
- path: /coffee
backend:
serviceName: coffee-svc
servicePort: 80
Terapkan:
kubectl apply -f ingress.yaml
Output yang diharapkan:
ingress.networking.k8s.io/cafe-ingress created
Manajemen instans ALB yang digunakan kembali
Gunakan kembali instans ALB yang ada
Atur spec.config.id untuk menggunakan kembali instans ALB yang ada. Instans Standard dan instans yang diaktifkan WAF dari Konsol ALB didukung; instans Basic tidak dapat digunakan kembali. Satu instans ALB hanya dapat digunakan kembali oleh satu kluster.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: reuse-alb
spec:
config:
id: ****
forceOverride: false
listenerForceOverride: false
Cara interaksi antara id, forceOverride, dan listenerForceOverride:
|
|
|
|
Hasil |
|
Tidak diatur |
— |
— |
Instans ALB tidak digunakan kembali. |
|
Atur |
|
— |
Atribut instans ALB dan pendengar ditimpa. |
|
Atur |
|
|
Saat listenerForceOverride bernilai false, ALB Ingress Controller hanya mengelola pendengar yang dibuat secara otomatis oleh AlbConfig (bernama ingress-auto-listener-{port}). Pendengar yang dibuat secara manual tidak dikelola oleh AlbConfig. |
|
Atur |
|
|
Atribut instans ALB tidak ditimpa. Controller mengelola semua pendengar. Keberadaan dan konfigurasi pendengar ditentukan oleh AlbConfig. |
Jangan mengganti nama pendengar pada instans ALB yang digunakan kembali. Pendengar bernama ingress-auto-listener-{port} dikelola oleh ACK; pendengar dengan nama lain dikelola di Konsol ALB.
Hapus AlbConfig dari instans ALB yang digunakan kembali
Menghapus AlbConfig dari instans ALB yang digunakan kembali tidak menghapus instans ALB itu sendiri.
-
Untuk ALB Ingress Controller 2.10.0-aliyun.1 atau lebih lama: jalankan
kubectl edituntuk menghapus semua entri darispec.listeners, yang akan menghapus pendengar yang dikonfigurasi melalui AlbConfig. Untuk versi lebih baru dari 2.10.0-aliyun.1, lewati langkah ini. -
Hapus semua Ingress yang diasosiasikan dengan AlbConfig, lalu hapus AlbConfig:
kubectl delete AlbConfig <AlbConfig_NAME>
Konfigurasi lanjutan
Aktifkan SLS untuk mengumpulkan log akses
Atur logProject dan logStore dalam spec.config.accessLogConfig:
spec:
config:
accessLogConfig:
logProject: "k8s-log-xz92lvykqj1siwvif****"
logStore: "alb_****"
NilailogStoreharus diawali denganalb_. Jika Logstore yang ditentukan tidak ada, yang baru akan dibuat secara otomatis.
Temukan proyek log di Konsol ACK di bagian Cluster Information > Basic Information.
Untuk mengaktifkan SLS pada instans ALB yang digunakan kembali, atur forceOverride: true.
Setelah diaktifkan, klik nama proyek di samping Log Service Project pada Basic Information untuk melihat log di SLS.
Aktifkan IPv6
Atur addressIpVersion: DualStack untuk mengaktifkan IPv4/IPv6 dual stack:
addressIpVersion hanya berlaku saat pembuatan dan tidak dapat diubah nanti.
spec:
config:
addressIpVersion: DualStack
Konfigurasi pendengar
Buat pendengar
Atur port dan protocol dalam spec.listeners untuk menentukan cara ALB menerima traffic. Protokol yang didukung: HTTP, HTTPS, dan Quick UDP Internet Connections (QUIC).
Memodifikasi port atau protocol akan menghapus pendengar yang ada dan membuat yang baru. Untuk mengonfigurasi beberapa pendengar dengan protokol berbeda, tambahkan anotasi yang diperlukan ke Ingress Anda.
Pendengar HTTP
spec:
listeners:
- port: 80
protocol: HTTP
HTTP mendukung WebSocket secara native. Tidak diperlukan konfigurasi tambahan.
Pendengar HTTPS
spec:
listeners:
- port: 443
protocol: HTTPS
Pendengar HTTPS memerlukan sertifikat.
Pendengar QUIC
spec:
listeners:
- port: 443
protocol: QUIC
Pendengar QUIC menerima permintaan HTTP/3 dari klien.
Tentukan sertifikat
Untuk menambahkan sertifikat ke pendengar HTTPS, jalankan kubectl edit albconfig <Albconfig_Name> dan atur bidang certificates:
spec:
listeners:
- caEnabled: false
certificates:
- CertificateId: 756****-cn-hangzhou
IsDefault: true
port: 443
protocol: HTTPS
Jika tidak ada sertifikat bawaan yang ditentukan, ALB Ingress menggunakan sertifikat pertama sebagai bawaan.
Jika tidak ada sertifikat yang ditentukan, pembuatan pendengar ditunda hingga Ingress diasosiasikan dan sertifikat ditemukan secara otomatis berdasarkan nama domain.
Lihat Konfigurasikan sertifikat HTTPS untuk komunikasi terenkripsi.
Hapus pendengar
Jalankan kubectl edit albconfig <Albconfig_Name> dan hapus entri pendengar dari spec.listeners.
Putuskan asosiasi semua Ingress dari pendengar sebelum menghapusnya. Jika tidak, penghapusan akan gagal dengan error.
Sebagai contoh, untuk menghapus pendengar pada port 8002:
# Sebelum
listeners:
- port: 8001
protocol: HTTP
- port: 8002
protocol: HTTP
# Setelah
listeners:
- port: 8001
protocol: HTTP
Cara pembaruan pendengar bekerja
Array listeners direkonsiliasi dengan membandingkan konfigurasi baru terhadap status live dan anotasi last-applied-configuration:
|
Dalam konfigurasi baru |
Dalam konfigurasi live |
Dalam |
Hasil |
|
Ya |
Ya |
— |
Pendengar dipertahankan. |
|
Ya |
Tidak |
— |
Pendengar ditambahkan. |
|
Tidak |
— |
Ya |
Pendengar dihapus. Bidang mungkin diatur ulang ke nilai bawaan. |
|
Tidak |
Ya |
Tidak |
Pendengar dihapus. |
Contoh:
Diberikan tiga status berikut:
# Konfigurasi baru
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005 # Baru
protocol: HTTP
# Konfigurasi live
listeners:
- port: 8001
protocol: HTTP
- port: 8002
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8004
protocol: HTTP
# last-applied-configuration
listeners:
- port: 8001
protocol: HTTP
- port: 8002
protocol: HTTP
- port: 8003
protocol: HTTP
Setelah menerapkan konfigurasi baru:
listeners:
- port: 8001 # Dipertahankan (ada di konfigurasi baru dan live)
protocol: HTTP
- port: 8003 # Dipertahankan (ada di konfigurasi baru dan live)
protocol: HTTP
- port: 8005 # Ditambahkan (ada di konfigurasi baru, tidak ada di live)
protocol: HTTP
# Port 8002: dihapus (tidak ada di konfigurasi baru, ada di last-applied-configuration)
# Port 8004: dihapus (tidak ada di konfigurasi baru, ada di live, tidak ada di last-applied-configuration)
Atur periode timeout koneksi
Atur requestTimeout untuk mengontrol berapa lama ALB menunggu respons backend sebelum mengembalikan HTTP 504 ke klien. Rentang valid: 1–600 detik. Bawaan: 60 detik.
spec:
listeners:
- port: 80
protocol: HTTP
requestTimeout: 40
Konfigurasi pendengar lanjutan
Konfigurasikan kompresi data
Atur gzipEnabled: true untuk mengaktifkan kompresi. Semua tipe file mendukung kompresi Brotli. Tipe file berikut juga mendukung kompresi Gzip: text/xml, text/plain, text/css, application/javascript, application/x-javascript, application/rss+xml, application/atom+xml, application/xml, dan application/json.
spec:
listeners:
- port: 80
protocol: HTTP
gzipEnabled: true
Pertahankan alamat IP klien
ALB menambahkan alamat IP klien ke header X-Forwarded-For sebelum meneruskan permintaan ke backend.
Tersedia hanya untuk pendengar HTTP dan HTTPS.
spec:
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true # Parameter ini tidak dapat diatur ke false.
Ambil metadata koneksi klien
Gunakan xForwardedForConfig untuk menambahkan metadata klien dan pendengar ke header permintaan yang diteruskan ke backend. Semua bidang di bawah tersedia untuk pendengar HTTP dan HTTPS.
|
Bidang |
Saat diatur ke |
|
|
Menambahkan port yang digunakan klien untuk terhubung ke instans ALB. |
|
|
Menambahkan protokol pendengar yang digunakan oleh instans ALB. |
|
|
Menambahkan ID instans ALB. |
|
|
Menambahkan port pendengaran instans ALB. |
Contoh — tambahkan keempat header:
spec:
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSrcPortEnabled: true
XForwardedForProtoEnabled: true
XForwardedForSLBIdEnabled: true
XForwardedForSLBPortEnabled: true
Ambil alamat IP klien dari rantai proxy tepercaya
Atur XForwardedForClientSourceIpsEnabled: true untuk mengekstrak IP klien asli dari X-Forwarded-For saat permintaan melewati beberapa proxy. Gunakan XForwardedForClientSourceIpsTrusted untuk mencantumkan IP proxy tepercaya atau blok CIDR. ALB menjelajahi X-Forwarded-For dari kanan ke kiri dan menganggap IP non-tepercaya pertama sebagai IP klien.
Sebagai contoh, jika X-Forwarded-For adalah <IP klien, proxy-1, proxy-2>, tambahkan proxy-1 dan proxy-2 ke daftar tepercaya.
Tersedia hanya untuk pendengar HTTP dan HTTPS.
spec:
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSourceIpsEnabled: true
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16
Konfigurasikan kebijakan keamanan TLS kustom
Atur securityPolicyId pada pendengar HTTPS untuk menerapkan kebijakan keamanan TLS bawaan atau kustom.
spec:
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1
Konfigurasikan alamat IP proxy tepercaya
Konfigurasikan ACL jaringan
Gunakan aclConfig untuk mengizinkan atau menolak traffic dari alamat IP atau blok CIDR tertentu di tingkat pendengar.
spec:
listeners:
- port: 80
protocol: HTTP
aclConfig:
aclEntries:
- 127.0.0.1/32
aclType: White
|
Parameter |
Deskripsi |
|
|
|
|
|
Alamat IP atau blok CIDR yang disertakan dalam aturan ACL. Contoh: |
Lihat Konfigurasikan ACL.