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
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" }
Crie um ConfigMap com o nome
istio-shared-configmap-<asm-revision>
no namespaceaks-istio-system
. Por exemplo, se o cluster estiver executando a revisão asm-1-18 da malha, então ConfigMap precisará ser nomeado comoistio-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 namespaceaks-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 campodiscoverySelectors
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.
Azure Kubernetes Service