AlbConfig adalah Custom Resource Definition (CRD) yang digunakan oleh ALB Ingress Controller untuk mengelola instans dan pendengar Application Load Balancer (ALB). Setiap AlbConfig dipetakan tepat ke satu instans ALB. Untuk menjalankan beberapa instans ALB, buat beberapa AlbConfig.
Topik ini mencakup cara membuat, memperbarui, dan menghapus AlbConfig; mengonfigurasi pendengar; mengasosiasikan instans ALB dengan resource Ingress; serta mengaktifkan logging akses.
Prasyarat
Sebelum memulai, pastikan bahwa:
ALB Ingress Controller telah diinstal di kluster Anda. Untuk informasi lebih lanjut, lihat Mengelola ALB Ingress controller.
Setidaknya dua vSwitch di zona berbeda telah dibuat dalam VPC yang sama dengan kluster ACK Anda. Zona tersebut harus didukung oleh ALB. Untuk informasi lebih lanjut, lihat Membuat dan mengelola vSwitch.
Untuk menggunakan ALB Ingress dengan Service di kluster khusus ACK, pertama-tama berikan izin yang diperlukan oleh ALB Ingress Controller kepada kluster tersebut. Untuk informasi lebih lanjut, lihat Berikan akses kluster khusus ACK ke ALB Ingress controller.
Catatan penggunaan
Gunakan
kubectl edituntuk memodifikasi resource AlbConfig secara langsung. Jika Anda harus menggunakankubectl apply, jalankankubectl diffterlebih dahulu untuk melihat pratinjau perubahan sebelum menerapkannya.Jika kluster Anda menggunakan plug-in jaringan Flannel, Service backend ALB Ingress hanya mendukung tipe NodePort dan LoadBalancer.
Buat AlbConfig
Saat Anda menginstal ALB Ingress Controller dan memilih Create New atau Use Existing untuk ALB Cloud-native Gateway Instance Source, Controller secara otomatis membuat AlbConfig bernama alb dan IngressClass bernama alb.
Buat file bernama
alb.yamldengan konten berikut:apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: name: alb addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # vSwitch di zona A allocationId: eip-asdfas**** # (Opsional) ID EIP - vSwitchId: vsw-uf6nun9tql5t8nh15**** # vSwitch di zona B allocationId: eip-dpfmss**** # (Opsional) ID EIP listeners: - port: 80 protocol: HTTPJalankan perintah berikut untuk membuat AlbConfig:Output yang diharapkan:
kubectl apply -f alb.yamlalbconfig.alibabacloud.com/alb createdVerifikasi bahwa AlbConfig telah dibuat:Output yang diharapkan:
kubectl get AlbConfigNAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncsslb.com 28m
KolomPORT&PROTOCOLdanCERTIDtetap kosong hingga Anda membuat pendengar HTTPS dan mengonfigurasi sertifikat.
Parameter AlbConfig
Parameter | Deskripsi | Immutable |
| Nama instans ALB. | Tidak |
| Jenis jaringan. | Ya |
| Pemetaan vSwitch ke zona. Tentukan setidaknya dua vSwitch di zona berbeda dalam VPC yang sama dengan kluster. Untuk wilayah single-zone, satu vSwitch sudah cukup. | Ya |
| ID vSwitch. vSwitch harus berada di zona yang didukung oleh ALB. | Ya |
| ID alamat IP elastis (EIP) yang akan diasosiasikan dengan instans ALB. Jika dihilangkan, EIP BGP (multi-line) pay-as-you-go dengan perlindungan keamanan dasar akan dibuat secara otomatis. Untuk informasi lebih lanjut, lihat Ikhtisar penagihan ALB. Hanya EIP pay-by-traffic yang tidak ditambahkan ke instans Internet Shared Bandwidth yang didukung. EIP lintas zona untuk instans ALB yang sama harus memiliki tipe yang sama. | Ya |
| Mode alokasi IP. | Ya |
| Versi IP. Atur ke | Ya |
| Edisi ALB. Default: | Tidak |
| Metode penagihan. Default: | Ya |
| Apakah perlindungan penghapusan diaktifkan. Default: | Ya |
Parameter yang ditandai sebagai Immutable hanya diterapkan saat instans ALB pertama kali dibuat. Perubahan selanjutnya pada parameter ini akan diabaikan.
Konfigurasi AlbConfig default
Saat Anda menginstal ALB Ingress Controller dengan AlbConfig default, pengaturan berikut diterapkan (kecuali vSwitchId, yang harus Anda tentukan sendiri):
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.aliyuncsslb.com
id: alb-s2em8fr9debkg5****Gunakan kembali instans ALB yang ada
Untuk menggunakan kembali instans ALB yang dibuat di Konsol ALB, tentukan ID-nya dalam AlbConfig. Hanya instans Standard atau yang diaktifkan WAF yang dapat digunakan kembali. Instans Basic tidak didukung. Satu instans ALB hanya dapat digunakan kembali oleh satu kluster.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: reuse-alb
spec:
config:
id: **** # ID instans ALB (Standard atau diaktifkan WAF)
forceOverride: false
listenerForceOverride: falsePerilaku override
Parameter | Deskripsi |
| ID instans ALB. Jika kosong atau tidak ada, instans tidak digunakan kembali dan field |
|
|
|
|
Jangan mengganti nama pendengar secara manual pada instans ALB yang digunakan kembali. Pendengar yang dibuat atau diperbarui oleh AlbConfig mengikuti konvensi penamaan ingress-auto-listener-{port}. Mengganti namanya dapat menyebabkan pendengar menjadi tidak dikelola.
Asosiasikan AlbConfig dengan resource Ingress
ALB Ingress menggunakan IngressClass Kubernetes untuk menghubungkan AlbConfig ke resource Ingress.
Langkah 1: Buat IngressClass
Buat file bernama ingress_class.yaml dengan konten berikut:
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 # Nama AlbConfig yang akan diasosiasikanKluster 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: albJalankan perintah berikut untuk membuat IngressClass:
kubectl apply -f ingress_class.yamlOutput yang diharapkan:
ingressclass.networking.k8s.io/alb createdLangkah 2: Buat Ingress yang mereferensikan IngressClass
Buat file bernama ingress.yaml dengan konten berikut. Field ingressClassName menghubungkan Ingress ini ke AlbConfig melalui 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: 80Kluster 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: 80Jalankan perintah berikut untuk membuat Ingress:
kubectl apply -f ingress.yamlOutput yang diharapkan:
ingress.networking.k8s.io/cafe-ingress createdGunakan beberapa instans ALB
Untuk mengarahkan traffic melalui beberapa instans ALB, buat resource AlbConfig, IngressClass, dan Ingress terpisah untuk setiap instans ALB. Gunakan nilai ingressClassName yang berbeda untuk mengasosiasikan setiap Ingress dengan instans ALB yang sesuai.
Buat AlbConfig kedua:
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-2 spec: config: name: alb-2 addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** - vSwitchId: vsw-uf6nun9tql5t8nh15****kubectl apply -f alb-2.yamlBuat IngressClass kedua yang mereferensikan AlbConfig baru:
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-2kubectl apply -f ingress_class2.yamlBuat Ingress yang menggunakan IngressClass kedua:
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: 80kubectl apply -f ingress2.yaml
Konfigurasi pengaturan jaringan
Aktifkan dual-stack IPv6
Atur addressIpVersion ke DualStack untuk mengaktifkan IPv4 dan IPv6:
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
addressIpVersion: DualStack
...Parameter addressIpVersion hanya diterapkan saat AlbConfig pertama kali dibuat. Perubahan setelah pembuatan akan diabaikan.
Asosiasikan instans Internet Shared Bandwidth
Untuk berbagi bandwidth di antara instans ALB, tentukan bandWidthPackageId dalam bagian billingConfig. Pengaturan ini hanya berlaku untuk instans ALB yang menghadap Internet (addressType: Internet).
Untuk informasi lebih lanjut tentang Internet Shared Bandwidth, lihat Membuat dan mengelola instans Internet Shared Bandwidth.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
name: alb
addressType: Internet
edition: Standard
zoneMappings:
- vSwitchId: vsw-2vcqeyvwsnd***
- vSwitchId: vsw-2vcbhjlqu7y***
billingConfig:
bandWidthPackageId: cbwp-2vcjucp49otd8qolhm***Konfigurasi pendengar
Pendengar menentukan port dan protokol yang digunakan instans ALB untuk menerima traffic klien. Instans ALB hanya dapat melayani traffic setelah setidaknya satu pendengar dikonfigurasi. Memodifikasi port, protokol, atau properti lain dari pendengar akan menghapus pendengar asli dan membuat penggantinya.
ALB mendukung tiga protokol lapisan aplikasi: HTTP, HTTPS, dan QUIC.
Untuk menggunakan beberapa pendengar dengan protokol berbeda secara bersamaan, tambahkan anotasi ke resource Ingress. Untuk informasi lebih lanjut, lihat Mengonfigurasi port pendengar kustom.
Pendengar HTTP
listeners:
- port: 80
protocol: HTTPPendengar HTTP secara otomatis kompatibel dengan WebSocket. Tidak diperlukan konfigurasi tambahan.
Pendengar HTTPS
listeners:
- port: 443
protocol: HTTPSPendengar HTTPS memerlukan sertifikat. Untuk informasi lebih lanjut, lihat Mengonfigurasi sertifikat HTTPS untuk komunikasi terenkripsi.
Pendengar QUIC
listeners:
- port: 443
protocol: QUICPendengar QUIC memungkinkan klien mengakses layanan melalui HTTP/3. Untuk informasi lebih lanjut, lihat Menggunakan pendengar QUIC untuk mendukung protokol HTTP/3.
Tentukan sertifikat
Atur field certificates dalam konfigurasi pendengar untuk mengikat sertifikat ke pendengar HTTPS. Sertifikat pertama adalah sertifikat default.
Jika tidak ada sertifikat yang ditentukan, pendengar tidak dibuat saat pembuatan ALB. Sebaliknya, pendengar hanya dibuat setelah Ingress diasosiasikan dan sertifikat ditemukan secara otomatis berdasarkan nama domain.
Untuk informasi lebih lanjut, lihat Mengonfigurasi sertifikat HTTPS untuk komunikasi terenkripsi.
ALB memperlakukan sertifikat pertama sebagai default. Sertifikat lain hanya digunakan jika sertifikat default kedaluwarsa atau tidak lagi digunakan.
listeners:
- caEnabled: false
certificates:
- CertificateId: 756****-cn-hangzhou
IsDefault: true
port: 443
protocol: HTTPSTentukan kebijakan keamanan TLS
Untuk pendengar HTTPS, tentukan kebijakan keamanan TLS menggunakan field securityPolicyId. Kebijakan kustom maupun kebijakan default sistem didukung. Untuk informasi lebih lanjut, lihat Kebijakan keamanan TLS.
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1Tetapkan timeout permintaan
Field requestTimeout menentukan berapa lama (dalam detik) instans ALB menunggu respons backend. Nilai valid: 1 hingga 600. Default: 60 detik. Jika backend tidak merespons dalam waktu timeout, ALB mengembalikan error HTTP 504 ke klien.
listeners:
- port: 80
protocol: HTTP
requestTimeout: 40Aktifkan kompresi data
Atur gzipEnabled ke true untuk mengompres respons. Saat klien mendukung Brotli dan Gzip, ALB memprioritaskan Brotli untuk kompresi yang lebih baik.
Kompresi diterapkan bila kedua kondisi berikut terpenuhi:
Header respons
Content-Lengthmelebihi 1024 byte.Header permintaan
Accept-Encodingmencakup algoritma yang didukung.
Brotli mengompres semua jenis file. Gzip mengompres jenis berikut: text/xml, text/plain, text/css, application/javascript, application/x-javascript, application/rss+xml, application/atom+xml, application/xml, dan application/json.
listeners:
- port: 80
protocol: HTTP
gzipEnabled: trueKonfigurasi header X-Forwarded-For
Tambahkan metadata klien dan ALB ke header permintaan HTTP yang diteruskan ke layanan backend.
Field | Deskripsi |
| Menambahkan alamat IP asal klien ke header |
| Menambahkan port klien. Hanya untuk HTTP/HTTPS. |
| Menambahkan protokol pendengar. |
| Menambahkan ID instans ALB. |
| Menambahkan port pendengar. |
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true
XForwardedForClientSrcPortEnabled: true
XForwardedForProtoEnabled: true
XForwardedForSLBIdEnabled: true
XForwardedForSLBPortEnabled: trueTentukan alamat IP proksi tepercaya
Gunakan XForwardedForClientSourceIpsEnabled dan XForwardedForClientSourceIpsTrusted untuk mengekstrak IP aktual klien dari header X-Forwarded-For saat permintaan melewati proksi yang dikenal. ALB menelusuri daftar IP dalam X-Forwarded-For secara terbalik dan memilih IP pertama yang tidak ada dalam daftar tepercaya.
Contohnya, jika X-Forwarded-For adalah <client IP, proxy-1, proxy-2>, atur XForwardedForClientSourceIpsTrusted ke proxy-1;proxy-2 untuk mengekstrak IP klien.
Pengaturan ini hanya berlaku untuk pendengar HTTP dan HTTPS.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSourceIpsEnabled: true
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16 # Pisahkan IP/Blok CIDR dengan titik koma. Tanpa spasi.Konfigurasi kontrol akses berbasis ACL
Kontrol klien mana yang dapat mengakses pendengar ALB Anda dengan mengonfigurasi daftar kontrol akses (ACL). Untuk informasi lebih lanjut, lihat Mengonfigurasi ACL untuk menerapkan kontrol akses.
Field | Deskripsi |
|
|
| Blok CIDR untuk entri kontrol akses, seperti |
listeners:
- port: 80
protocol: HTTP
aclConfig:
aclEntries:
- 127.0.0.1/32
aclType: WhiteAktifkan log akses dengan Simple Log Service
Tentukan logProject dan logStore dalam AlbConfig untuk mengumpulkan log akses ALB.
Kluster harus memiliki proyek Simple Log Service yang terkait. Untuk menemukan nama proyek, buka Konsol ACK, navigasi ke Clusters > nama kluster Anda > Cluster Information > Basic Information, lalu periksa field Log Service Project.
NamalogStoreharus diawali denganalb_. JikalogStoreyang ditentukan tidak ada, maka akan dibuat secara otomatis.
Untuk mengaktifkan log akses pada instans ALB yang digunakan kembali, aturforceOverrideketrue. Lihat Gunakan kembali instans ALB yang ada.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
accessLogConfig:
logProject: "k8s-log-xz92lvykqj1siwvif****"
logStore: "alb_****"
#...Untuk melihat log akses yang dikumpulkan, buka tab Basic Information dan klik tautan di samping Log Service Project.
Perbarui AlbConfig
Gunakan kubectl edit untuk memodifikasi konfigurasi AlbConfig yang sudah ada.
Cari nama AlbConfig:Output yang diharapkan:
kubectl get AlbConfigNAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncsslb.com 28mEdit AlbConfig: Ganti
<ALBCONFIG_NAME>dengan nama AlbConfig Anda. Misalnya, ubah nama instans ALB:kubectl edit albconfig <ALBCONFIG_NAME>... spec: config: name: new_alb # Nama yang diperbarui ...
Cara field listeners diperbarui
Field listeners adalah array yang diperbarui dengan penggantian. Saat Anda menerapkan konfigurasi baru, sistem membandingkan tiga status untuk menentukan hasilnya:
# | Dalam konfigurasi baru | Dalam konfigurasi yang ada | Dalam last-applied-configuration | Hasil |
1 | Ya | Ya | - | Diperbarui dengan nilai konfigurasi baru. |
2 | Ya | Tidak | - | Dibuat sebagai pendengar baru. |
3 | Tidak | - | Ya | Dihapus dari konfigurasi yang ada. Mungkin diatur ulang ke default. |
4 | Tidak | Ya | Tidak | Dihapus dari konfigurasi yang ada. |
Contoh:
Diberikan tiga status berikut:
# Konfigurasi baru (file konfigurasi objek)
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005 # Baru
protocol: HTTP
# Konfigurasi yang ada
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Akan dihapus
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8004 # Akan dihapus
protocol: HTTP
# last-applied-configuration
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Akan dihapus
protocol: HTTP
- port: 8003
protocol: HTTPKonfigurasi pendengar yang dihasilkan:
listeners:
- port: 8001 # Dipertahankan (aturan 1)
protocol: HTTP
- port: 8003 # Dipertahankan (aturan 1)
protocol: HTTP
- port: 8005 # Ditambahkan (aturan 2)
protocol: HTTPPort 8001 dan 8003: dipertahankan (aturan 1).
Port 8005: ditambahkan (aturan 2).
Port 8002: dihapus (aturan 3 — ada dalam last-applied-configuration).
Port 8004: dihapus (aturan 4 — tidak ada dalam last-applied-configuration, tetapi tidak ada dalam konfigurasi baru).
Hapus AlbConfig
Sebelum menghapus AlbConfig, hapus semua resource Ingress yang terkait dengannya.
Hapus AlbConfig yang membuat instans ALB
Menghapus AlbConfig juga akan menghapus instans ALB yang terkait.
kubectl delete AlbConfig <AlbConfig_NAME>Ganti <AlbConfig_NAME> dengan nama AlbConfig.
Hapus AlbConfig untuk instans ALB yang digunakan kembali
Menghapus AlbConfig tidak akan menghapus instans ALB itu sendiri, karena instans tersebut tidak dibuat oleh AlbConfig.
(Hanya untuk ALB Ingress Controller v2.10.0-aliyun.1 atau lebih lama) Edit AlbConfig dan hapus semua entri di bawah
spec.listeners: Lewati langkah ini jika versi ALB Ingress Controller Anda lebih baru dari v2.10.0-aliyun.1.kubectl edit albconfig <AlbConfig_NAME>Hapus AlbConfig:
PentingHapus semua resource Ingress yang terkait sebelum menjalankan perintah ini.
kubectl delete AlbConfig <AlbConfig_NAME>
Hapus pendengar
Hapus entri pendengar dari spec.listeners menggunakan kubectl edit. Satu instans ALB dapat memiliki beberapa pendengar; hapus hanya yang tidak lagi Anda butuhkan.
Hapus semua Ingress yang terkait dengan pendengar sebelum menghapusnya. Jika tidak, penghapusan akan gagal.
# Sebelum: dua pendengar
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Hapus pendengar ini
protocol: HTTP
# Sesudah: satu pendengar
listeners:
- port: 8001
protocol: HTTPFAQ
Error: alb: listener port number must between [1:65535], or you should set listen port explicitly in listener config
Hal ini biasanya terjadi ketika tanda - (strip) tambahan ditempatkan sebelum certificates dalam file YAML, yang membuat entri pendengar terpisah tanpa port.
Salah:
listeners:
- port: 80
protocol: HTTP
- port: 443
protocol: HTTPS
- certificates: # "-" tambahan membuat pendengar baru tanpa port
- CertificateId: 756****-cn-hangzhou
IsDefault: trueBenar:
listeners:
- port: 80
protocol: HTTP
- port: 443
protocol: HTTPS
certificates: # Tidak ada "-", certificates milik pendengar port 443
- CertificateId: 756****-cn-hangzhou
IsDefault: trueHapus tanda - sebelum certificates agar konfigurasi sertifikat menjadi bagian dari pendengar HTTPS pada port 443.