Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Dodatek siatki serwisowej Istio obsługuje zarówno własny interfejs API zarządzania ruchem przychodzącym Istio, jak i interfejs API Kubernetes Gateway na potrzeby zarządzania ruchem przychodzącym. Możesz użyć zautomatyzowanego modelu wdrażania interfejsu API usługi Istio Gateway lub modelu wdrażania ręcznego. W tym artykule opisano sposób konfigurowania zarządzania ruchem wejściowym dla dodatku siatki usług Istio za pomocą interfejsu API bramy Kubernetes i zautomatyzowanego modelu wdrażania.
Ograniczenia i zagadnienia
- Wykorzystanie interfejsu API bramy Kubernetes do zarządzania ruchem wychodzącym z dodatkiem siatki usług Istio jest możliwe tylko w przypadku modelu wdrażania ręcznego.
- Dostosowania ConfigMap dla
Gatewayzasobów muszą należeć do listy dozwolonych dostosowań zasobów. Pola, które nie znajdują się na liście dozwolonych, są niedozwolone i blokowane za pośrednictwem zarządzanych elementów webhook dodatku. Aby uzyskać więcej informacji, zobacz zasady obsługi dodatku usługi Istio service mesh.
Wymagania wstępne
- Włącz interfejs API Managed Gateway w klastrze AKS.
- Zainstaluj dodatek do usługi Istio service mesh w wersji
asm-1-26lub nowszej. Postępuj zgodnie z przewodnikiem instalacji , jeśli nie masz jeszcze zainstalowanego dodatku usługi Istio Service Mesh lub przewodnik uaktualniania , jeśli korzystasz z niższej wersji pomocniczej.
Ustawianie zmiennych środowiskowych
Ustaw następujące zmienne środowiskowe do użycia w tym artykule:
| Variable | Description |
|---|---|
RESOURCE_GROUP |
Nazwa grupy zasobów zawierającej klaster usługi AKS. |
CLUSTER_NAME |
Nazwa Twojego klastra usługi AKS. |
LOCATION |
Region świadczenia usługi Azure, w którym wdrożono klaster usługi AKS. |
KEY_VAULT_NAME |
Nazwa zasobu usługi Azure Key Vault, który ma zostać utworzony do przechowywania wpisów tajnych protokołu TLS. Jeśli masz istniejący zasób, użyj tej nazwy. |
Wdrażanie przykładowej aplikacji
Wdróż przykładową aplikację
httpbinw przestrzeni nazwdefaultprzy użyciu poleceniakubectl apply.kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.26/samples/httpbin/httpbin.yaml
Tworzenie bramy Kubernetes i usługi HTTPRoute
Przykładowy manifest tworzy zewnętrzną usługę modułu równoważenia obciążenia ruchu przychodzącego, która jest dostępna spoza klastra. Możesz dodać adnotacje , aby utworzyć wewnętrzny moduł równoważenia obciążenia i dostosować inne ustawienia modułu równoważenia obciążenia.
Wdróż konfigurację Gateway API w przestrzeni nazw
defaultzgatewayClassNameustawioną naistioi elementemHTTPRoute, który kieruje ruch do usługihttpbinprzy użyciu następującego manifestu: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: http namespace: default spec: parentRefs: - name: httpbin-gateway hostnames: ["httpbin.example.com"] rules: - matches: - path: type: PathPrefix value: /get backendRefs: - name: httpbin port: 8000 EOFUwaga / Notatka
Jeśli przeprowadzasz uaktualnienie drobnej wersji i masz dwie wersje dodatku usługi Istio service mesh zainstalowane jednocześnie w klastrze, płaszczyzna sterowania dla wyższej drobnej wersji domyślnie przejmuje kontrolę nad
Gateways. Możesz dodać etykietęistio.io/revdoGateway, aby kontrolować, która wersja płaszczyzny kontrolnej jest jej właścicielem. Jeśli dodasz etykietę poprawki, upewnij się, że zaktualizujesz ją odpowiednio do odpowiedniej poprawki płaszczyzny sterowania przed przywróceniem lub ukończeniem operacji uaktualniania.
Weryfikowanie tworzenia zasobów
DeploymentSprawdź, czy zasoby ,Service,HorizontalPodAutoscaleriPodDisruptionBudgetzostały utworzone przy użyciu następującychkubectl getpoleceń:kubectl get deployment httpbin-gateway-istio kubectl get service httpbin-gateway-istio kubectl get hpa httpbin-gateway-istio kubectl get pdb httpbin-gateway-istioPrzykładowy wynik:
# 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
Wysyłanie żądania do przykładowej aplikacji
Spróbuj wysłać
curlżądanie dohttpbinaplikacji. Najpierw ustaw zmienną środowiskowąINGRESS_HOST: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}')Spróbuj wysłać żądanie HTTP do
httpbin.curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"W danych wyjściowych powinna zostać wyświetlona odpowiedź
HTTP 200.
Zabezpiecz ruch przychodzący Istio za pomocą interfejsu API gateway Kubernetes.
Dodatek Istio service mesh obsługuje synchronizowanie wpisów tajnych z Azure Key Vault w celu zabezpieczania ruchu wejściowego opartego na API bramy poprzez zakończenie protokołu Transport Layer Security (TLS) lub przekazywanie wskazania nazwy serwera (SNI). W poniższych sekcjach synchronizujesz tajne dane z Azure Key Vault z klastrem AKS, używając dostawcy Azure Key Vault dla dodatku sterownika CSI Secrets Store i kończysz szyfrowanie TLS w bramie wejściowej.
Tworzenie certyfikatów i kluczy klienta/serwera
Utwórz certyfikat główny i klucz prywatny na potrzeby podpisywania certyfikatów dla przykładowych usług:
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.crtWygeneruj certyfikat i klucz prywatny dla elementu
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
Skonfiguruj Azure Key Vault i utwórz sekrety
Utwórz instancję Azure Key Vault, aby dostarczyć dane wejściowe certyfikatu i klucza do dodatku siatki usług Istio przy użyciu polecenia
az keyvault create. Jeśli masz już instancję Azure Key Vault, możesz pominąć ten krok.az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATIONWłącz dostawcę usługi Azure Key Vault dla dodatku sterownika magazynu wpisów tajnych (CSI) w klastrze przy użyciu
az aks enable-addonspolecenia .az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEJeśli magazyn kluczy używa kontroli dostępu opartej na rolach platformy Azure (RBAC) dla modelu uprawnień, postępuj zgodnie z instrukcjami podanymi w temacie Zapewnianie dostępu do kluczy, certyfikatów i sekretów usługi Azure z kontrolą dostępu opartą na rolach platformy Azure, aby przypisać rolę Użytkownik tajemnic Key Vault dla tożsamości zarządzanej przypisanej przez użytkownika w dodatku. Alternatywnie, jeśli Twój Magazyn Kluczy używa modelu uprawnień opartego na zasadach dostępu, autoryzuj zarządzaną tożsamość przypisaną użytkownikowi dodatku, aby uzyskać dostęp do zasobu Azure Key Vault, używając zasad dostępu przy pomocy polecenia
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 listUtwórz wpisy tajne w usłudze Azure Key Vault przy użyciu certyfikatów i kluczy, stosując następujące polecenia
az keyvault secret set.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
Rozmieszczenie SecretProviderClass i przykładowego podu
Wdróż klasę SecretProviderClass, aby udostępnić określone parametry usługi Azure Key Vault do sterownika CSI przy użyciu następującego manifestu. W tym przykładzie
test-httpbin-keyitest-httpbin-crtsą nazwami obiektów tajnych w 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 EOFUwaga / Notatka
Alternatywnie, aby odwołać się do typu obiektu certyfikatu bezpośrednio z usługi Azure Key Vault, użyj następującego manifestu w celu wdrożenia klasy SecretProviderClass. W tym przykładzie
test-httpbin-cert-pxfjest nazwą obiektu certyfikatu w usłudze 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 EOFWdróż przykładowy pod przy użyciu następującego manifestu. Dodatek dostawcy usługi Azure Key Vault dla sterownika Secrets Store (CSI) wymaga, aby zasobnik odnosił się do zasobu SecretProviderClass, aby zapewnić synchronizację tajemnic z Azure Key Vault do klastra.
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
Weryfikacja utworzenia sekretu TLS
Sprawdź
httpbin-credential, czy wpis tajny został utworzony w przestrzeni nazwdefaultzgodnie z definicją w zasobie klasy SecretProviderClass przy użyciu poleceniakubectl describe secret.kubectl describe secret/httpbin-credentialPrzykładowy wynik:
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
Wdrażanie bramy TLS
Utwórz bramę Kubernetes, która odwołuje się do wpisu tajnego
httpbin-credentialw ramach konfiguracji protokołu TLS przy użyciu następującego manifestu: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 EOFUwaga / Notatka
W definicji bramy
tls.certificateRefs.namemusi odpowiadać zasobowisecretNamew SecretProviderClass.Utwórz odpowiedni
HTTPRouteelement, aby skonfigurować routing ruchu przychodzącego dohttpbinusługi za pośrednictwem protokołu HTTPS przy użyciu następującego manifestu: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 EOFPobierz zewnętrzny adres IP bramy wejściowej i zabezpieczony port przy użyciu następujących poleceń:
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}')Wyślij żądanie HTTPS, aby uzyskać dostęp do
httpbinusługi: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"Dane wyjściowe powinny pokazać, że
httpbinusługa zwróci kod 418 "I'm a Teapot".Uwaga / Notatka
Aby skonfigurować dostęp przychodzący HTTPS do usługi HTTPS, zaktualizuj tryb TLS w definicji bramy na
Passthrough. Ta konfiguracja powoduje, że brama przekaże ruch przychodzący , tak jak to jest, bez przerywania protokołu TLS.
Dostosowywanie adnotacji
Możesz dodać adnotacje w obszarze spec.infrastructure.annotations , aby skonfigurować ustawienia modułu równoważenia obciążenia dla elementu Gateway. Na przykład aby utworzyć wewnętrzny moduł równoważenia obciążenia dołączony do określonej podsieci, można utworzyć element Gateway z następującymi adnotacjami:
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"
Dostosowania obiektu ConfigMap
Dodatek do sieci serwisowej Istio obsługuje dostosowania zasobów generowanych dla Gateways, w tym:
- Usługa
- Wdrożenie
- Automatyczny poziomy skalowalnik zasobników (HPA)
- Budżet na zakłócenia zasobnika (PDB)
Domyślne ustawienia tych zasobów są ustawiane w istio-gateway-class-defaults ConfigMap w aks-istio-system przestrzeni nazw. Ten obiekt ConfigMap musi mieć ustawioną etykietę gateway.istio.io/defaults-for-class na istio , aby dostosowania zaczęły obowiązywać dla wszystkich Gateways elementów z parametrem spec.gatewayClassName: istio. Obiekt ConfigMap na poziomie GatewayClass jest instalowany domyślnie w przestrzeni nazw aks-istio-system po włączeniu instalacji interfejsu API zarządzanej bramy. Wdrożenie obiektu istio-gateway-class-defaults ConfigMap po zainstalowaniu definicji zasobów niestandardowych (CRD) interfejsu API bramy zarządzanej może potrwać do pięciu minut.
kubectl get configmap istio-gateway-class-defaults -n aks-istio-system -o yaml
...
data:
horizontalPodAutoscaler: |
spec:
minReplicas: 2
maxReplicas: 5
podDisruptionBudget: |
spec:
minAvailable: 1
...
Możesz zmodyfikować te ustawienia dla wszystkich Istio Gateways na poziomie GatewayClass, aktualizując istio-gateway-class-defaults ConfigMap, lub ustawiając je dla poszczególnych Gateway zasobów. W przypadku poziomów GatewayClass i GatewayConfigMaps należy dodać pola do listy dozwolonych dla danego zasobu. Jeśli istnieją dostosowania zarówno dla elementu GatewayClass, jak i pojedynczego Gateway, konfiguracja na poziomie Gateway ma pierwszeństwo.
Dostosowywanie wdrożenia — pola listy dozwolonych
| Ścieżka pola | Description |
|---|---|
metadata.labels |
Etykiety wdrożenia |
metadata.annotations |
Adnotacje wdrożenia |
spec.replicas |
Liczba replik wdrożenia |
spec.template.metadata.labels |
Etykiety zasobników |
spec.template.metadata.annotations |
Adnotacje podów |
spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms |
Koligacja węzła |
spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution |
Koligacja węzła |
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution |
Afinitet zasobnika |
spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution |
Afinitet zasobnika |
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution |
Anty-koligacja zasobnika |
spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution |
Anty-koligacja zasobnika |
spec.template.spec.containers.resizePolicy |
Wykorzystanie zasobów kontenera |
spec.template.spec.containers.resources.limits |
Wykorzystanie zasobów kontenera |
spec.template.spec.containers.resources.requests |
Wykorzystanie zasobów kontenera |
spec.template.spec.containers.stdin |
Debugowanie kontenera |
spec.template.spec.containers.stdinOnce |
Debugowanie kontenera |
spec.template.spec.nodeSelector |
Planowanie podów |
spec.template.spec.nodeName |
Planowanie podów |
spec.template.spec.tolerations |
Planowanie podów |
spec.template.spec.topologySpreadConstraints |
Planowanie podów |
Dostosowywanie usługi — pola listy dozwolonych
| Ścieżka pola | Description |
|---|---|
metadata.labels |
Etykiety usług |
metadata.annotations |
Adnotacje usługi |
spec.type |
Typ usługi |
spec.loadBalancerSourceRanges |
Ustawienia modułu równoważenia obciążenia usługi |
spec.loadBalancerClass |
Ustawienia modułu równoważenia obciążenia usługi |
spec.externalTrafficPolicy |
Zasady dotyczące ruchu usług |
spec.internalTrafficPolicy |
Zasady dotyczące ruchu usług |
Lista pól dozwolonych dostosowań dla HorizontalPodAutoscaler (HPA)
| Ścieżka pola | Description |
|---|---|
metadata.labels |
Etykiety HPA |
metadata.annotations |
Adnotacje HPA |
spec.behavior.scaleUp.stabilizationWindowSeconds |
Zachowanie skalowania w górę dla HPA |
spec.behavior.scaleUp.selectPolicy |
Zachowanie skalowania w górę dla HPA |
spec.behavior.scaleUp.policies |
Zachowanie skalowania w górę dla HPA |
spec.behavior.scaleDown.stabilizationWindowSeconds |
Zachowanie skalowania w dół HPA |
spec.behavior.scaleDown.selectPolicy |
Zachowanie skalowania w dół HPA |
spec.behavior.scaleDown.policies |
Zachowanie skalowania w dół HPA |
spec.metrics |
Metryki skalowania zasobów HPA |
spec.minReplicas |
Minimalna liczba replik HPA. Nie może być niższy niż 2. |
spec.maxReplicas |
Maksymalna liczba replik HPA |
Pola listy dozwolonych dostosowań PodDisruptionBudget (PDB)
| Ścieżka pola | Description |
|---|---|
metadata.labels |
Etykiety plików PDB |
metadata.annotations |
Adnotacje PDB |
spec.minAvailable |
Minimalna dostępność pliku PDB |
spec.unhealthyPodEvictionPolicy |
Zasady eksmisji pdB |
Uwaga / Notatka
Modyfikowanie PDB minimalnej dostępności i zasad eksmisji może prowadzić do potencjalnych błędów podczas operacji uaktualniania i usuwania klastra/węzła. Postępuj zgodnie z przewodnikiem rozwiązywania problemów z plikiem PDB, aby rozwiązać problemy związane z błędami UpgradeFailed spowodowanymi PDB błędami usunięcia.
Konfigurowanie ustawień poziomu GatewayClass
Zaktualizuj ConfigMap na poziomie
GatewayClassw przestrzeni nazwaks-istio-systemużywając poleceniakubectl edit configmap:kubectl edit cm istio-gateway-class-defaults -n aks-istio-systemEdytuj ustawienia zasobów w sekcji
datazgodnie z potrzebami. Aby zaktualizować na przykład repliki min/max HPA i dodać etykietę do elementuDeployment, zmodyfikuj obiekt ConfigMap w następujący sposób:... data: deployment: | metadata: labels: test.azureservicemesh.io/deployment-config: "updated" horizontalPodAutoscaler: | spec: minReplicas: 3 maxReplicas: 6 podDisruptionBudget: | spec: minAvailable: 1 ...Uwaga / Notatka
Dozwolony jest tylko jeden obiekt ConfigMap na jeden
GatewayClass.Teraz powinna zostać zaktualizowana
HPAdlahttpbin-gateway, którą utworzyłeś wcześniej, zgodnie z nowymi wartościami minimalnymi/maksymalnymi.HPASprawdź ustawienia przy użyciukubectl get hpapolecenia .kubectl get hpa httpbin-gateway-istioPrzykładowy wynik:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE httpbin-gateway-istio Deployment/httpbin-gateway-istio cpu: 3%/80% 3 6 3 36mSprawdź, czy
Deploymentzostał zaktualizowany do nowej etykiety za pomocą poleceniakubectl get deployment.kubectl get deployment httpbin-gateway-istio -ojsonpath='{.metadata.labels.test\.azureservicemesh\.io\/deployment-config}'Przykładowy wynik:
updated
Konfigurowanie ustawień dla określonej bramy
Utwórz ConfigMap z dostosowaniami zasobów dla bramy
httpbinprzy użyciu następującego manifestu.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" EOFZaktualizuj element
httpbinGateway, aby odwoływać się do obiektu ConfigMap:spec: # ... existing spec content ... infrastructure: parametersRef: group: "" kind: ConfigMap name: gw-optionsZastosuj aktualizację przy użyciu
kubectl applypolecenia .kubectl apply -f httpbin-gateway-updated.yamlSprawdź, czy parametr
HPAzostał zaktualizowany przy użyciu nowych wartości minimalnych/maksymalnychkubectl get hpaprzy użyciu polecenia . Jeśli również skonfigurowanoGatewayClass-level ConfigMap, ustawieniaGateway-level powinny mieć pierwszeństwo.kubectl get hpa httpbin-gateway-istioPrzykładowy wynik:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE httpbin-gateway-istio Deployment/httpbin-gateway-istio cpu: 3%/80% 2 4 2 4h14mSprawdź etykiety
Deployment, aby upewnić się, żetest.azureservicemesh.io/deployment-configjest aktualizowany do nowej wartości przy użyciu poleceniakubectl get deployment.kubectl get deployment httpbin-gateway-istio -ojsonpath='{.metadata.labels.test\.azureservicemesh\.io\/deployment-config}'Przykładowy wynik:
updated-per-gateway
Uprzątnij zasoby
Jeśli nie potrzebujesz już zasobów utworzonych w tym artykule, możesz je usunąć, aby uniknąć naliczania opłat.
Usuń zasoby Gateway i HTTPRoute używając następujących
kubectl deletepoleceń.kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway kubectl delete httproute httpbinJeśli utworzono obiekt ConfigMap w celu dostosowania zasobów bramy, usuń go przy użyciu
kubectl delete configmappolecenia .kubectl delete configmap gw-optionsJeśli utworzono klasę SecretProviderClass oraz sekret na potrzeby zakończenia protokołu TLS, usuń zasoby przy użyciu następujących
kubectl deletepoleceń:kubectl delete secret httpbin-credential kubectl delete pod secrets-store-sync-httpbin kubectl delete secretproviderclass httpbin-credential-spc