Alibaba Cloud Service Mesh (ASM) menggunakan Definisi Sumber Daya Kustom (CRD) bernama IstioGateway (apiVersion: istio.alibabacloud.com/v1beta1) untuk mengelola gerbang secara deklaratif. Sebuah controller bawaan memantau perubahan pada CRD ini dan menyelaraskan Service, Penyebaran, serta ServiceAccount terkait di kluster Kubernetes tempat controller tersebut berjalan.
Topik ini menyediakan referensi bidang CRD, contoh konfigurasi, serta definisi struktur Go untuk gerbang ASM.
Persyaratan Awal
Sebuah kluster Container Service for Kubernetes (ACK) telah ditambahkan ke instans ASM Anda. Untuk informasi selengkapnya, lihat Menambahkan kluster ke instans ASM.
Deploy gerbang ASM di namespace istio-system. Gerbang membaca konfigurasinya dari namespace ini saat startup. Jika versi Istio Anda adalah 1.6 atau lebih baru dan Anda mendeploy gerbang di namespace lain, proses startup akan gagal karena gerbang tidak dapat mengambil konfigurasi yang diperlukan.
Contoh konfigurasi
Gerbang masuk minimal
YAML berikut membuat gerbang masuk dasar dengan batas sumber daya bawaan:
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: my-ingressgateway
namespace: istio-system
spec:
gatewayType: ingress
clusterIds:
- <your-cluster-id>
ports:
- name: http2
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
replicaCount: 1
serviceType: LoadBalancer
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internetGanti <your-cluster-id> dengan ID aktual kluster yang dikelola oleh instans ASM Anda.
Gerbang masuk lengkap
Contoh ini mencakup bidang opsional seperti variabel lingkungan, label Pod, batas sumber daya, pengaturan pembaruan bergulir, serta penimpaan per kluster:
Tampilkan file YAML
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: myexample-customingressgateway
namespace: istio-system
spec:
clusterIds:
- <cluster-id-1>
- <cluster-id-2> # Deploy gerbang di beberapa kluster
cpu:
targetAverageUtilization: 80
env:
- name: envname1
value: envvalue1
externalTrafficPolicy: Local
gatewayType: ingress
podLabels:
key1: value1
ports:
- name: status-port
port: 15020
targetPort: 15020
- name: http2
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 0
- name: tls
port: 15443
targetPort: 15443
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
requests:
cpu: 200m
memory: 256Mi
# configVolumes:
# - name: config-volume-lua
# configMapName: lua-libs
# mountPath: /var/lib/lua
# secretVolumes:
# - name: myexample-customingressgateway-certs
# secretName: istio-myexample-customingressgateway-certs
# mountPath: /etc/istio/myexample-customingressgateway-certs
serviceType: LoadBalancer
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
serviceLabels:
serviceLabelKey1: serviceLabelValue1
podAnnotations:
podAnnotationsKey1: podAnnotationsValue1
rollingMaxSurge: "100%"
rollingMaxUnavailable: "25%"
overrides:
<cluster-id-1>:
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
requests:
cpu: 200m
memory: 256Mi
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
<cluster-id-2>:
replicaCount: 2
resources:
limits:
cpu: '4'
memory: 4G
requests:
cpu: 400m
memory: 512Mi
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s2.smallUntuk mengelola gerbang masuk secara terprogram menggunakan klien Go, lihat Struktur Go untuk gerbang ASM.
Gerbang keluar
Gerbang keluar menyalurkan seluruh lalu lintas keluar dalam mesh. Bidang serviceType biasanya diatur ke ClusterIP karena tidak diperlukan load balancer eksternal.
Tampilkan file YAML
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: egressgateway
namespace: istio-system
spec:
autoCreateGatewayYaml: false
clusterIds:
- <your-cluster-id>
disableContainerPortExposed: true
dnsPolicy: ClusterFirst
gatewayType: egress
hostNetwork: false
podLabels:
security.istio.io/tlsMode: istio
ports:
- name: http-0
port: 80
protocol: HTTP
targetPort: 80
- name: https-1
port: 443
protocol: HTTPS
targetPort: 443
readinessProbe: {}
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 4G
requests:
cpu: 200m
memory: 256Mi
rollingMaxSurge: 25%
rollingMaxUnavailable: 25%
runAsRoot: true
serviceType: ClusterIPMembuat gerbang dari konsol
Log masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, klik nama instans ASM.
Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway (atau Egress Gateway).
Klik Create from YAML.
Pada halaman Create, masukkan nama di bidang Name, pilih istio-system dari daftar tarik-turun Namespace, tempel konfigurasi YAML, lalu klik Create.
Verifikasi gerbang
Setelah Anda membuat gerbang, verifikasi bahwa Service dan Pod berjalan.
Log masuk ke Konsol ACK. Di panel navigasi, klik Clusters.
Klik nama kluster. Di panel kiri, pilih Network > Services.
Pilih istio-system dari daftar tarik-turun Namespace dan pastikan Service gerbang ada.
Di panel kiri, pilih Workloads > Pods. Pilih istio-system dari daftar tarik-turun Namespace dan pastikan Pod gerbang berjalan.
Referensi bidang CRD
Bidang inti
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
metadata.name | string | Nama gerbang ASM. Service dan Penyebaran Kubernetes yang dihasilkan keduanya bernama istio-{metadata.name}. | Tidak ada |
metadata.namespace | string | Namespace untuk gerbang ASM. Service dan Penyebaran yang dihasilkan berada di namespace ini. Penting Harus berupa | istio-system |
gatewayType | string | Jenis gerbang. Nilai yang valid: ingress (menyalurkan lalu lintas masuk) dan egress (menyalurkan lalu lintas keluar). | ingress |
clusterIds | string[] | ID kluster tempat gerbang akan didistribusikan. Setiap kluster harus dikelola oleh instans ASM saat ini. | Tidak ada |
Konfigurasi Service
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
serviceType | string | Jenis Service Kubernetes. Nilai yang valid: LoadBalancer, NodePort, ClusterIP. Untuk gerbang keluar, biasanya diatur ke ClusterIP. Penting Jika Anda menggunakan kluster terdaftar dan mengatur nilai ini ke | LoadBalancer |
loadBalancerClass | string | Nilai loadBalancerClass untuk Service. Hanya berlaku ketika serviceType adalah LoadBalancer. Memerlukan ASM versi 1.18 atau lebih baru. Untuk informasi selengkapnya, lihat Mengaitkan instans NLB dengan gerbang masuk. | Tidak ada |
externalTrafficPolicy | string | Menentukan apakah lalu lintas masuk diarahkan ke titik akhir lokal node atau titik akhir berskala kluster. Nilai yang valid: Cluster, Local. Hanya berlaku untuk gerbang masuk. | Cluster |
serviceAnnotations | map[string]string | Anotasi pada Service gerbang. Hanya berlaku untuk gerbang dengan serviceType yang diatur ke LoadBalancer. Biasanya tidak dikonfigurasi untuk gerbang keluar. Untuk anotasi umum, lihat Menggunakan anotasi untuk mengonfigurasi penyeimbangan beban. | Tidak ada |
serviceLabels | map[string]string | Label pada Service gerbang. | Tidak ada |
ports | ServicePort[] | Port Service yang diekspos oleh gerbang. Setiap entri mencakup name, port, targetPort, dan secara opsional protocol. Catatan Pada versi sebelum 1.9.7.107, atur | Tidak ada |
Konfigurasi Pod
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
replicaCount | int32 | Jumlah replika Pod. | 1 |
resources | ResourceRequirements | Permintaan dan batas sumber daya CPU serta memori. | batas: CPU 2, memori 2G; permintaan: CPU 200m, memori 256Mi |
env | EnvVar[] | Variabel lingkungan yang disuntikkan ke kontainer gerbang. | Tidak ada |
podLabels | map[string]string | Label pada Pod gerbang. | Tidak ada |
podAnnotations | map[string]string | Anotasi pada Pod gerbang. | Tidak ada |
nodeSelector | map[string]string | Label node yang digunakan untuk menjadwalkan Pod gerbang ke node tertentu. | Tidak ada |
affinity | Affinity | Aturan afinitas node untuk menjadwalkan Pod gerbang. Untuk informasi selengkapnya, lihat Afinitas dan anti-afinitas. | Tidak ada |
tolerations | Toleration[] | Toleransi yang memungkinkan Pod gerbang dijadwalkan ke node dengan taint yang cocok. Untuk informasi selengkapnya, lihat Taint dan Toleransi. | Tidak ada |
hostNetwork | bool | Apakah Pod gerbang berbagi namespace jaringan host. | false |
dnsPolicy | string | Kebijakan DNS untuk Pod gerbang. Untuk informasi selengkapnya, lihat DNS untuk Service dan Pod. | ClusterFirst |
runAsRoot | bool | Apakah kontainer gerbang dijalankan sebagai root. | false |
readinessProbe | ReadinessProbeConfiguration | Pengaturan probe kesiapan untuk Pod gerbang. | Tidak ada |
Konfigurasi Penyebaran
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
rollingMaxSurge | string | Jumlah maksimum Pod yang boleh melebihi jumlah replika yang diinginkan selama pembaruan bergulir. Menerima nilai absolut atau persentase. | "100%" |
rollingMaxUnavailable | string | Jumlah maksimum Pod yang boleh tidak tersedia selama pembaruan bergulir. Menerima nilai absolut atau persentase. | "25%" |
Pemasangan volume
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
configVolumes | ConfigVolume[] | Volume ConfigMap yang dipasang ke Pod gerbang. Setiap entri mencakup name, configMapName, dan mountPath. | Tidak ada |
secretVolumes | SecretVolume[] | Volume rahasia yang dipasang ke Pod gerbang. Setiap entri mencakup name, secretName, dan mountPath. | Tidak ada |
Contoh volume ConfigMap:
configVolumes:
- name: config-volume-lua
configMapName: lua-libs
mountPath: /var/lib/luaContoh volume rahasia:
secretVolumes:
- name: myexample-customingressgateway-certs
secretName: istio-myexample-customingressgateway-certs
mountPath: /etc/istio/myexample-customingressgateway-certsHorizontal Pod Autoscaling (HPA)
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
cpu.targetAverageUtilization | int32 | Target utilisasi CPU (1–100). Ketika utilisasi melebihi ambang batas ini, HPA melakukan penskalaan naik. Ketika utilisasi turun di bawahnya, HPA melakukan penskalaan turun. | Tidak ada |
memory.targetAverageUtilization | int32 | Target utilisasi memori (1–100). Mengikuti perilaku penskalaan yang sama seperti CPU. | Tidak ada |
maxReplicas | int32 | Jumlah maksimum replika yang dapat dicapai oleh HPA. Harus berupa bilangan bulat positif. | Tidak ada |
minReplicas | int32 | Jumlah minimum replika yang dapat dicapai oleh HPA. Harus berupa bilangan bulat positif (nilai minimum: 1). | Tidak ada |
Penimpaan per kluster
Gunakan bidang overrides untuk menerapkan pengaturan berbeda per kluster ketika clusterIds mencakup dua kluster atau lebih.
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
overrides | map[string]Configuration | Peta di mana setiap kunci adalah ID kluster dari bidang clusterIds dan nilainya berisi pengaturan spesifik kluster. | Tidak ada |
Bidang berikut dapat ditimpa per kluster:
serviceAnnotationspodAnnotationsresourcesreplicaCountBidang terkait HPA (ASM versi 1.16 atau lebih baru)
serviceType(ASM versi 1.16 atau lebih baru)
Contoh:
overrides:
cluster1Id:
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
cluster2Id:
replicaCount: 2
resources:
limits:
cpu: '4'
memory: 4GPenyetelan kernel
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
kernel.enabled | bool | Apakah akan menerapkan parameter kernel khusus ke Pod gerbang. | false |
kernel.parameters | KernelParameters | Parameter sysctl untuk penyetelan. Semua nilai harus berupa string — kelilingi angka dengan tanda kutip ganda (misalnya, net.core.somaxconn: "65535"). | Tidak ada |
Parameter kernel yang didukung:
net.core.somaxconn, net.core.netdev_max_backlog, net.ipv4.tcp_rmem, net.ipv4.tcp_wmem, net.ipv4.ip_local_port_range, net.ipv4.tcp_fin_timeout, net.ipv4.tcp_tw_timeout, net.ipv4.tcp_tw_reuse, net.ipv4.tcp_tw_recycle, net.ipv4.tcp_timestamps, net.ipv4.tcp_retries2, net.ipv4.tcp_slow_start_after_idle, net.ipv4.tcp_max_orphans, net.ipv4.tcp_max_syn_backlog, net.ipv4.tcp_no_metrics_save, net.ipv4.tcp_autocorking, kernel.printk, vm.swappiness
Beberapa parameter kernel mungkin tidak valid tergantung pada versi kernel host. Jika Pod gerbang melaporkan kesalahan, jalankan kubectl describe pod untuk mengidentifikasi parameter yang tidak valid, lalu hapus parameter tersebut.Kompresi (hanya untuk gerbang masuk)
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
compression.enabled | bool | Apakah akan mengaktifkan kompresi respons. | false |
compression.gzip | GzipConfiguration | Pengaturan kompresi Gzip. Diperlukan untuk mengaktifkan kompresi. Atur ke gzip: {} untuk menggunakan semua nilai bawaan. | Tidak ada |
compression.content_type | string[] | Jenis konten yang akan dikompresi, diidentifikasi oleh header Content-Type (misalnya, text/html, application/json). | Tidak ada |
compression.min_content_length | uint32 | Ukuran minimum badan respons (dalam byte) yang memicu kompresi, berdasarkan header Content-Length. | 30 |
compression.disable_on_etag_header | bool | Ketika diatur ke true, kompresi dinonaktifkan untuk respons yang menyertakan header ETag. | false |
compression.remove_accept_encoding_header | bool | Ketika diatur ke true, header Accept-Encoding dihapus dari permintaan sebelum diteruskan ke server upstream. | false |
Pengaturan Gzip
| Bidang | Jenis | Deskripsi | Bawaan |
|---|---|---|---|
compression.gzip.memory_level | uint32 | Tingkat penggunaan memori untuk pustaka zlib (1–9). Nilai yang lebih tinggi menggunakan lebih banyak memori tetapi meningkatkan kecepatan dan kualitas kompresi. | 5 |
compression.gzip.compression_level | string | Tingkat kompresi untuk pustaka zlib. Nilai yang valid: COMPRESSION_LEVEL_1 hingga COMPRESSION_LEVEL_9, DEFAULT_COMPRESSION, BEST_SPEED, BEST_COMPRESSION. Tingkat 1 setara dengan BEST_SPEED. Tingkat 9 setara dengan BEST_COMPRESSION. Tingkat 6 setara dengan DEFAULT_COMPRESSION. | DEFAULT_COMPRESSION |
compression.gzip.compression_strategy | string | Strategi kompresi untuk pustaka zlib. Nilai yang valid: DEFAULT_STRATEGY, FILTERED, HUFFMAN_ONLY, RLE, FIXED. | DEFAULT_STRATEGY |
compression.gzip.window_bits | uint32 | Ukuran jendela untuk pustaka zlib (9–15). Nilai yang lebih tinggi meningkatkan rasio kompresi tetapi juga meningkatkan penggunaan memori. | 12 |
compression.gzip.chunk_size | uint32 | Ukuran buffer keluaran untuk pustaka zlib. | 4096 |
Detail strategi kompresi:
| Strategi | Skenario penggunaan |
|---|---|
DEFAULT_STRATEGY | Kompresi tujuan umum. Berfungsi baik untuk sebagian besar data. |
FILTERED | Data dengan banyak pola berulang, seperti teks atau data hasil generasi. |
HUFFMAN_ONLY | Data statis di mana kecepatan dekompresi menjadi prioritas utama. |
RLE | Data dengan urutan panjang byte berulang, seperti bitmap. |
FIXED | Menggunakan pohon Huffman coding yang telah ditentukan sebelumnya untuk kompresi dan dekompresi cepat, dengan mengorbankan rasio kompresi. |
Bidang yang memicu restart bergulir
Mengubah salah satu bidang berikut menyebabkan restart bergulir pada Pod gerbang. Rencanakan perubahan dengan cermat di lingkungan produksi.
| Bidang | Catatan |
|---|---|
env | |
ports | Di ASM v1.16 atau versi lebih baru, perubahan pada ports tidak lagi memicu restart. |
configVolumes | |
resources | |
secretVolumes | |
podLabels | |
podAnnotations | |
kernel.enabled | |
kernel.parameters | |
hostNetwork | |
dnsPolicy | |
nodeSelector | Restart bergantung pada penjadwalan Pod. |
affinity | Restart bergantung pada penjadwalan Pod. |
tolerations | Restart bergantung pada penjadwalan Pod. |