Compartilhar via


Configurar o complemento de malha de serviço baseado no Istio para o Serviço de Kubernetes do Azure

O Istio de código aberto usa MeshConfig para definir as configurações de toda a malha para a malha de serviço Istio. O complemento de malha de serviço baseado em Istio para AKS se baseia em MeshConfig e classifica propriedades diferentes como compatíveis, permitidas e bloqueadas.

Este artigo explica como configurar o complemento de malha de serviço baseado em Istio para o Serviço de Kubernetes do Azure e a política de suporte aplicável a essa configuração.

Pré-requisitos

Este guia pressupõe que você seguiu a documentação para habilitar o complemento do Istio em um cluster do AKS.

Definir a configuração no cluster

  1. Descubra qual revisão do Istio está implantada no cluster:

    az aks show --name $CLUSTER --resource-group $RESOURCE_GROUP --query 'serviceMeshProfile'
    

    Saída:

    {
      "istio": {
          "certificateAuthority": null,
          "components": {
          "egressGateways": null,
          "ingressGateways": null
          },
          "revisions": [
          "asm-1-18"
          ]
      },
      "mode": "Istio"
    }
    
  2. Crie um ConfigMap com o nome istio-shared-configmap-<asm-revision> no namespace aks-istio-system. Por exemplo, se o cluster estiver executando a revisão asm-1-18 da malha, então ConfigMap precisará ser nomeado como istio-shared-configmap-asm-1-18. A configuração da malha deve ser fornecida na seção de dados na malha.

    Exemplo:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: istio-shared-configmap-asm-1-18
      namespace: aks-istio-system
    data:
      mesh: |-
        accessLogFile: /dev/stdout
        defaultConfig:
          holdApplicationUntilProxyStarts: true
    

    Os valores em defaultConfig são configurações em toda a malha aplicadas ao proxy sidecar Envoy.

Cuidado

Um ConfigMap padrão (por exemplo, istio-asm-1-18 para revisão asm-1-18) é criado em aks-istio-system namespace no cluster quando o complemento Istio está habilitado. No entanto, esse ConfigMap padrão é reconciliado pelo suplemento Istio gerenciado e, portanto, os usuários NÃO devem editar diretamente este ConfigMap. Em vez disso, os usuários devem criar uma revisão específica do ConfigMap compartilhado do Istio (por exemplo, istio-shared-configmap-asm-1-18 para revisão asm-1-18) no namespace aks-istio-system e, em seguida, o painel de controle Istio mesclará isso com o ConfigMap padrão, com as configurações padrão tendo precedência.

Configuração e atualizações de malha

Ao executar a atualização do canário para o Istio, é necessário criar um ConfigMap separado para a nova revisão no namespace aks-istio-system antes de iniciar a atualização do canário. Dessa forma, a configuração é aplicável quando o painel de controle da nova revisão é implantado no cluster. Por exemplo, se você estiver atualizando a malha do asm-1-18 para o asm-1-19, precisará copiar as alterações de istio-shared-configmap-asm-1-18 para criar um novo ConfigMap chamado istio-shared-configmap-asm-1-19 no namespace aks-istio-system.

Depois que a atualização for concluída ou revertida, você poderá excluir o ConfigMap da revisão que foi removida do cluster.

Valores MeshConfig permitidos, com suporte e bloqueados

Os campos em MeshConfig são classificados como allowed, supported ou blocked. Para saber mais sobre essas categorias, confira a política de suporte para os recursos complementares do Istio e as opções de configuração.

A configuração de malha e a lista de campos permitidos/com suporte são específicos de revisão para considerar os campos que estão sendo adicionados/removidos entre revisões. A lista completa de campos permitidos e os compatíveis/sem suporte na lista de permitidos é fornecida na tabela abaixo. Quando uma nova revisão de malha é disponibilizada, todas as alterações na classificação permitida e com suporte dos campos são observadas nesta tabela.

MeshConfig

Os campos presentes na documentação de referência do MeshConfig de código aberto, mas não na tabela abaixo, são bloqueados. Por exemplo, configSources está bloqueado.

Campo Com suporte/Permitido Observações
proxyListenPort Permitido -
proxyInboundListenPort Permitido -
proxyHttpPort Permitido -
connectTimeout Permitido Configurável em DestinationRule
tcpKeepAlive Permitido Configurável em DestinationRule
defaultConfig Com suporte Usado para configurar o ProxyConfig
outboundTrafficPolicy Com suporte Também configurável em Sidecar CR
extensionProviders Permitido -
defaultProviders Permitido -
accessLogFile Com suporte Este campo aborda a geração de registros de acesso. Para obter uma experiência gerenciada sobre a coleta e a consulta de logs, confira Insights de Contêiner do Azure Monitor no AKS. É recomendável configurar o registro de acesso por meio da API de Telemetria.
accessLogFormat Com suporte Este campo aborda a geração de registros de acesso. Para obter uma experiência gerenciada sobre coleta e consulta de logs, consulte Azure Monitor Container Insights no AKS
accessLogEncoding Com suporte Este campo aborda a geração de registros de acesso. Para obter uma experiência gerenciada sobre coleta e consulta de logs, consulte Azure Monitor Container Insights no AKS
enableTracing Permitido É recomendável configurar o rastreamento por meio da API de Telemetria.
enableEnvoyAccessLogService Com suporte Este campo aborda a geração de registros de acesso. Para obter uma experiência gerenciada sobre coleta e consulta de logs, consulte Azure Monitor Container Insights no AKS
disableEnvoyListenerLog Com suporte Este campo aborda a geração de registros de acesso. Para obter uma experiência gerenciada sobre coleta e consulta de logs, consulte Azure Monitor Container Insights no AKS
trustDomain Permitido -
trustDomainAliases Permitido -
caCertificates Permitido Configurável em DestinationRule
defaultServiceExportTo Permitido Configurável em ServiceEntry
defaultVirtualServiceExportTo Permitido Configurável em VirtualService
defaultDestinationRuleExportTo Permitido Configurável em DestinationRule
localityLbSetting Permitido Configurável em DestinationRule
dnsRefreshRate Permitido -
h2UpgradePolicy Permitido Configurável em DestinationRule
enablePrometheusMerge Permitido -
discoverySelectors Com suporte -
pathNormalization Permitido -
defaultHttpRetryPolicy Permitido Configurável em VirtualService
serviceSettings Permitido -
meshMTLS Permitido -
tlsDefaults Permitido -
ingressService Permitido Nome do serviço Kubernetes usado para o controlador de entrada istio.
ingressSelector Permitido Define qual implantação de gateway será usada como controlador de entrada. Esse campo corresponde ao campo Gateway.selector e será configurado como istio: INGRESS_SELECTOR.

ProxyConfig (meshConfig.defaultConfig)

Os campos presentes na documentação de referência do MeshConfig de código aberto, mas não na tabela a seguir, são bloqueados.

Campo Com suporte/Permitido Observações
tracingServiceName Permitido É recomendável configurar o rastreamento por meio da API de Telemetria.
drainDuration Com suporte -
statsUdpAddress Permitido -
proxyAdminPort Permitido -
tracing Permitido É recomendável configurar o rastreamento por meio da API de Telemetria.
simultaneidade Com suporte -
envoyAccessLogService Permitido É recomendável configurar o rastreamento por meio da API de Telemetria.
envoyMetricsService Permitido Recomenda-se configurar a coleta de métricas por meio da API de Telemetria.
proxyMetadata Permitido -
statusPort Permitido -
extraStatTags Permitido -
proxyStatsMatcher Permitido -
terminationDrainDuration Com suporte -
meshId Permitido -
holdApplicationUntilProxyStarts Com suporte -
caCertificatesPem Permitido -
privateKeyProvider Permitido -

Cuidado

Escopo de suporte de configurações: configuração de malha permite que provedores de extensão, como instâncias autogerenciadas do Zipkin ou Apache Skywalking, sejam configurados com o complemento Istio. No entanto, esses provedores de extensão estão fora do escopo de suporte do complemento do Istio. Qualquer problema associado às ferramentas de extensão está fora do limite de suporte do complemento do Istio.

Discas de solução de problemas e erros comuns

  • Verifique se o MeshConfig está recuado com espaços em vez de guias.
  • Verifique se você está editando apenas o ConfigMap compartilhado específico da revisão (por exemplo, istio-shared-configmap-asm-1-18) e não tentando editar o ConfigMap padrão (por exemplo, istio-asm-1-18).
  • O ConfigMap deve seguir o nome istio-shared-configmap-<asm-revision> e estar no namespace aks-istio-system.
  • Verifique se todos os campos MeshConfig estão escritos corretamente. Se eles não forem reconhecidos ou se não fizerem parte da lista permitida, o controle de admissão negará essas configurações.
  • Ao executar atualizações de canário, verifique o ConfigMaps específico da revisão para garantir que existam configurações para as revisões implantadas no seu cluster.
  • Determinadas opções de MeshConfig, como o accessLogging, podem aumentar o consumo de recursos do Envoy e desabilitar algumas dessas configurações pode atenuar a utilização de recursos do plano de dados do Istio. Também é aconselhável usar o campo discoverySelectors no MeshConfig para ajudar a aliviar o consumo de memória de Istiod e Envoy.
  • Se o campo concurrency no MeshConfig estiver configurado incorretamente e definido como zero, ele fará com que o Envoy use todos os núcleos de CPU. Em vez disso, se esse campo não for definido, o número de threads de trabalho a serem executados será determinado automaticamente com base em solicitações/limites da CPU.
  • Condições de corrida de sidecar e de pod em que o aplicativo é iniciado antes que o Envoy possa ser mitigado usando o campo holdApplicationUntilProxyStarts no MeshConfig.