Quando os proxies Waypoint lidam com altos volumes de tráfego L7 ou exigem desligamento gracioso para conexões de longa duração, as alocações de recursos padrão podem ser insuficientes. O Service Mesh (ASM) permite personalizar as solicitações de CPU e memória, os limites de escalonamento do Horizontal Pod Autoscaler (HPA) e o comportamento de drenagem do proxy para proxies Waypoint implantados por meio da Gateway API no modo Ambient.
Pré-requisitos
Antes de começar, verifique se você tem:
A versão 1.2.1 ou posterior do componente Gateway API instalada no cluster
Como funciona
Para personalizar um Waypoint, defina as configurações desejadas em um ConfigMap e referencie-o no recurso Gateway. O ASM lê o ConfigMap e mescla suas substituições com a configuração de recursos padrão usando um Strategic Merge Patch. Seu ConfigMap precisa conter apenas os campos que você deseja alterar — o ASM mescla as alterações e cria ou atualiza o Deployment e o HPA do Waypoint de acordo.
O ConfigMap suporta três seções de configuração:
| Seção | Finalidade |
|---|---|
data.horizontalPodAutoscaler | Configurações do HPA, como contagens mínima e máxima de réplicas |
data.deployment | Configurações no nível do Pod, como solicitações de recursos de contêiner e configurações de tempo de desligamento gracioso |
data.proxyConfig | Configurações de tempo de execução do proxy Istio, como duração de drenagem e comportamento de encerramento |
Criar um ConfigMap com configurações personalizadas
O ConfigMap deve estar no mesmo namespace que o recurso Gateway que ele configura.
Salve o seguinte conteúdo como
gw-options.yaml.apiVersion: v1 kind: ConfigMap metadata: name: gw-options data: horizontalPodAutoscaler: | spec: minReplicas: 2 maxReplicas: 2 deployment: | spec: # Do not configure replicas when HPA is enabled. # replicas: 4 template: spec: containers: - name: istio-proxy resources: requests: cpu: 1000m # The maximum wait time before a pod goes offline. terminationGracePeriodSeconds: 120 proxyConfig: | # The proxy drain duration. drainDuration: 30s # The maximum duration for the proxy to stop draining. Ensure that terminationGracePeriodSeconds > terminationDrainDuration > drainDuration. terminationDrainDuration: 60sAplique o ConfigMap.
kubectl apply -f gw-options.yaml
Referência de parâmetros do ConfigMap
Parâmetros do HPA (data.horizontalPodAutoscaler)
| Parâmetro | Descrição |
|---|---|
spec.minReplicas | Número mínimo de réplicas de pod do Waypoint. No exemplo anterior, definido como 2. |
spec.maxReplicas | Número máximo de réplicas de pod do Waypoint. No exemplo anterior, definido como 2 (contagem de réplicas fixa). |
Não defina replicas na seção Deployment quando o HPA estiver ativado. O controlador do HPA gerencia as contagens de réplicas automaticamente, e um valor estático de replicas conflita com as decisões de escalonamento do HPA.
Parâmetros de Deployment (data.deployment)
| Parâmetro | Descrição |
|---|---|
spec.template.spec.containers[].name | Nome do contêiner. Defina como istio-proxy para o contêiner do proxy Waypoint. |
spec.template.spec.containers[].resources.requests.cpu | Solicitação de CPU para o proxy Waypoint. No exemplo anterior, definida como 1000m (1 vCPU). Aumente este valor para namespaces com alto tráfego L7. |
spec.template.spec.terminationGracePeriodSeconds | Tempo máximo (em segundos) que o Kubernetes aguarda antes de encerrar forçosamente um pod durante o desligamento. No exemplo anterior, definido como 120. |
Parâmetros do ProxyConfig (data.proxyConfig)
| Parâmetro | Descrição |
|---|---|
drainDuration | Duração pela qual o proxy Envoy drena conexões ativas durante o desligamento. No exemplo anterior, definida como 30s. |
terminationDrainDuration | Duração máxima que o proxy aguarda após iniciar o desligamento gracioso antes de encerrar as conexões restantes. No exemplo anterior, definida como 60s. |
Os três parâmetros de tempo devem satisfazer esta restrição de ordenação: terminationGracePeriodSeconds > terminationDrainDuration > drainDuration. Se esta restrição for violada, as conexões poderão ser encerradas antes que o proxy termine a drenagem, causando falhas nas requisições.
Vincular o ConfigMap ao recurso Gateway
Após criar o ConfigMap, referencie-o no recurso Gateway por meio do campo infrastructure.parametersRef.
Salve o seguinte conteúdo como
gateway.yaml. O blocoinfrastructure.parametersRefreferencia o ConfigMapgw-options. O ASM lê esta referência e aplica os valores do ConfigMap ao Deployment e ao HPA do Waypoint.apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: waypoint namespace: default spec: infrastructure: parametersRef: group: "" kind: ConfigMap name: gw-options gatewayClassName: istio-waypoint listeners: - allowedRoutes: namespaces: from: Same name: mesh port: 15008 protocol: HBONEAplique o recurso Gateway.
kubectl apply -f gateway.yaml
Verificar a configuração
Após aplicar ambos os recursos, verifique se o ASM mesclou as configurações do ConfigMap no Deployment e no HPA do Waypoint.
Verifique o Deployment do Waypoint. Na saída, confirme que:
O contêiner
istio-proxytemcpu: 1000memresources.requests.terminationGracePeriodSecondsé120.
kubectl get deployment waypoint -n default -o yamlVerifique o HPA. Confirme que
MINPODSé2eMAXPODSé2para o HPA do Waypoint.kubectl get hpa -n default