Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Add-on mesh layanan Istio mendukung API manajemen lalu lintas ingress milik Istio dan API Gateway Kubernetes untuk manajemen lalu lintas ingress. Anda dapat menggunakan model penyebaran otomatis API Istio Gateway atau model penyebaran manual. Artikel ini menjelaskan cara mengonfigurasi manajemen lalu lintas ingress untuk add-on jala layanan Istio menggunakan API Gateway Kubernetes dengan model penyebaran otomatis.
Anda dapat menggunakan konfigurasi ini untuk ingress tanpa menambahkan sidecar ke aplikasi Anda. Bidang kontrol Istio terkelola dan proksi gateway masih berjalan. Anda harus memulai dan menyelesaikan peningkatan kenari untuk pembaruan revisi kecil, bahkan saat menggunakan add-on hanya untuk masuk.
Batasan dan pertimbangan
- Add-on mesh layanan Istio dan implementasi API Gateway perutean aplikasi tidak dapat diaktifkan secara bersamaan. Anda harus menonaktifkan satu terlebih dahulu dan mengaktifkan yang lain dalam operasi terpisah.
- Menggunakan API Gateway Kubernetes untuk manajemen trafik keluar dengan add-on Istio hanya didukung pada model penyebaran manual.
- Kustomisasi ConfigMap untuk
Gatewaysumber daya harus termasuk dalam daftar izin kustomisasi sumber daya. Bidang yang tidak ada dalam daftar yang diizinkan tidak diizinkan dan diblokir melalui webhook terkelola add-on. Lihat kebijakan dukungan add-on Istio untuk informasi selengkapnya tentang fiturallowed,blocked, dansupported. - Add-on ini memungkinkan penggunaan sumber daya
EnvoyFilter, tetapi dukungan Azure tidak mencakup masalah yang disebabkan oleh konfigurasi sumber daya tersebut. Lihat batasan add-on Istio dan kebijakan dukungan. - Mengonfigurasi akses ingress HTTPS ke layanan HTTPS—yaitu penerusan Server Name Indication (SNI)—melalui resource
TLSRoutetidak didukung pada revisi add-on service mesh Istioasm-1-29. Dukungan untuk resourceTLSRouteakan tersedia untuk revisi add-on service mesh Istioasm-1-30dan yang lebih baru. - Menyuntikkan sidecar yang tidak dikelola Microsoft (misalnya, telemetri kustom, pencatatan log, atau agen keamanan) ke dalam pod proksi gateway ingress Istio yang dikelola oleh add-on tidak didukung secara resmi. Jika Anda memilih untuk menyisipkan sidecar Anda sendiri ke dalam pod proksi terkelola, Microsoft hanya memberikan dukungan sebatas upaya terbaik atas masalah apa pun yang Anda alami.
Prasyarat
- Aktifkan API Gateway Terkelola pada kluster AKS Anda.
- Instal revisi
asm-1-26add-on mesh layanan Istio atau lebih tinggi. Ikuti panduan penginstalan jika Anda belum menginstal add-on Istio service mesh, atau panduan peningkatan jika Anda berada di versi minor yang lebih rendah. Jika Anda hanya menggunakan add-on untuk ingress, lewati langkah-langkah injeksi sidecar dalam panduan instalasi.
Atur variabel lingkungan
Atur variabel lingkungan berikut untuk digunakan di seluruh artikel ini:
| Variable | Description |
|---|---|
RESOURCE_GROUP |
Nama grup sumber daya yang berisi kluster AKS Anda. |
CLUSTER_NAME |
Nama kluster AKS Anda. |
LOCATION |
Wilayah Azure tempat kluster AKS Anda dideploy. |
KEY_VAULT_NAME |
Nama sumber daya Azure Key Vault yang akan dibuat untuk menyimpan rahasia TLS. Jika Anda memiliki sumber daya yang sudah ada, gunakan nama tersebut. |
Sebarkan aplikasi sampel
Pertama, sebarkan aplikasi sampel
httpbindidefaultnamespace menggunakankubectl applyperintah .export ISTIO_RELEASE="release-1.27" kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_RELEASE/samples/httpbin/httpbin.yaml
Membuat Gateway Kubernetes dan HTTPRoute
Contoh manifes ini membuat layanan ingress load balancer eksternal yang dapat diakses dari luar kluster. Anda dapat menambahkan anotasi untuk membuat load balancer internal dan menyesuaikan pengaturan load balancer lainnya.
Sebarkan konfigurasi API Gateway di namespace
defaultdengangatewayClassNamediatur keistiodanHTTPRouteyang merutekan lalu lintas ke layananhttpbinmenggunakan manifes berikut:kubectl apply -f - <<EOF apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: httpbin-gateway spec: gatewayClassName: istio listeners: - name: http port: 80 protocol: HTTP allowedRoutes: namespaces: from: Same --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: httpbin spec: parentRefs: - name: httpbin-gateway hostnames: ["httpbin.example.com"] rules: - matches: - path: type: PathPrefix value: /get backendRefs: - name: httpbin port: 8000 EOFNota
Secara default, sarana kontrol Istio akan menambahkan
GatewayClassnama ke namaistiosumber daya yang disediakannya untukGateway. Anda dapat memberi anotasi pada sumber dayaGatewayAnda dengangateway.istio.io/name-overrideuntuk mengganti nama sumber daya yang disediakan. Nama sumber daya harus kurang dari63karakter dan harus berupa nama DNS yang valid.Nota
Jika Anda melakukan peningkatan revisi kecil dan memiliki dua revisi add-on jala layanan Istio yang diinstal pada kluster Anda secara bersamaan, sarana kontrol untuk revisi minor yang lebih tinggi mengambil kepemilikan
Gatewayssecara default. Anda dapat menambahkanistio.io/revlabel keGatewayuntuk mengontrol revisi sarana kontrol mana yang memilikinya. Jika Anda menambahkan label revisi, pastikan Anda memperbaruinya sesuai dengan revisi sarana kontrol yang sesuai sebelum menggulung balik atau menyelesaikan operasi peningkatan.
Memverifikasi pembuatan sumber daya
Verifikasi bahwa sumber daya
Deployment,Service,HorizontalPodAutoscaler, danPodDisruptionBudgettelah dibuat menggunakan perintah berikutkubectl get:kubectl get deployment httpbin-gateway-istio kubectl get service httpbin-gateway-istio kubectl get hpa httpbin-gateway-istio kubectl get pdb httpbin-gateway-istioContoh output:
# Deployment resource NAME READY UP-TO-DATE AVAILABLE AGE httpbin-gateway-istio 2/2 2 2 31m # Service resource NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpbin-gateway-istio LoadBalancer 10.0.65.45 <external-ip> 15021:32053/TCP,80:31587/TCP 33m # HPA resource NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE httpbin-gateway-istio Deployment/httpbin-gateway-istio cpu: 3%/80% 2 5 3 34m # PDB resource NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE httpbin-gateway-istio 1 N/A 2 36m
Mengirim permintaan ke aplikasi sampel
Coba kirim
curlpermintaan kehttpbinaplikasi. Pertama, aturINGRESS_HOSTvariabel lingkungan:kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -ojsonpath='{.status.addresses[0].value}')Coba kirim permintaan HTTP ke
httpbin.curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"Dalam output, Anda seharusnya melihat tanggapan
HTTP 200.
Mengamankan lalu lintas masuk Istio dengan API Gateway Kubernetes
Add-on jala layanan Istio mendukung sinkronisasi rahasia dari Azure Key Vault untuk mengamankan lalu lintas masuk berbasis API Gateway dengan penghentian Transport Layer Security (TLS). Di bagian berikut, Anda menyinkronkan rahasia dari Azure Key Vault ke kluster AKS menggunakan penyedia Azure Key Vault untuk add-on Driver Secrets Store Container Storage Interface (CSI) dan menghentikan TLS di gateway masuk.
Membuat sertifikat dan kunci klien/server
Buat sertifikat akar dan kunci privat untuk menandatangani sertifikat untuk layanan sampel:
mkdir httpbin_certs openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=example Inc./CN=example.com' -keyout httpbin_certs/example.com.key -out httpbin_certs/example.com.crtBuat sertifikat dan kunci privat untuk
httpbin.example.com:openssl req -out httpbin_certs/httpbin.example.com.csr -newkey rsa:2048 -nodes -keyout httpbin_certs/httpbin.example.com.key -subj "/CN=httpbin.example.com/O=httpbin organization" openssl x509 -req -sha256 -days 365 -CA httpbin_certs/example.com.crt -CAkey httpbin_certs/example.com.key -set_serial 0 -in httpbin_certs/httpbin.example.com.csr -out httpbin_certs/httpbin.example.com.crt
Menyiapkan Azure Key Vault dan membuat kunci rahasia
Buat instans Azure Key Vault untuk menyediakan sertifikat dan input kunci ke add-on jala layanan Istio menggunakan perintah
az keyvault create. Jika Anda sudah memiliki instans Azure Key Vault, Anda dapat melewati langkah ini.az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATIONAktifkan penyedia Azure Key Vault untuk Secrets Store (CSI) Driver add-on pada kluster Anda menggunakan perintah
az aks enable-addons.az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEJika key vault Anda menggunakan kontrol akses berbasis peran (RBAC) Azure untuk model izin, ikuti instruksi di Memberikan akses ke kunci, sertifikat, dan rahasia Azure Key Vault dengan kontrol akses berbasis peran Azure untuk menetapkan peran Azure Pengguna Rahasia Key Vault untuk identitas terkelola yang ditetapkan pengguna add-on. Atau, jika brankas kunci Anda menggunakan model izin kebijakan akses brankas, otorisasikan identitas terkelola yang ditetapkan pengguna dari add-on untuk mengakses sumber daya Azure Key Vault dengan kebijakan akses menggunakan perintah
az keyvault set-policy.OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId' -o tsv | tr -d '\r') CLIENT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.clientId') TENANT_ID=$(az keyvault show --resource-group $RESOURCE_GROUP --name $KEY_VAULT_NAME --query 'properties.tenantId') az keyvault set-policy --name $KEY_VAULT_NAME --object-id $OBJECT_ID --secret-permissions get listBuat rahasia di Azure Key Vault menggunakan sertifikat dan kunci menggunakan perintah
az keyvault secret setberikut:az keyvault secret set --vault-name $KEY_VAULT_NAME --name test-httpbin-key --file httpbin_certs/httpbin.example.com.key az keyvault secret set --vault-name $KEY_VAULT_NAME --name test-httpbin-crt --file httpbin_certs/httpbin.example.com.crt
Menyebarkan SecretProviderClass dan pod sampel
Sebarkan SecretProviderClass untuk menyediakan parameter khusus Azure Key Vault ke driver CSI menggunakan manifes berikut. Dalam contoh ini,
test-httpbin-keydantest-httpbin-crtadalah nama objek rahasia dalam Azure Key Vault.cat <<EOF | kubectl apply -f - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: httpbin-credential-spc spec: provider: azure secretObjects: - secretName: httpbin-credential type: kubernetes.io/tls data: - objectName: test-httpbin-key key: tls.key - objectName: test-httpbin-crt key: tls.crt parameters: useVMManagedIdentity: "true" userAssignedIdentityID: $CLIENT_ID keyvaultName: $KEY_VAULT_NAME cloudName: "" objects: | array: - | objectName: test-httpbin-key objectType: secret objectAlias: "test-httpbin-key" - | objectName: test-httpbin-crt objectType: secret objectAlias: "test-httpbin-crt" tenantId: $TENANT_ID EOFNota
Atau, untuk mereferensikan jenis objek sertifikat langsung dari Azure Key Vault, gunakan manifes berikut untuk menyebarkan SecretProviderClass. Dalam contoh ini,
test-httpbin-cert-pfxadalah nama objek sertifikat di Azure Key Vault.cat <<EOF | kubectl apply -f - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: httpbin-credential-spc spec: provider: azure secretObjects: - secretName: httpbin-credential type: kubernetes.io/tls data: - objectName: test-httpbin-key key: tls.key - objectName: test-httpbin-crt key: tls.crt parameters: useVMManagedIdentity: "true" userAssignedIdentityID: $CLIENT_ID keyvaultName: $KEY_VAULT_NAME cloudName: "" objects: | array: - | objectName: test-httpbin-cert-pfx #certificate object name from keyvault objectType: secret objectAlias: "test-httpbin-key" - | objectName: test-httpbin-cert-pfx #certificate object name from keyvault objectType: cert objectAlias: "test-httpbin-crt" tenantId: $TENANT_ID EOFSebarkan pod sampel menggunakan manifes berikut. Penyedia Azure Key Vault untuk add-on Driver Secrets Store (CSI) memerlukan pod untuk mereferensikan sumber daya SecretProviderClass untuk memastikan sinkronisasi rahasia dari Azure Key Vault ke kluster.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: secrets-store-sync-httpbin spec: containers: - name: busybox image: mcr.microsoft.com/oss/busybox/busybox:1.33.1 command: - "/bin/sleep" - "10" volumeMounts: - name: secrets-store01-inline mountPath: "/mnt/secrets-store" readOnly: true volumes: - name: secrets-store01-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "httpbin-credential-spc" EOF
Memverifikasi pembuatan rahasia TLS
httpbin-credentialVerifikasi bahwa rahasia dibuat didefaultnamespace seperti yang didefinisikan dalam sumber daya SecretProviderClass menggunakan perintahkubectl describe secret.kubectl describe secret/httpbin-credentialContoh output:
Name: httpbin-credential Namespace: default Labels: secrets-store.csi.k8s.io/managed=true Annotations: <none> Type: kubernetes.io/tls Data ==== tls.crt: 1180 bytes tls.key: 1675 bytes
Menyebarkan Gateway TLS
Buat Gateway Kubernetes yang mereferensikan
httpbin-credentialrahasia di bawah konfigurasi TLS menggunakan manifes berikut:cat <<EOF | kubectl apply -f - apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: httpbin-gateway spec: gatewayClassName: istio listeners: - name: https hostname: "httpbin.example.com" port: 443 protocol: HTTPS tls: mode: Terminate certificateRefs: - name: httpbin-credential allowedRoutes: namespaces: from: Selector selector: matchLabels: kubernetes.io/metadata.name: default EOFNota
Dalam definisi gateway,
tls.certificateRefs.nameharus cocok dengansecretNamedi sumber daya SecretProviderClass.Buat
HTTPRouteyang sesuai untuk mengonfigurasi perutean lalu lintas masuk ke layananhttpbinmelalui HTTPS menggunakan manifes berikut:cat <<EOF | kubectl apply -f - apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: httpbin spec: parentRefs: - name: httpbin-gateway hostnames: ["httpbin.example.com"] rules: - matches: - path: type: PathPrefix value: /status - path: type: PathPrefix value: /delay backendRefs: - name: httpbin port: 8000 EOFDapatkan alamat IP eksternal dari gateway ingress dan port yang aman menggunakan perintah berikut:
kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -o jsonpath='{.status.addresses[0].value}') export SECURE_INGRESS_PORT=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -o jsonpath='{.spec.listeners[?(@.name=="https")].port}')Kirim permintaan HTTPS untuk mengakses
httpbinlayanan:curl -v -HHost:httpbin.example.com --resolve "httpbin.example.com:$SECURE_INGRESS_PORT:$INGRESS_HOST" \ --cacert httpbin_certs/example.com.crt "https://httpbin.example.com:$SECURE_INGRESS_PORT/status/418"Output perlu menunjukkan layanan
httpbinmengembalikan kode 418 I’m a Teapot.Nota
Untuk mengonfigurasi akses masuk HTTPS ke layanan HTTPS, perbarui mode TLS dalam definisi gateway ke
Passthrough. Konfigurasi ini menginstruksikan gateway untuk melewati lalu lintas masuk apa adanya, tanpa mengakhiri TLS.
Kustomisasi anotasi
Anda dapat menambahkan anotasi di bawah spec.infrastructure.annotations untuk mengonfigurasi pengaturan load balancer untuk Gateway. Misalnya, untuk membuat load balancer internal yang terpasang pada subnet tertentu, Anda dapat membuat dengan anotasi Gateway berikut:
spec:
# ... existing spec content ...
infrastructure:
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "my-subnet"
Kustomisasi ConfigMap
Add-on mesh layanan Istio mendukung penyesuaian atas sumber daya yang dihasilkan untuk Gateways, termasuk:
- Pelayanan
- Penyebaran
- Pod Autoscaler Horizontal (HPA)
- Anggaran Gangguan Pod (Pod Disruption Budget)
Pengaturan default untuk sumber daya ini diatur dalam istio-gateway-class-defaults ConfigMap di aks-istio-system namespace, yang disediakan oleh AKS ketika CRD API Managed Gateway diaktifkan bersamaan dengan add-on Istio. ConfigMap ini harus memiliki label yang gateway.istio.io/defaults-for-class disetel ke istio agar kustomisasi dapat diterapkan dan berfungsi untuk semua Gateways dengan spec.gatewayClassName: istio.
GatewayClass-level ConfigMap diinstal secara default di aks-istio-system namespace ketika Managed Gateway API installation diaktifkan. Diperlukan waktu hingga lima menit untuk menyebarkan istio-gateway-class-defaults ConfigMap setelah menginstal Gateway Terkelola API CRD.
Nota
istio-gateway-class-defaults ConfigMap disediakan dan direkonsiliasi oleh AKS ketika Managed Gateway API CRDs dan add-on Istio diaktifkan secara bersamaan. Jika sebelumnya Anda membuat istio-gateway-class-defaults ConfigMap di aks-istio-system namespace sendiri, Anda harus menghapus instans ConfigMap buatan sendiri sebelum mengaktifkan CRD API Gateway Terkelola untuk menghindari konflik dengan sinkronisasi ConfigMap yang dikelola AKS.
kubectl get configmap istio-gateway-class-defaults -n aks-istio-system -o yaml
...
data:
horizontalPodAutoscaler: |
spec:
minReplicas: 2
maxReplicas: 5
podDisruptionBudget: |
spec:
minAvailable: 1
...
Anda dapat mengubah pengaturan ini untuk semua Istio Gateways di tingkat GatewayClass dengan memperbarui istio-gateway-class-defaults ConfigMap, atau Anda dapat mengaturnya untuk individual sumber daya Gateway. Untuk level GatewayClass dan level Gateway, Anda harus menambahkan bidang ke daftar izin untuk sumber daya yang diberikan. Jika ada penyesuaian baik untuk GatewayClass atau untuk individu Gateway, konfigurasi tingkat Gateway lebih diutamakan.
Penyesuaian penyebaran memungkinkan bidang daftar
| Jalur bidang | Description |
|---|---|
metadata.labels |
Label penyebaran |
metadata.annotations |
Anotasi penyebaran |
spec.minReadySeconds |
Pemeriksaan kesiapan penyebaran |
spec.replicas |
Jumlah replika penyebaran |
spec.template.metadata.labels |
Label pod |
spec.template.metadata.annotations |
Anotasi pod |
spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms |
Afinitas node |
spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution |
Afinitas node |
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution |
Afinitas pod |
spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution |
Afinitas pod |
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution |
Pod dengan anti-afinitas |
spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution |
Pod dengan anti-afinitas |
spec.template.spec.containers.resizePolicy |
Pemanfaatan sumber daya kontainer |
spec.template.spec.containers.resources.limits |
Pemanfaatan sumber daya kontainer |
spec.template.spec.containers.resources.requests |
Pemanfaatan sumber daya kontainer |
spec.template.spec.containers.stdin |
Penelusuran kesalahan kontainer |
spec.template.spec.containers.stdinOnce |
Penelusuran kesalahan kontainer |
spec.template.spec.nodeSelector |
Penjadwalan pod |
spec.template.spec.nodeName |
Penjadwalan pod |
spec.template.spec.tolerations |
Penjadwalan pod |
spec.template.spec.topologySpreadConstraints |
Penjadwalan pod |
spec.template.spec.terminationGracePeriodSeconds |
Siklus hidup Pod |
Kustomisasi layanan memperbolehkan bidang daftar
| Jalur bidang | Description |
|---|---|
metadata.labels |
Label layanan |
metadata.annotations |
Anotasi layanan |
spec.type |
Jenis layanan |
spec.loadBalancerSourceRanges |
Pengaturan penyeimbang beban layanan |
spec.loadBalancerClass |
Pengaturan penyeimbang beban layanan |
spec.externalTrafficPolicy |
Kebijakan lalu lintas layanan |
spec.internalTrafficPolicy |
Kebijakan lalu lintas layanan |
spec.healthCheckNodePort |
Pengaturan probe kesehatan layanan |
Nota
add-on Istio menambahkan anotasi Azure Load Balancer ke Service Gateway untuk mengonfigurasi probe kesehatan untuk pengaturan default externalTrafficPolicy, yaitu "Cluster." Jika Anda menetapkan spec.externalTrafficPolicy ke "Local," Anda harus menghapus anotasi berikut, baik di ConfigMap tingkat GatewayClass maupun di ConfigMap per-Gateway:
service: |
spec:
externalTrafficPolicy: Local
metadata:
annotations:
service.beta.kubernetes.io/port_80_health-probe_port:
service.beta.kubernetes.io/port_80_health-probe_protocol:
service.beta.kubernetes.io/port_80_health-probe_request-path:
Kustomisasi HorizontalPodAutoscaler (HPA) memungkinkan daftar bidang yang diizinkan
| Jalur bidang | Description |
|---|---|
metadata.labels |
Label HPA |
metadata.annotations |
Anotasi HPA |
spec.behavior.scaleUp.stabilizationWindowSeconds |
Perilaku pengembangan skala HPA |
spec.behavior.scaleUp.selectPolicy |
Perilaku pengembangan skala HPA |
spec.behavior.scaleUp.policies |
Perilaku pengembangan skala HPA |
spec.behavior.scaleDown.stabilizationWindowSeconds |
Perilaku penurunan skala HPA |
spec.behavior.scaleDown.selectPolicy |
Perilaku penurunan skala HPA |
spec.behavior.scaleDown.policies |
Perilaku penurunan skala HPA |
spec.metrics |
Metrik penskalan sumber daya HPA |
spec.minReplicas |
Jumlah replika minimum HPA. Tidak boleh di bawah 2. |
spec.maxReplicas |
Jumlah replika maksimum HPA |
Kustomisasi PodDisruptionBudget (PDB) memungkinkan bidang daftar
| Jalur bidang | Description |
|---|---|
metadata.labels |
Label PDB |
metadata.annotations |
Anotasi PDB |
spec.minAvailable |
Ketersediaan minimum PDB |
spec.unhealthyPodEvictionPolicy |
Kebijakan pengeluaran PDB |
Nota
Memodifikasi PDB ketersediaan minimum dan kebijakan pengeluaran dapat menyebabkan potensi kesalahan selama operasi peningkatan dan penghapusan kluster/node. Ikuti panduan pemecahan masalah PDB untuk mengatasi kesalahan UpgradeFailed karena PDB kegagalan pengeluaran.
Mengonfigurasi pengaturan pada tingkat GatewayClass
Perbarui ConfigMap tingkat
GatewayClassdi namespaceaks-istio-systemmenggunakan perintahkubectl edit configmap.kubectl edit cm istio-gateway-class-defaults -n aks-istio-systemEdit pengaturan sumber daya di bagian
datasesuai kebutuhan. Misalnya, untuk memperbarui replika HPA min/maks dan menambahkan label keDeployment, ubah ConfigMap sebagai berikut:... data: deployment: | metadata: labels: test.azureservicemesh.io/deployment-config: "updated" horizontalPodAutoscaler: | spec: minReplicas: 3 maxReplicas: 6 podDisruptionBudget: | spec: minAvailable: 1 ...Nota
Hanya satu ConfigMap per
GatewayClassyang diizinkan.Sekarang, Anda akan melihat
HPAuntukhttpbin-gatewayyang Anda buat sebelumnya diperbarui dengan nilai min/maks baru.HPAVerifikasi pengaturan menggunakankubectl get hpaperintah .kubectl get hpa httpbin-gateway-istioContoh output:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE httpbin-gateway-istio Deployment/httpbin-gateway-istio cpu: 3%/80% 3 6 3 36mVerifikasikan
Deploymentsudah diperbarui dengan label baru menggunakan perintahkubectl get deployment.kubectl get deployment httpbin-gateway-istio -ojsonpath='{.metadata.labels.test\.azureservicemesh\.io\/deployment-config}'Contoh output:
updated
Mengonfigurasi pengaturan untuk gateway tertentu
Buat ConfigMap dengan kustomisasi sumber daya untuk
httpbinGateway menggunakan manifes berikut:kubectl apply -f - <<EOF apiVersion: v1 kind: ConfigMap metadata: name: gw-options data: horizontalPodAutoscaler: | spec: minReplicas: 2 maxReplicas: 4 deployment: | metadata: labels: test.azureservicemesh.io/deployment-config: "updated-per-gateway" EOFPerbarui
httpbinGatewayuntuk mereferensikan ConfigMap.spec: # ... existing spec content ... infrastructure: parametersRef: group: "" kind: ConfigMap name: gw-optionsTerapkan pembaruan menggunakan
kubectl applyperintah .kubectl apply -f httpbin-gateway-updated.yamlPastikan
HPAdiperbarui dengan nilai min/maks baru menggunakan perintahkubectl get hpa. Jika Anda juga mengonfigurasi ConfigMap tingkatGatewayClass, pengaturan tingkatGatewayseharusnya diutamakan.kubectl get hpa httpbin-gateway-istioContoh output:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE httpbin-gateway-istio Deployment/httpbin-gateway-istio cpu: 3%/80% 2 4 2 4h14mPeriksa
Deploymentlabel untuk memastikan bahwatest.azureservicemesh.io/deployment-configdiperbarui ke nilai baru menggunakan perintahkubectl get deployment.kubectl get deployment httpbin-gateway-istio -ojsonpath='{.metadata.labels.test\.azureservicemesh\.io\/deployment-config}'Contoh output:
updated-per-gateway
Aktifkan log akses untuk pod Gateway
Telemetry CRD diinstal secara otomatis dengan add-on Istio. Anda dapat menggunakan Telemetry API untuk mengonfigurasi pengelogan akses untuk Gateway pod.
Buat sumber daya di namespace aks-istio-system untuk mengaktifkan log akses untuk semua pod Gateway dalam mesh, atau di namespace tertentu untuk mengaktifkan log akses hanya untuk pod Gateway di namespace tersebut.
Contoh berikut menunjukkan Telemetry sumber daya yang memungkinkan pengelogan Gateway akses:
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: mesh-default
namespace: aks-istio-system
spec:
accessLogging:
- providers:
- name: envoy
Nota
Manifes di atas memungkinkan pencatatan akses di seluruh mesh, baik untuk Gateway pod maupun proksi sidecar yang diinjeksi oleh Istio. Gunakan pemilih untuk menargetkan pod tertentu. Lihat dokumentasi add-on Istio untuk detail selengkapnya tentang cara mengonfigurasi pencatatan log akses dengan Telemetry API.
Membersihkan sumber daya
Jika Anda tidak lagi memerlukan sumber daya yang dibuat dalam artikel ini, Anda dapat menghapusnya untuk menghindari dikenakan biaya apa pun.
Hapus sumber daya Gateway dan HTTPRoute menggunakan perintah berikut
kubectl delete:kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway kubectl delete httproute httpbinJika Anda membuat ConfigMap untuk mengkustomisasi sumber daya Gateway Anda, hapus menggunakan
kubectl delete configmapperintah .kubectl delete configmap gw-optionsJika Anda membuat SecretProviderClass dan rahasia yang akan digunakan untuk penghentian TLS, hapus sumber daya menggunakan perintah berikut
kubectl delete:kubectl delete secret httpbin-credential kubectl delete pod secrets-store-sync-httpbin kubectl delete secretproviderclass httpbin-credential-spc