O Service Mesh (ASM) fornece um recurso de API CustomResourceDefinition (CRD) cujo kind é IstioGateway e a apiVersion é istio.alibabacloud.com/v1beta1. O ASM também disponibiliza um controlador que monitora alterações no CRD e atualiza o service, o Deployment e a ServiceAccount do cluster Kubernetes em execução.
Exemplos de configuração
Pré-requisitos
Adicione um cluster do Container Service for Kubernetes (ACK) à sua instância do ASM. Para mais informações, consulte Add a cluster to an ASM instance.
Implante os gateways do ASM no namespace istio-system. Assim, o gateway lê suas configurações durante a inicialização. No Istio 1.6 e versões posteriores, um gateway do ASM implantado em qualquer outro namespace falha ao iniciar porque não consegue ler suas configurações.
Exemplo 1: Crie e gerencie um gateway de entrada com a API do Kubernetes
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página Ingress Gateway, clique em Create from YAML.
-
Na página Create, insira um nome para o gateway de entrada no campo Name, selecione istio-system na lista suspensa Namespace, configure os campos a seguir no arquivo YAML e clique em Create.
Para mais informações sobre os campos de CRD, consulte CRD fields.
NotaCaso precise usar o Go Client for Kubernetes para gerenciar o gateway de entrada, consulte Go structs for an ASM gateway.
-
Visualize as informações de service do gateway de entrada:
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em o nome do seu cluster. No painel de navegação à esquerda, clique em .
Na parte superior da página Services, selecione istio-system na lista suspensa Namespace.
Na lista de serviços, clique em o nome do service do gateway de entrada desejado para visualizar suas informações.
-
Verifique as informações de pod do gateway de entrada.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em o nome do seu cluster. No painel de navegação à esquerda, clique em .
Na parte superior da página Pods, selecione istio-system na lista suspensa Namespace.
Localize um pod do gateway de entrada na lista de pods e clique em o nome do pod para visualizar suas informações.
Exemplo 2: Crie e gerencie um gateway de saída com a API do Kubernetes
O ASM oferece o service de gateway de saída para rotear todo o tráfego de saída da malha.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em o nome da instância do ASM. No painel de navegação à esquerda, escolha .
Na página Egress Gateway, clique em Create from YAML.
-
Na página Create, insira um nome para o gateway de saída no campo Name, selecione istio-system na lista suspensa Namespace, configure os campos a seguir no arquivo YAML e clique em Create.
Para mais informações sobre os campos de CRD, consulte CRD fields.
-
Visualize as informações de service do gateway de saída:
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em o nome do seu cluster. No painel de navegação à esquerda, clique em .
Na parte superior da página Services, selecione istio-system na lista suspensa Namespace.
Na lista de serviços, clique em o nome do service do gateway de saída desejado para visualizar suas informações.
-
Verifique as informações de pod do gateway de saída.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em o nome do seu cluster. No painel de navegação à esquerda, clique em .
Na parte superior da página Pods, selecione istio-system na lista suspensa Namespace.
Localize um pod do gateway de saída na lista de pods e clique em o nome do pod para visualizar suas informações.
Campos de CRD
|
Campo |
Descrição |
Valor padrão |
|
metadata.name |
Nome do gateway do ASM. Tanto o service quanto o Deployment gerados no Kubernetes recebem o nome istio-{Valor do campo metadata.name}. |
Nenhum |
|
metadata.namespace |
Namespace onde o gateway do ASM será implantado. O service e o Deployment gerados no Kubernetes residem neste namespace. Importante
Para garantir que o service e o deployment gerados no Kubernetes funcionem no Istio 1.6 e versões posteriores, o namespace deve ser istio-system. |
istio-system |
|
clusterIds |
IDs dos clusters onde você deseja implantar o gateway do ASM. O valor é um array. Os clusters devem estar gerenciados na instância atual do ASM. |
Nenhum |
|
env |
Variáveis de ambiente do pod do gateway do ASM. O valor é um array. |
Nenhum |
|
externalTrafficPolicy |
Define se o gateway roteia tráfego externo para endpoints locais ao nó ou para todo o cluster. Valores válidos: Cluster ou Local. Nota
Este campo está disponível apenas para gateways de entrada. |
Cluster |
|
ports |
Portas e protocolos definidos para o pod do gateway do ASM. O valor é um array. Por exemplo,
Nota
Em versões anteriores à 1.9.7.107, o campo protocol deve ser definido como TCP. |
Nenhum |
|
gatewayType |
Tipo do gateway do ASM. Valores válidos: ingress e egress.
|
ingress |
|
replicaCount |
Número de réplicas de pod. |
1 |
|
configVolumes |
Informações sobre o volume de ConfigMap montado no pod do gateway do ASM. Exemplo:
|
Nenhum |
|
resources |
Configurações de recursos do pod do gateway do ASM. |
|
|
secretVolumes |
Informações sobre o volume de segredo montado no pod do gateway do ASM. Exemplo:
|
Nenhum |
|
serviceType |
Tipo de service do gateway do ASM. Valores válidos: LoadBalancer, NodePort e ClusterIP. Para gateways de saída, o valor deste campo geralmente é definido como ClusterIP. Importante
Se você utilizar um cluster registrado no plano de dados e este campo estiver definido como LoadBalancer, certifique-se de que o cluster suporte Services do tipo LoadBalancer. Caso contrário, a criação dos gateways do ASM pode falhar. |
LoadBalancer |
|
loadBalancerClass |
Classe do balanceador de carga do gateway do ASM. Este campo é válido apenas quando o parâmetro serviceType está definido como LoadBalancer. Instâncias do ASM v1.18 ou posterior suportam este campo. Para mais informações, consulte Associate an NLB instance with an ingress gateway. |
Nenhum |
|
serviceAnnotations |
Anotações do gateway do ASM. Exemplo: Nota
Este campo está disponível apenas para gateways cujo serviceType é LoadBalancer. Em gateways de saída, geralmente não se configura este campo. |
Nenhum |
|
serviceLabels |
Rótulos do gateway do ASM. |
Nenhum |
|
podLabels |
Rótulos do pod do gateway do ASM. |
Nenhum |
|
podAnnotations |
Anotações do pod do gateway do ASM. |
Nenhum |
|
rollingMaxSurge |
Número máximo de pods agendados acima do número esperado de réplicas durante uma atualização contínua. O valor pode ser absoluto ou percentual. |
"100%" |
|
rollingMaxUnavailable |
Quantidade máxima de pods que podem ficar indisponíveis durante uma atualização contínua. O valor pode ser absoluto ou percentual. |
"25%" |
|
overrides |
Permite configurar definições distintas para clusters específicos. Este campo fica disponível quando o campo clusterIds especifica dois ou mais clusters. O valor é do tipo MAP, contendo pares chave-valor. Nota
|
Nenhum |
|
kernel.enabled |
Define se os campos personalizados de kernel devem ser ativados. |
false |
|
kernel.parameters |
Campos de kernel. Os seguintes campos são suportados:
Nota
Alguns campos de kernel suportados pelo ASM podem tornar-se inválidos devido à versão do kernel de um host. Se isso ocorrer, o pod do gateway do ASM poderá reportar erros. Execute o comando Os valores de todos os campos de kernel devem estar no formato string. O YAML interpreta números como valores numéricos. Portanto, coloque cada valor entre aspas duplas ("). Exemplo: net.core.somaxconn: "65535". |
Nenhum |
|
compression.enabled |
Define se o recurso de compressão deve ser ativado para um gateway de entrada. Nota
Os campos relacionados à compression estão disponíveis apenas para gateways de entrada. |
false |
|
compression.content_type |
Tipos de dados a serem compactados, indicados pelo cabeçalho Content-Type. Exemplos:
|
Nenhum |
|
compression.disable_on_etag_header |
|
false |
|
compression.min_content_length |
Limiar que aciona a compressão. O valor do campo representa o tamanho do cabeçalho Content-Length. |
30 |
|
compression.remove_accept_encoding_header |
|
false |
|
compression.gzip |
Formato de compressão. Apenas o formato GZIP é suportado. Este campo é obrigatório para ativar o recurso de compressão. Se todos os outros campos usarem os valores padrão, deixe este campo vazio. Exemplo: |
Nenhum |
|
compression.gzip.memory_level |
Nível de uso de memória da biblioteca zlib. Valores válidos: 1 a 9. Um valor maior resulta em maior consumo de memória, porém oferece velocidade e qualidade de compressão superiores. |
5 |
|
compression.gzip.compression_level |
Nível de compressão utilizado pela biblioteca zlib. Valores válidos:
Nota
BEST_COMPRESSION indica a maior qualidade de compressão. BEST_SPEED indica a maior velocidade de compressão. A lista a seguir descreve alguns níveis de compressão:
|
DEFAULT_COMPRESSION |
|
compression.gzip.compression_strategy |
Política de compressão utilizada pela biblioteca zlib. Valores válidos:
Nota
DEFAULT_STRATEGY Esta é a política de compressão padrão. Ela utiliza o comportamento subjacente padrão e produz resultados satisfatórios na maioria dos casos. FILTERED Esta política prioriza o algoritmo de compressão por filtragem, aplicável à maioria dos cenários com dados duplicados. Ajuda a obter uma taxa de compressão maior para dados textuais e gerados artificialmente. HUFFMAN_ONLY Utiliza exclusivamente a codificação Huffman para compressão, sem outros algoritmos. Geralmente usada para comprimir dados estáticos, permitindo descompressão mais rápida. RLE O algoritmo Run Length Encoding (RLE) é altamente eficaz na compressão de sequências de dados repetitivos, como dados de bitmap. FIXED Utiliza uma árvore de codificação predefinida para realizar a codificação Huffman, em vez de árvores geradas dinamicamente com base nos dados específicos. Isso permite compressão e descompressão em alta velocidade, embora a taxa de compressão seja menor. |
DEFAULT_STRATEGY |
|
compression.gzip.window_bits |
Tamanho da janela da biblioteca zlib. Valores válidos: 9 a 15. |
12 |
|
compression.gzip.chunk_size |
Tamanho do buffer de saída da biblioteca zlib. |
4096 |
|
hostNetwork |
Define se o pod do gateway do ASM pode acessar o namespace de rede do host. Valores válidos:
|
false |
|
dnsPolicy |
Política de Domain Name System (DNS) configurada para o pod do gateway do ASM. Para mais informações sobre políticas de DNS, consulte DNS for Services and Pods. |
ClusterFirst |
|
cpu.targetAverageUtilization |
Utilização esperada de CPU quando o HPA está ativado. Valores válidos: 1 a 100. Se o uso de CPU exceder esse valor, o número de réplicas de pod aumenta. Se for inferior, o número de réplicas diminui. |
Nenhum |
|
memory.targetAverageUtilization |
Uso esperado de memória quando o HPA está ativado. Valores válidos: 1 a 100. Se o uso de memória exceder esse valor, o número de réplicas de pod aumenta. Se for inferior, o número de réplicas diminui. |
Nenhum |
|
maxReplicas |
Número máximo de réplicas de pod que o recurso HPA pode dimensionar para o gateway do ASM. O valor deste campo deve ser um número inteiro positivo. |
Nenhum |
|
minReplicas |
Número mínimo de réplicas de pod que o recurso HPA pode dimensionar para o gateway do ASM. O valor é um número inteiro positivo. O valor mínimo é 1. |
Nenhum |
|
nodeSelector |
Especifica o rótulo do nó onde o pod do gateway do ASM reside. Você pode personalizar a chave e o valor. Exemplo:
|
Nenhum |
|
affinity |
Configura a afinidade de nó para agendar o pod do gateway do ASM em um nó específico. Para mais informações, consulte Affinity and anti-affinity. |
Nenhum |
|
tolerations |
Configura tolerâncias para que o pod do gateway do ASM possa tolerar taints de nó. Para mais informações, consulte Taints and Tolerations. |
Nenhum |
Campos cuja alteração causa reinicialização contínua do gateway do ASM
Alterar os campos a seguir causará uma reinicialização contínua (rolling restart) do gateway do ASM. Tenha cautela ao modificar esses campos.
env
ports (Se a versão da instância do ASM for anterior à 1,16, alterar este campo causará a reinicialização contínua do gateway do ASM. Se a versão for 1,16 ou posterior, a alteração não provocará reinicialização contínua.)
configVolumes
resources
secretVolumes
podLabels
podAnnotations
kernel.enabled
kernel.parameters
hostNetwork
dnsPolicy
nodeSelector (sujeito a agendamento)
affinity (sujeito a agendamento)
tolerations (sujeito a agendamento)