O Service Mesh (ASM) utiliza uma CustomResourceDefinition (CRD) chamada IstioGateway (apiVersion: istio.alibabacloud.com/v1beta1) para gerenciar gateways de forma declarativa. Um controlador integrado monitora alterações nessa CRD e reconcilia os recursos Service, Deployment e ServiceAccount correspondentes no cluster Kubernetes em que está em execução.
Este tópico fornece a referência de campos da CRD, exemplos de configuração e definições de structs Go para gateways ASM.
Pré-requisitos
Adicione um cluster Container Service for Kubernetes (ACK) à sua instância ASM. Para mais informações, consulte Adicionar um cluster a uma instância ASM.
Implante os gateways ASM no namespace istio-system. O gateway lê sua configuração desse namespace durante a inicialização. Se a versão do Istio for 1.6 ou posterior e você implantar o gateway em um namespace diferente, a inicialização falhará devido à impossibilidade de recuperar a configuração necessária.
Exemplos de configuração
Gateway de entrada mínimo
O YAML abaixo cria um gateway de entrada básico com limites de recursos padrão:
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: my-ingressgateway
namespace: istio-system
spec:
gatewayType: ingress
clusterIds:
- <your-cluster-id>
ports:
- name: http2
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
replicaCount: 1
serviceType: LoadBalancer
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
Substitua <your-cluster-id> pelo ID real de um cluster gerenciado pela sua instância ASM.
Gateway de entrada completo
Este exemplo inclui campos opcionais como variáveis de ambiente, rótulos de pod, limites de recursos, configurações de atualização contínua e substituições por cluster:
Mostrar o arquivo YAML
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: myexample-customingressgateway
namespace: istio-system
spec:
clusterIds:
- <cluster-id-1>
- <cluster-id-2> # Deploy the gateway across multiple clusters
cpu:
targetAverageUtilization: 80
env:
- name: envname1
value: envvalue1
externalTrafficPolicy: Local
gatewayType: ingress
podLabels:
key1: value1
ports:
- name: status-port
port: 15020
targetPort: 15020
- name: http2
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 0
- name: tls
port: 15443
targetPort: 15443
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
requests:
cpu: 200m
memory: 256Mi
# configVolumes:
# - name: config-volume-lua
# configMapName: lua-libs
# mountPath: /var/lib/lua
# secretVolumes:
# - name: myexample-customingressgateway-certs
# secretName: istio-myexample-customingressgateway-certs
# mountPath: /etc/istio/myexample-customingressgateway-certs
serviceType: LoadBalancer
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
serviceLabels:
serviceLabelKey1: serviceLabelValue1
podAnnotations:
podAnnotationsKey1: podAnnotationsValue1
rollingMaxSurge: "100%"
rollingMaxUnavailable: "25%"
overrides:
<cluster-id-1>:
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
requests:
cpu: 200m
memory: 256Mi
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
<cluster-id-2>:
replicaCount: 2
resources:
limits:
cpu: '4'
memory: 4G
requests:
cpu: 400m
memory: 512Mi
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s2.small
Para gerenciar o gateway de entrada programaticamente com um cliente Go, consulte Structs Go para um gateway ASM .
Gateway de saída
Um gateway de saída roteia todo o tráfego de saída na malha. Geralmente, define-se o campo serviceType como ClusterIP, pois não é necessário um balanceador de carga externo.
Mostrar o arquivo YAML
apiVersion: istio.alibabacloud.com/v1beta1
kind: IstioGateway
metadata:
name: egressgateway
namespace: istio-system
spec:
autoCreateGatewayYaml: false
clusterIds:
- <your-cluster-id>
disableContainerPortExposed: true
dnsPolicy: ClusterFirst
gatewayType: egress
hostNetwork: false
podLabels:
security.istio.io/tlsMode: istio
ports:
- name: http-0
port: 80
protocol: HTTP
targetPort: 80
- name: https-1
port: 443
protocol: HTTPS
targetPort: 443
readinessProbe: {}
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 4G
requests:
cpu: 200m
memory: 256Mi
rollingMaxSurge: 25%
rollingMaxUnavailable: 25%
runAsRoot: true
serviceType: ClusterIP
Criar um gateway pelo console
Faça login no console ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em nome da instância ASM.
No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway (ou Egress Gateway).
Clique em Create from YAML.
Na página Create, insira um nome no campo Name, selecione istio-system na lista suspensa Namespace, cole a configuração YAML e clique em Create.
Verificar o gateway
Após criar o gateway, verifique se o Service e os pods estão em execução.
Faça login no console ACK. No painel de navegação, clique em Clusters.
Clique em nome do cluster. No painel à esquerda, escolha Network > Services.
Selecione istio-system na lista suspensa Namespace e confirme a existência do Service do gateway.
No painel à esquerda, escolha Workloads > Pods. Selecione istio-system na lista suspensa Namespace e confirme se os pods do gateway estão em execução.
Referência de campos da CRD
Campos principais
| Campo | Tipo | Descrição | Padrão |
|---|---|---|---|
metadata.name | string | Nome do gateway ASM. Os recursos Service e Deployment gerados no Kubernetes recebem ambos o nome istio-{metadata.name}. | Nenhum |
metadata.namespace | string | Namespace do gateway ASM. O Service e o Deployment gerados residem neste namespace. Importante Deve ser | istio-system |
gatewayType | string | Tipo de gateway. Valores válidos: ingress (roteia tráfego de entrada) e egress (roteia tráfego de saída). | ingress |
clusterIds | string[] | IDs dos clusters onde o gateway será implantado. Cada cluster deve ser gerenciado pela instância ASM atual. | Nenhum |
Configuração do Service
| Campo | Tipo | Descrição | Padrão |
|---|---|---|---|
serviceType | string | Tipo do Service Kubernetes. Valores válidos: LoadBalancer, NodePort, ClusterIP. Para gateways de saída, geralmente define-se como ClusterIP. Importante Se você usar um cluster registrado e definir este campo como | LoadBalancer |
loadBalancerClass | string | A classe loadBalancerClass do Service. Válido apenas quando serviceType é LoadBalancer. Requer ASM v1.18 ou posterior. Para mais informações, consulte Associar uma instância NLB a um gateway de entrada. | Nenhum |
externalTrafficPolicy | string | Determina se o tráfego de entrada é roteado para endpoints locais do nó ou para todo o cluster. Valores válidos: Cluster, Local. Aplica-se apenas a gateways de entrada. | Cluster |
serviceAnnotations | map[string]string | Anotações no Service do gateway. Aplica-se apenas a gateways com serviceType definido como LoadBalancer. Geralmente não é configurado para gateways de saída. Para anotações comuns, consulte Usar anotações para configurar balanceamento de carga. | Nenhum |
serviceLabels | map[string]string | Rótulos no Service do gateway. | Nenhum |
ports | ServicePort[] | Portas de serviço expostas pelo gateway. Cada entrada inclui name, port, targetPort e, opcionalmente, protocol. Nota Em versões anteriores a 1.9.7.107, defina | Nenhum |
Configuração do Pod
|
Campo |
Tipo |
Descrição |
Padrão |
|
|
int32 |
Número de réplicas de pods. |
|
|
|
ResourceRequirements |
Solicitações e limites de recursos de CPU e memória. |
limits: cpu |
|
|
EnvVar[] |
Variáveis de ambiente injetadas no contêiner do gateway. |
Nenhum |
|
|
map[string]string |
Rótulos no pod do gateway. |
Nenhum |
|
|
map[string]string |
Anotações no pod do gateway. |
Nenhum |
|
|
map[string]string |
Rótulos de nó usados para agendar o pod do gateway em nós específicos. |
Nenhum |
|
|
Affinity |
Regras de afinidade de nó para agendamento do pod do gateway. Para mais informações, consulte Afinidade e anti-afinidade. |
Nenhum |
|
|
Toleration[] |
Tolerâncias que permitem agendar o pod do gateway em nós com taints correspondentes. Para mais informações, consulte Taints e Tolerations. |
Nenhum |
|
|
bool |
Indica se o pod do gateway compartilha o namespace de rede do host. |
|
|
|
string |
Política de DNS para o pod do gateway. Para mais informações, consulte DNS para Services e Pods. |
|
|
|
bool |
Indica se o contêiner do gateway executa como root. |
|
|
|
ReadinessProbeConfiguration |
Configurações de sonda de prontidão para o pod do gateway. |
Nenhum |
Configuração do Deployment
|
Campo |
Tipo |
Descrição |
Padrão |
|
|
string |
Número máximo de pods que podem exceder a contagem desejada de réplicas durante uma atualização contínua. Aceita um valor absoluto ou uma porcentagem. |
|
|
|
string |
Quantidade máxima de pods que podem ficar indisponíveis durante uma atualização contínua. Aceita um valor absoluto ou uma porcentagem. |
|
Montagens de volume
|
Campo |
Tipo |
Descrição |
Padrão |
|
|
ConfigVolume[] |
Volumes de ConfigMap montados no pod do gateway. Cada entrada inclui |
Nenhum |
|
|
SecretVolume[] |
Volumes de Secret montados no pod do gateway. Cada entrada inclui |
Nenhum |
Exemplo de volume de ConfigMap:
configVolumes:
- name: config-volume-lua
configMapName: lua-libs
mountPath: /var/lib/lua
Exemplo de volume de Secret:
secretVolumes:
- name: myexample-customingressgateway-certs
secretName: istio-myexample-customingressgateway-certs
mountPath: /etc/istio/myexample-customingressgateway-certs
Horizontal Pod Autoscaling (HPA)
|
Campo |
Tipo |
Descrição |
Padrão |
|
|
int32 |
Utilização alvo de CPU (1--100). Quando a utilização excede esse limiar, o HPA escala para cima. Quando cai abaixo, o HPA escala para baixo. |
Nenhum |
|
|
int32 |
Utilização alvo de memória (1--100). Segue o mesmo comportamento de dimensionamento da CPU. |
Nenhum |
|
|
int32 |
Número máximo de réplicas para as quais o HPA pode escalar. Deve ser um número inteiro positivo. |
Nenhum |
|
|
int32 |
Número mínimo de réplicas para as quais o HPA pode escalar. Deve ser um número inteiro positivo (valor mínimo: 1). |
Nenhum |
Substituições por cluster
Utilize o campo overrides para aplicar configurações diferentes por cluster quando clusterIds incluir dois ou mais clusters.
|
Campo |
Tipo |
Descrição |
Padrão |
|
|
map[string]Configuration |
Um mapa onde cada chave é um ID de cluster do campo |
Nenhum |
Os seguintes campos podem ser substituídos por cluster:
serviceAnnotationspodAnnotationsresourcesreplicaCountCampos relacionados ao HPA (ASM v1.16 ou posterior)
serviceType(ASM v1.16 ou posterior)
Exemplo:
overrides:
cluster1Id:
replicaCount: 1
resources:
limits:
cpu: '2'
memory: 2G
serviceAnnotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
cluster2Id:
replicaCount: 2
resources:
limits:
cpu: '4'
memory: 4G
Ajuste de kernel
|
Campo |
Tipo |
Descrição |
Padrão |
|
|
bool |
Indica se parâmetros personalizados de kernel devem ser aplicados ao pod do gateway. |
|
|
|
KernelParameters |
Parâmetros sysctl a serem ajustados. Todos os valores devem ser strings — coloque números entre aspas duplas (por exemplo, |
Nenhum |
Parâmetros de kernel suportados:
net.core.somaxconn, net.core.netdev_max_backlog, net.ipv4.tcp_rmem, net.ipv4.tcp_wmem, net.ipv4.ip_local_port_range, net.ipv4.tcp_fin_timeout, net.ipv4.tcp_tw_timeout, net.ipv4.tcp_tw_reuse, net.ipv4.tcp_tw_recycle, net.ipv4.tcp_timestamps, net.ipv4.tcp_retries2, net.ipv4.tcp_slow_start_after_idle, net.ipv4.tcp_max_orphans, net.ipv4.tcp_max_syn_backlog, net.ipv4.tcp_no_metrics_save, net.ipv4.tcp_autocorking, kernel.printk, vm.swappiness
Alguns parâmetros de kernel podem ser inválidos dependendo da versão do kernel do host. Se o pod do gateway reportar erros, execute kubectl describe pod para identificar parâmetros inválidos e remova-os.
Compressão (apenas gateways de entrada)
|
Campo |
Tipo |
Descrição |
Padrão |
|
|
bool |
Indica se a compressão de resposta deve ser ativada. |
|
|
|
GzipConfiguration |
Configurações de compressão Gzip. Necessário para ativar a compressão. Defina como |
Nenhum |
|
|
string[] |
Tipos de conteúdo a compactar, identificados pelo cabeçalho |
Nenhum |
|
|
uint32 |
Tamanho mínimo do corpo da resposta (em bytes) que aciona a compressão, com base no cabeçalho |
|
|
|
bool |
Quando definido como |
|
|
|
bool |
Quando definido como |
|
Configurações de Gzip
|
Campo |
Tipo |
Descrição |
Padrão |
|
|
uint32 |
Nível de uso de memória para a biblioteca zlib (1--9). Valores mais altos usam mais memória, mas melhoram a velocidade e a qualidade da compressão. |
|
|
|
string |
Nível de compressão para a biblioteca zlib. Valores válidos: de |
|
|
|
string |
Estratégia de compressão para a biblioteca zlib. Valores válidos: |
|
|
|
uint32 |
Tamanho da janela para a biblioteca zlib (9--15). Valores maiores melhoram a taxa de compressão, mas aumentam o uso de memória. |
|
|
|
uint32 |
Tamanho do buffer de saída para a biblioteca zlib. |
|
Detalhes das estratégias de compressão:
|
Estratégia |
Caso de uso |
|
|
Compressão de uso geral. Funciona bem para a maioria dos dados. |
|
|
Dados com muitos padrões repetidos, como texto ou dados gerados. |
|
|
Dados estáticos onde a descompressão rápida é prioridade. |
|
|
Dados com longas sequências de bytes repetidos, como bitmaps. |
|
|
Usa uma árvore de codificação Huffman predefinida para compressão e descompressão rápidas, às custas da taxa de compressão. |
Campos que acionam uma reinicialização contínua
Alterar qualquer um dos campos a seguir causa uma reinicialização contínua dos pods do gateway. Planeje as alterações com cuidado em ambientes de produção.
|
Campo |
Observação |
|
|
|
|
|
No ASM v1.16 ou posterior, alterações em |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A reinicialização depende do agendamento do pod. |
|
|
A reinicialização depende do agendamento do pod. |
|
|
A reinicialização depende do agendamento do pod. |