Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
O complemento de malha de serviço Istio oferece suporte tanto à API de gerenciamento de tráfego de entrada do próprio Istio quanto à API do Kubernetes Gateway para gerenciamento de tráfego de entrada. Você pode usar o modelo de implantação automatizada da API do Gateway istio ou o modelo de implantação manual. Este artigo descreve como configurar o gerenciamento de tráfego de entrada para o complemento de malha de serviço Istio usando a API de Gateway do Kubernetes com o modelo de implantação automatizado.
Limitações e considerações
- O complemento da malha de serviço do Istio e a implementação da API do Gateway de roteamento de aplicativos não podem ser habilitados simultaneamente. Você deve desabilitar um primeiro e habilitar o outro em uma operação separada.
- O uso da API de Gateway do Kubernetes para gerenciamento de tráfego de saída com o complemento Istio só tem suporte para o modelo de implantação manual.
- As personalizações de ConfigMap para
Gatewayrecursos devem estar dentro da lista de permissões de personalização de recursos. Os campos que não constam na lista de permissões são bloqueados e impedidos por meio de webhooks gerenciados pelo complemento. Consulte a política de suporte de complemento do Istio para obter mais informações sobreallowed,blockedesupportedrecursos. - Configurando o acesso de entrada HTTPS a serviços HTTPS - ou seja, a passagem de Indicação de Nome do Servidor (SNI) - via recurso
TLSRoutenão é suportada atualmente.
Pré-requisitos
- Habilite a API de Gateway Gerenciado no cluster do AKS.
- Instale a revisão do complemento de malha de serviço Istio
asm-1-26ou superior. Siga o guia de instalação se você ainda não tiver o complemento de malha do serviço Istio instalado ou o guia de atualização se você estiver em uma revisão secundária inferior.
Definir variáveis de ambiente
Defina as seguintes variáveis de ambiente a serem usadas ao longo deste artigo:
| Variable | Description |
|---|---|
RESOURCE_GROUP |
O nome do grupo de recursos que contém o cluster do AKS. |
CLUSTER_NAME |
O nome do cluster do AKS. |
LOCATION |
A região do Azure em que o cluster do AKS é implantado. |
KEY_VAULT_NAME |
O nome do recurso do Azure Key Vault a ser criado para armazenar segredos do TLS. Se você tiver um recurso existente, use esse nome. |
Implantar um aplicativo de exemplo
Primeiro, implante o aplicativo de exemplo
httpbinnodefaultnamespace usando okubectl applycomando.export ISTIO_RELEASE="release-1.27" kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_RELEASE/samples/httpbin/httpbin.yaml
Criar o Gateway do Kubernetes e o HTTPRoute
O manifesto de exemplo cria um serviço de balanceador de carga de entrada externo acessível de fora do cluster. Você pode adicionar anotações para criar um balanceador de carga interno e personalizar outras configurações do balanceador de carga.
Implante uma configuração de API de Gateway no
defaultnamespace com ogatewayClassNamedefinido comoistioe umHTTPRouteque roteia o tráfego para o serviçohttpbinusando o seguinte manifesto: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 EOFObservação
Por padrão, o plano de controle do Istio acrescentará o
GatewayClassnomeistioao nome dos recursos que ele provisiona para oGateway. Você pode anotar o seu recursoGatewaycomgateway.istio.io/name-overridepara sobrescrever o nome dos recursos provisionados. Os nomes de recurso devem ser menores que63caracteres e devem ser um nome DNS válido.Observação
Se você estiver executando uma atualização de revisão menor e tiver duas revisões de complemento de malha de serviço Istio instaladas no cluster simultaneamente, o plano de controle para a revisão de menor atualização mais recente assumirá a propriedade do
Gatewayspor padrão. Você pode adicionar oistio.io/revrótulo aoGatewaypara controlar qual revisão do plano de controle o possui. Se você adicionar o rótulo de revisão, verifique se ele foi atualizado para a revisão apropriada do painel de controle antes de reverter ou concluir a operação de atualização.
Verificar a criação de recursos
Verifique se os
Deploymentrecursos e osServiceHorizontalPodAutoscalerPodDisruptionBudgetrecursos foram criados usando os seguinteskubectl getcomandos:kubectl get deployment httpbin-gateway-istio kubectl get service httpbin-gateway-istio kubectl get hpa httpbin-gateway-istio kubectl get pdb httpbin-gateway-istioExemplo de saída:
# 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
Enviar solicitação para um aplicativo de exemplo
Tente enviar uma
curlsolicitação para ohttpbinaplicativo. Primeiro, defina a variável deINGRESS_HOSTambiente: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}')Tente enviar uma solicitação HTTP para
httpbin.curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"Na saída, você deve ver uma resposta
HTTP 200.
Proteger o tráfego de entrada do Istio com a API de Gateway do Kubernetes
O complemento de malha de serviço do Istio oferece suporte à sincronização de segredos do Azure Key Vault para proteger o tráfego de entrada baseado na API do Gateway com a Terminação TLS (Transport Layer Security). Nas seções a seguir, você sincroniza segredos do Azure Key Vault no cluster do AKS usando o provedor Azure Key Vault para o complemento do driver da Interface de Armazenamento de Contêiner (CSI) do Repositório de Segredos e encerra o TLS no gateway de entrada.
Criar chaves e certificados de cliente/servidor
Crie um certificado raiz e uma chave privada para assinar os certificados dos serviços de exemplo:
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.crtGerar um certificado e uma chave privada para
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
Configurar o Azure Key Vault e criar segredos
Crie uma instância do Azure Key Vault para fornecer o certificado e a chave de entrada para o complemento de malha de serviços Istio usando o comando
az keyvault create. Se você já tiver uma instância do Azure Key Vault, ignore esta etapa.az keyvault create --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --location $LOCATIONHabilite o complemento do driver do provedor Azure Key Vault para o Repositório de Segredos (CSI) em seu cluster usando o comando
az aks enable-addons.az aks enable-addons --addons azure-keyvault-secrets-provider --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMESe o cofre de chaves usar o RBAC (controle de acesso baseado em função) do Azure para o modelo de permissões, siga as instruções em Fornecer acesso a chaves, certificados e segredos do Azure Key Vault com o controle de acesso baseado em função do Azure para atribuir uma função do Azure de Usuário de Segredos do Key Vault para a identidade gerenciada atribuída pelo usuário do complemento. Como alternativa, se o seu cofre de chaves usa o modelo de permissões de política de acesso ao cofre, autorize a identidade gerenciada atribuída pelo usuário do complemento a acessar o recurso do Azure Key Vault usando a política de acesso com o comando
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 listCrie segredos no Azure Key Vault usando os certificados e as chaves usando os seguintes
az keyvault secret setcomandos: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
Implantar SecretProviderClass e pod de exemplo
Implante o SecretProviderClass para fornecer parâmetros específicos do Azure Key Vault para o driver CSI usando o manifesto a seguir. Neste exemplo,
test-httpbin-keyetest-httpbin-crtsão os nomes dos objetos secretos no 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 EOFObservação
Como alternativa, para fazer referência a um tipo de objeto de certificado diretamente do Azure Key Vault, use o manifesto a seguir para implantar SecretProviderClass. Neste exemplo,
test-httpbin-cert-pfxé o nome do objeto de certificado no 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 EOFImplante um pod de exemplo usando o manifesto a seguir. O complemento do driver do provedor Azure Key Vault para o Repositório de Segredos (CSI) exige que um pod faça referência ao recurso SecretProviderClass para garantir que os segredos sejam sincronizados do Azure Key Vault para o cluster.
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
Verificar a criação de segredo do TLS
Verifique se o
httpbin-credentialsegredo foi criado nodefaultnamespace conforme definido no recurso SecretProviderClass usando okubectl describe secretcomando.kubectl describe secret/httpbin-credentialExemplo de saída:
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
Implantar gateway do TLS
Crie um Gateway do Kubernetes que faça referência ao segredo
httpbin-credentialdo TLS usando o seguinte manifesto: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 EOFObservação
Na definição do gateway,
tls.certificateRefs.namedeve corresponder aosecretNamerecurso SecretProviderClass.Crie um correspondente
HTTPRoutepara configurar o roteamento de tráfego de entrada para o serviçohttpbinsobre HTTPS usando o seguinte manifesto: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 EOFObtenha o endereço IP externo do gateway de entrada e a porta segura usando os seguintes comandos:
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}')Envie uma solicitação HTTPS para acessar o
httpbinserviço: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"A saída deve mostrar que o
httpbinserviço retorna o código 418 I’m a Teapot.Observação
Para configurar o acesso de entrada HTTPS a um serviço HTTPS, atualize o modo TLS na definição do gateway para
Passthrough. Essa configuração instrui o gateway a passar o tráfego de entrada como está, sem encerrar o TLS.
Personalizações de anotação
Você pode adicionar anotações spec.infrastructure.annotations abaixo para definir as configurações do balanceador de carga para o Gateway. Por exemplo, para criar um balanceador de carga interno anexado a uma sub-rede específica, você pode criar uma Gateway com as seguintes anotações:
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"
Personalizações de ConfigMap
O complemento de malha de serviço Istio oferece suporte à personalização dos recursos gerados para o Gateways, incluindo:
- Service
- Implantação
- Escalador Automático de Pod Horizontal (HPA)
- PDB (Orçamento de Interrupção de Pod)
As configurações padrão desses recursos são definidas no ConfigMap istio-gateway-class-defaults no namespace aks-istio-system, que é provisionado pelo AKS quando os CRDs da API do Gateway Gerenciado são habilitados juntamente com o complemento do Istio. Este ConfigMap deve ter o rótulo gateway.istio.io/defaults-for-class definido como istio para que as personalizações entrem em vigor para todos os Gateways com spec.gatewayClassName: istio. O ConfigMap de nível GatewayClass é instalado por padrão no namespace aks-istio-system quando a instalação da API de Gateway Gerenciado estiver habilitada. Pode levar até cinco minutos para que o istio-gateway-class-defaults ConfigMap seja implantado depois de instalar os CRDs da API do Gateway Gerenciado.
Observação
O ConfigMap istio-gateway-class-defaults é provisionado e reconciliado pelo AKS quando os CRDs da API do Gateway Gerenciado e o complemento do Istio estão habilitados em conjunto. Se você criou anteriormente o istio-gateway-class-defaults ConfigMap no aks-istio-system namespace por conta própria, deverá excluir a instância de ConfigMap gerida por você mesmo antes de habilitar os CRDs da API Gerenciada do Gateway para evitar conflitos com a sincronização do ConfigMap gerenciado pelo 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
...
Você pode modificar essas configurações para todo o Istio Gateways em um GatewayClass nível atualizando o istio-gateway-class-defaults ConfigMap ou pode defini-las para recursos individuais Gateway . Tanto para o GatewayClass-nível quanto para Gateway-nível ConfigMaps, você deve adicionar campos à lista de permissões para o recurso em questão. Se houver personalizações tanto para o GatewayClass quanto para um Gateway individual, a configuração de nível do Gateway terá precedência.
A personalização da implantação permite campos de lista.
| Caminho do campo | Description |
|---|---|
metadata.labels |
Rótulos de implantação |
metadata.annotations |
Anotações de implantação |
spec.replicas |
Contagem de réplicas de implantação |
spec.template.metadata.labels |
Rótulos de pod |
spec.template.metadata.annotations |
Anotações do Pod |
spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms |
Afinidade de nó |
spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution |
Afinidade de nó |
spec.template.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution |
Afinidade de pod |
spec.template.spec.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution |
Afinidade de pod |
spec.template.spec.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution |
Antia afinidade de pod |
spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution |
Antia afinidade de pod |
spec.template.spec.containers.resizePolicy |
Utilização de recursos de contêiner |
spec.template.spec.containers.resources.limits |
Utilização de recursos de contêiner |
spec.template.spec.containers.resources.requests |
Utilização de recursos de contêiner |
spec.template.spec.containers.stdin |
Depuração de contêiner |
spec.template.spec.containers.stdinOnce |
Depuração de contêiner |
spec.template.spec.nodeSelector |
Agendamento de pods |
spec.template.spec.nodeName |
Agendamento de pods |
spec.template.spec.tolerations |
Agendamento de pods |
spec.template.spec.topologySpreadConstraints |
Agendamento de pods |
Campos da lista de permissões de personalização de serviço
| Caminho do campo | Description |
|---|---|
metadata.labels |
Rótulos de serviço |
metadata.annotations |
Anotações de serviço |
spec.type |
Tipo de serviço |
spec.loadBalancerSourceRanges |
Configurações do balanceador de carga de serviço |
spec.loadBalancerClass |
Configurações do balanceador de carga de serviço |
spec.externalTrafficPolicy |
Política de tráfego de serviço |
spec.internalTrafficPolicy |
Política de tráfego de serviço |
A personalização do HorizontalPodAutoscaler (HPA) permite campos de lista
| Caminho do campo | Description |
|---|---|
metadata.labels |
Rótulos de HPA |
metadata.annotations |
Anotações de HPA |
spec.behavior.scaleUp.stabilizationWindowSeconds |
Comportamento de expansão do HPA |
spec.behavior.scaleUp.selectPolicy |
Comportamento de expansão do HPA |
spec.behavior.scaleUp.policies |
Comportamento de expansão do HPA |
spec.behavior.scaleDown.stabilizationWindowSeconds |
Comportamento de redução vertical do HPA |
spec.behavior.scaleDown.selectPolicy |
Comportamento de redução vertical do HPA |
spec.behavior.scaleDown.policies |
Comportamento de redução vertical do HPA |
spec.metrics |
Métricas de dimensionamento de recursos do HPA |
spec.minReplicas |
Contagem mínima de réplicas HPA. Não deve estar abaixo de 2. |
spec.maxReplicas |
Contagem máxima de réplicas do HPA |
A personalização de PDB (PodDisruptionBudget) permite campos de lista
| Caminho do campo | Description |
|---|---|
metadata.labels |
Rótulos PDB |
metadata.annotations |
Anotações do PDB |
spec.minAvailable |
Disponibilidade mínima do PDB |
spec.unhealthyPodEvictionPolicy |
Política de remoção do PDB |
Observação
Modificar a disponibilidade mínima e a política de remoção PDB pode causar erros durante as operações de atualização e exclusão de cluster ou nó. Siga o guia de solução de problemas do PDB para resolver erros UpgradeFailed devidos a falhas de remoção PDB.
Definir configurações no nível do GatewayClass
Atualize o ConfigMap de nível
GatewayClassno namespaceaks-istio-systemusando o comandokubectl edit configmap.kubectl edit cm istio-gateway-class-defaults -n aks-istio-systemEdite as configurações de recurso na
dataseção conforme necessário. Por exemplo, para atualizar as réplicas do HPA min/max e adicionar um rótulo aoDeployment, modifique o ConfigMap da seguinte maneira:... data: deployment: | metadata: labels: test.azureservicemesh.io/deployment-config: "updated" horizontalPodAutoscaler: | spec: minReplicas: 3 maxReplicas: 6 podDisruptionBudget: | spec: minAvailable: 1 ...Observação
Somente um ConfigMap por
GatewayClassé permitido.Agora, você deve ver o
HPAparahttpbin-gatewayque você criou anteriormente ser atualizado com os novos valores mínimos/máximos. Verifique asHPAconfigurações usando okubectl get hpacomando.kubectl get hpa httpbin-gateway-istioExemplo de saída:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE httpbin-gateway-istio Deployment/httpbin-gateway-istio cpu: 3%/80% 3 6 3 36mVerifique se
Deploymentfoi atualizado com o novo rótulo usando o comandokubectl get deployment.kubectl get deployment httpbin-gateway-istio -ojsonpath='{.metadata.labels.test\.azureservicemesh\.io\/deployment-config}'Exemplo de saída:
updated
Definir configurações para um gateway específico
Crie um ConfigMap com personalizações de recursos para o
httpbinGateway usando o seguinte manifesto: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" EOFAtualize o
httpbinGatewaypara fazer referência ao ConfigMap:spec: # ... existing spec content ... infrastructure: parametersRef: group: "" kind: ConfigMap name: gw-optionsAplique a atualização usando o
kubectl applycomando.kubectl apply -f httpbin-gateway-updated.yamlVerifique se o
HPAvalor está atualizado com os novos valores mínimos/máximos usando okubectl get hpacomando. Se você também tiver configurado o ConfigMap no nívelGatewayClass, as configurações no nívelGatewaydeverão ter precedência.kubectl get hpa httpbin-gateway-istioExemplo de saída:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE httpbin-gateway-istio Deployment/httpbin-gateway-istio cpu: 3%/80% 2 4 2 4h14mInspecione os
Deploymentrótulos para garantir que otest.azureservicemesh.io/deployment-configseja atualizado para o novo valor usando o comandokubectl get deployment.kubectl get deployment httpbin-gateway-istio -ojsonpath='{.metadata.labels.test\.azureservicemesh\.io\/deployment-config}'Exemplo de saída:
updated-per-gateway
Limpar os recursos
Se você não precisar mais dos recursos criados neste artigo, poderá excluí-los para evitar incorrer em encargos.
Exclua os recursos de Gateway e HTTPRoute usando os seguintes
kubectl deletecomandos:kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway kubectl delete httproute httpbinSe você criou um ConfigMap para personalizar os recursos do Gateway, exclua-o usando o
kubectl delete configmapcomando.kubectl delete configmap gw-optionsSe você criou um SecretProviderClass e um segredo a ser usado para a terminação TLS, exclua os recursos usando os seguintes
kubectl deletecomandos:kubectl delete secret httpbin-credential kubectl delete pod secrets-store-sync-httpbin kubectl delete secretproviderclass httpbin-credential-spc