ASMMeshConfig adalah Custom Resource (CR) dari Alibaba Cloud Service Mesh (ASM) yang mendefinisikan konfigurasi mesh-wide untuk service mesh. Mirip dengan MeshConfig milik Istio, CR ini memungkinkan Anda mengelola parameter tingkat mesh secara terpusat, seperti timeout koneksi, deteksi protokol, normalisasi path, dan kebijakan retry. Anda juga dapat menggunakannya untuk mengontrol perilaku serta kuota sumber daya injector sidecar.
Contoh konfigurasi
Contoh berikut menentukan pengaturan mesh-wide untuk instans ASM, mencakup konfigurasi koneksi, normalisasi path, kebijakan retry HTTP, konfigurasi injector sidecar, dan layanan pembatasan laju global.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMeshConfig
metadata:
name: default
spec:
connectTimeout: 30s
tcpKeepalive:
probes: 5
time: 7200s
interval: 72s
pathNormalization:
normalization: MERGE_SLASHES
defaultHttpRetryPolicy:
attempts: 3
perTryTimeout: 1s
retryOn: gateway-error,connect-failure,refused-stream
enablePrometheusMerge: true
sidecarInjectorWebhookConfiguration:
rewriteAppHTTPProbe: true
replicaCount: 2
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: '2'
memory: 2Gi
rateLimitService:
enabled: true
redis:
authSecret: redis-secret
url: redis.istio-system.svc:6379
replicas: 1
accessLogConfiguration:
logEncoding: JSON
logProject: test-project
sidecarEnabled: true
manifestPatch:
- targetRef:
kind: DaemonSet
group: apps
namespace: kube-system
selector:
labels:
app: istio-cni
patch: |
metadata:
labels:
custom.example.com/managed-by: asm
annotations:
custom.example.com/cni-version: "1.29"Untuk menggunakan semua field CRD ASMMeshConfig, instans ASM Anda harus berada pada versi 1.24 atau lebih baru. Konfigurasi rateLimitService memerlukan versi instans 1.25.6.84. Selain itu, CR ASMMeshConfig bersifat non-namespaced, dan namanya harus default. CR ASMMeshConfig dengan nama lain akan diabaikan.
Referensi bidang
Spec (Konfigurasi mesh)
Path field | Tipe | Deskripsi | Nilai contoh |
| TcpKeepalive | Mengonfigurasi pengaturan TCP keepalive. |
|
| Duration | Menentukan waktu tunggu maksimum bagi proxy Envoy untuk membuat koneksi TCP. Timeout akan memicu error |
|
| Duration | Timeout untuk deteksi protokol, digunakan untuk mengidentifikasi traffic HTTP/HTTPS. Jika protokol tidak terdeteksi dalam durasi ini, traffic akan diperlakukan sebagai TCP mentah. Penting Field ini hanya dapat dikonfigurasi pada versi ASM 1.19 dan sebelumnya. | |
| PathNormalization | Mengonfigurasi normalisasi path untuk permintaan HTTP. | |
| DefaultHttpRetryPolicy | Menentukan kebijakan retry HTTP default untuk sidecar. | |
| Bool | Jika |
|
| SidecarInjectorWebhookConfiguration | Mengonfigurasi injector sidecar. | |
| AccessLogConfiguration | Mengonfigurasi format dan pengumpulan log akses. | |
| RatelimitService | Mengonfigurasi layanan pembatasan laju global. Penting Field ini hanya dapat dikonfigurasi pada versi ASM 1.25 dan lebih baru. | |
| []PatchConfig | Field Penting Field ini hanya dapat dikonfigurasi pada versi ASM 1.27 dan lebih baru. |
TcpKeepalive
Path field | Tipe | Deskripsi | Nilai contoh | Lingkup |
| Uint32 | Jumlah maksimum probe TCP keepalive yang dikirim. Nilai |
| Koneksi TCP outbound jangka panjang. |
| Duration | Waktu idle sebelum probe keepalive pertama dikirim. |
| |
| Duration | Interval pengiriman probe keep-alive harus lebih kecil dari parameter |
|
PathNormalization
Path field | Tipe | Deskripsi | Nilai contoh | Lingkup |
| Enum | Kebijakan pemrosesan path URI:
|
| Perutean HTTP mesh-wide. |
DefaultHttpRetryPolicy
Path field | Tipe | Deskripsi | Nilai contoh | Lingkup |
| Int32 | Jumlah maksimum percobaan untuk permintaan HTTP. Pengaturan global ini hanya berlaku jika VirtualService tidak secara eksplisit menentukan kebijakan retry-nya sendiri. |
| Kebijakan perutean HTTP. |
| Duration | Timeout untuk setiap percobaan. Nilai ini harus lebih kecil dari timeout permintaan keseluruhan yang ditentukan dalam VirtualService. |
| |
| String | Menentukan kondisi yang memicu retry. Jenis error standar yang didukung meliputi |
|
SidecarInjectorWebhookConfiguration
Path field | Type | Deskripsi | Nilai contoh | Lingkup |
| Bool | Jika |
| Perilaku injeksi sidecar. |
| Int | Jumlah replika untuk controller injector sidecar guna meningkatkan ketersediaan tinggi. |
| Komponen injector sidecar. |
| Object | Konfigurasi kuota sumber daya:
| | Komponen injector sidecar. |
AccessLogConfiguration
Path field | Tipe | Deskripsi | Nilai contoh |
| String | Format output untuk log. Nilai yang valid adalah |
|
| String | Proyek Alibaba Cloud Log Service (SLS) tujuan untuk log. Penting Field ini hanya dapat dikonfigurasi pada versi ASM 1.25 dan lebih baru. |
|
| Boolean | Jika |
|
| Boolean | Jika |
|
| Boolean | Jika Penting Field ini hanya dapat dikonfigurasi pada versi ASM 1.25 dan lebih baru. |
|
| Integer | Periode retensi dalam hari untuk log akses gerbang. Default: 90. |
|
| Integer | Periode retensi dalam hari untuk log akses sidecar. Default: 90. |
|
| Integer | Periode retensi dalam hari untuk log akses Ztunnel. Default: 90. Penting Field ini hanya dapat dikonfigurasi pada versi ASM 1.25 dan lebih baru. |
|
RatelimitService
Path field | Type | Deskripsi | Nilai contoh | Lingkup |
| Bool | Menentukan apakah layanan pembatasan laju global diaktifkan. |
| Kemampuan pembatasan laju global. |
| Int | Jumlah replika untuk layanan pembatasan laju. |
| Ketersediaan dan performa layanan pembatasan laju. |
| Object | Konfigurasi sumber daya untuk layanan pembatasan laju. | | Ketersediaan dan performa layanan pembatasan laju. |
| Object | Konfigurasi untuk instans Redis yang digunakan oleh layanan pembatasan laju. Catatan Layanan pembatasan laju global menggunakan Redis untuk menyimpan kebijakan dan keputusan pembatasan laju. | | Backend status pembatasan laju. |
| String | Jenis kluster Redis. Nilai yang valid adalah |
| Backend status pembatasan laju. |
| String | Alamat Redis. |
| Backend status pembatasan laju. |
| String | Informasi autentikasi untuk Redis. Formatnya adalah | xxxxxx | Manajemen keamanan kredensial. |
| String | Nama Secret yang menyimpan kredensial autentikasi Redis. Catatan Secret ini harus dideploy di namespace | | Manajemen keamanan kredensial. |
| String | Awalan untuk kunci cache Redis. Default kosong. | N/A | Backend status pembatasan laju. |
Kami merekomendasikan penggunaan Alibaba Cloud Redis untuk memastikan ketersediaan tinggi. Anda dapat mengonfigurasi parameter rateLimitService.redis.type sesuai dengan jenis instans Redis Anda berdasarkan tabel berikut.
Jenis instans | Arsitektur | Mode koneksi | Konfigurasi |
Single-node | N/A | N/A |
|
Ketersediaan tinggi | Standard (kluster dinonaktifkan) | N/A |
|
Kluster (kluster diaktifkan) | Mode koneksi langsung |
| |
Mode proxy |
|
ASM menggabungkan seluruh konfigurasi dan secara otomatis menghasilkan konfigurasi layanan pembatasan laju bernama ratelimit-service-config di namespace istio-system. Saat Anda mengaktifkan layanan pembatasan laju, konfigurasi ini dipasang secara otomatis tanpa perlu pembaruan manual.
PatchConfig
Path field | Tipe | Deskripsi |
| TargetRef | Menentukan resource target yang akan dipatch. Saat ASM melakukan reconciling terhadap setiap resource, informasi aktual resource tersebut dicocokkan dengan kondisi dalam |
| string | Konten Strategic Merge Patch, dalam format YAML atau JSON. ASM menggabungkan patch ini ke resource target. |
TargetRef
Path field | Tipe | Wajib | Deskripsi |
| string | Ya | Kind Kubernetes dari resource target, seperti |
| string | Tidak | Grup API dari resource target, seperti |
| string | Tidak | Nama resource target. Jika tidak ditentukan, patch berlaku untuk semua resource dengan |
| string | Tidak |
|
| PatchSelector | Tidak | Memfilter lebih lanjut resource target menggunakan pemilih label. Jika tidak ditentukan, label tidak dicocokkan. |
PatchSelector
Path field | Type | Wajib | Deskripsi |
| map[string]string | Tidak | Peta pasangan kunci-nilai. Resource harus berisi semua label yang ditentukan agar cocok (logika AND). |
Saat ASM melakukan reconciling terhadap resource, aturan berikut digunakan untuk menentukan apakah targetRef cocok dengan resource tersebut:
kindharus identik dengan Kind resource tersebut.Jika
groupditentukan, harus sesuai dengan grup API resource tersebut.Jika Anda menentukan
name, harus sesuai dengan nama resource tersebut.Jika
namespaceditentukan, harus sama dengan namespace resource tersebut.Jika
selector.labelsditentukan, resource harus berisi semua label yang disebutkan (relasi AND).