Logo GH

Serviço Mesh e política de tráfego

1) Por que precisa de um Service Mesh

O Service Mesh é uma camada de infraestrutura de tráfego east-west (interligações) que oferece recursos uniformizados sem reescrever o código:
  • Segurança padrão: mTLS, emissão automática/rotação de certificados, identidade de serviços.
  • Políticas de tráfego: rotação L7, testes de canário/AV, degradação e resistência.
  • Observabilidade: métricas, logs, traçados, sinais de ouro em cada chamada.
  • Operações: Políticas unificadas para todos os idiomas/quadros.

Diferentemente da entrada API: gateway - perímetro north-south; mesh - east-west dentro de um cluster/organização. Muitas vezes trabalham juntos.

2) Arquitetura: planos e pattern

Data Plane: sidecar-proxy (Envoy/Linkerd-proxy/haproxy), que intercepta o tráfego de poda/BM.
Controle Plane: distribui configurações (rotas, políticas, certificados), armazena estados e publica discovery.
Identidade: Geralmente ID SPIFFE e certificados X.509 automáticos (SPIRE/CA embutido).
Pontos de entrada/saída: ingress/egress-gateway para controlar os fluxos de limite.
Modos de implementação: sidecar para cada subsolo; para-nó/ambient-moda em novas implementações.

3) Política de segurança e zero-trust

1. mTLS by default: criptografia e autenticação mútua de servis↔servis.

2. AuthN/AuthZ:
  • AuthN: Confiamos apenas nas identidades emitidas por CA mesh 'a (SPIFFE).
  • AuthZ: As regras declaratórias «quem pode a quem e como» (RBAC/ABAC).
  • 3. Isolamento e controle egress:

  • Domínios/sub-redes permitidos; saída forçada através de egress-gateway.
  • Bloquear os saques diretos.
  • 4. Rotação de segredos: certificados de curta duração, restauração automática do proxy.

Istio (exemplo: global mTLS rigoroso):
yaml apiVersion: security. istio. io/v1beta1 kind: PeerAuthentication metadata: { name: default, namespace: istio-system }
spec:
mtls: { mode: STRICT }
Istio (exemplo: permitir apenas inventory→billing no gRPC):
yaml apiVersion: security. istio. io/v1beta1 kind: AuthorizationPolicy metadata: { name: billing-allow, namespace: prod }
spec:
selector: { matchLabels: { app: billing } }
rules:
- from:
- source: { principals: ["spiffe://corp. local/ns/prod/sa/inventory"] }
to:
- operation: { ports: ["8080"], methods: ["POST"], paths: ["/proto. Billing/"] }

4) Políticas de tráfego: sustentabilidade e rotação

4. 1 Os temporizadores e os retais

Timeouts: Obrigatório (connect/read/overall).
Retrees: apenas para operações idumpotentes; backoff + jitter; limites per-try timeout.

Istio (VirtualService):
yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService metadata: { name: orders }
spec:
hosts: ["orders"]
http:
- route:
- destination: { host: orders, subset: v1, port: { number: 8080 } }
timeout: 5s retries:
attempts: 2 perTryTimeout: 2s retryOn: "5xx,connect-failure,reset"

4. 2 Circuit Breaker и outlier detection

CB: limita as consultas/conexões simultâneas para proteger upstream.
Outlier: Executa instâncias «más» sobre erros/laticínios.

Istio (DestinationRule):
yaml apiVersion: networking. istio. io/v1beta1 kind: DestinationRule metadata: { name: orders }
spec:
host: orders trafficPolicy:
connectionPool:
http: { http1MaxPendingRequests: 1024, maxRequestsPerConnection: 100 }
outlierDetection:
consecutive5xxErrors: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50

4. 3 Canários e condições

Weighted: divisão de tráfego em v1/v2.
Header-based: bandeiras/cookies/tenant → transferir para a nova versão.
Sessão affinity: hash por chave (com cuidado com zoom).

yaml http:
- match: [{ headers: { "x-experiment": { exact: "new" } } }]
route: [{ destination: { host: orders, subset: v2 } }]
- route:
- destination: { host: orders, subset: v1, weight: 90 }
- destination: { host: orders, subset: v2, weight: 10 }

4. 4 Fault Inhation e degradação

Injeção de atrasos/erros para teste de estabilidade e SLO.

yaml fault:
delay: { fixedDelay: 300ms, percentage: { value: 10 } }
abort: { httpStatus: 503, percentage: { value: 1 } }

5) Limites de rede: ingress/egress e serviços externos

Origins-gateway: único ponto de entrada para clientes externos em mesh; integração com WAF/OIDC/ratelimits.
Egress-gateway: saída central com lista de hospedeiros autorizados, inspeção TLS, gravação de telemetria.
ServiceEntry: declara SNI/hosts externos como parte de mesh (políticas e mTLS-origination aplicáveis).

yaml apiVersion: networking. istio. io/v1beta1 kind: ServiceEntry metadata: { name: payments-external }
spec:
hosts: ["api. payments. com"]
ports: [{ number: 443, name: https, protocol: TLS }]
resolution: DNS location: MESH_EXTERNAL

6) Multi-cluster, multi-network e híbrido

Domínio PKI/trust compartilhado: identidade SPIFE unificada entre os clusters.
Endpoint discovery: bolas de serviços entre regiões; prioridade local e failover.
Isolação de área, políticas para-regionais, limites e prioridades.
VM em mesh: conexão legacy/stateful sistemas com proxy e as mesmas políticas.

7) Observabilidade, SLO e exploração

Метрики: `requests_total`, `request_duration_ms{p50,p95,p99}`, `5xx_rate`, `retry_attempts`, `cb_state`, `mTLS_authz_denied`.
Logs de acesso: estruturais, com 'traceparent', 'user/tenant', 'response _ flags'.
Tracing: Injeção automática de cabeçalho (W3C Trace Context), sampleamento, span em nível hop.
SLO: metas de p99/erros de rota (service→service).
Alerts: «5xx», «reset», «outlier _ ejtions», degradação de mTLS (handshake failures).

8) Desempenho e custo

Sidecar adiciona falsificações (CPU/RAM/latency). Otimizamos:
  • Granelagem: incluir a política onde for necessário; não incluir filtros pesados em todo o lado.
  • Pulas: dividir caminhos (críticos/de fundo) em diferentes rotas e limites.
  • Perfil: p99 em rotas «frias», volume de telemetria (rate-limit logs/trailers).
  • Considerar ambient/sidecarless modos se suportados e adequados aos requisitos.

9) Segurança e Complacência

Acesso mínimo necessário: permitir claramente direções e métodos.
Políticas de neymspace/tenentes: limites de rede/autorizações.
Rotação de chaves/SA: programada e de emergência; certificados TTL curtos.
PII/segredos: camuflagem em logs/trens; criptografado no fio/em paz.
Auditoria: quem, quando e quais políticas mudou; aprujos de duas etapas.

10) Integração com o nível K8s

Políticas Mesh complementam em vez de substituir NetworkPolicy.
No insress/egress-gateway, você pode pendurar o nível PodSecurity/PSA abaixo.
NRA/skailing automático: Leve em conta os retais/ST. Eles mudam a carga.
Planos de lançamento: peso canário através de VirtualService + avanço automático em SLO.

11) Folha de cheque de implementação

  • Os limites de credibilidade foram definidos e o LICT mTLS incluído.
  • Políticas AutZ incluídas: quem para quem, em quais portos/métodos.
  • Timeouts/retries configurados e outlier detation definidos caminhos idumpotentes.
  • Rotas de canário e plano rollback são especificados; fault-inhation - apenas em não-prode.
  • As dependências externas foram emitidas através de egress-gateway e ServiceEntry.
  • As métricas, os logs, as pistas foram configurados; dashboards e alertas em p99/5xx/CB.
  • Estão previstas quotas/limites per-tenant/namespace.
  • Preparado runbooks: fuga de certificado, falha CA, degradação de upstream, massa 503/RESET.
  • Plano multi-cluster (PKI compartilhado, prioridades locais, DRA.).
  • Dias de teste (game days): queda de controle de plano, parar sidecar, quebra de rede, upstream «venenoso».

12) Anti-pattern

Mesh «em todos os lugares e imediatamente» sem inventário de rotas e SLO → uma complexidade cara.
Retraias padrão para todos os métodos → duplicação de efeitos e avalanche de tráfego.
O desligado «temporariamente» fica para sempre.
Egress sem gateway → fuga de dados/dependências não contabilizadas.
Uma política global para todos os serviços → segurança falsa e falsos efeitos.
Observabilidade zero: Ativaram a mesh, mas não coletamos métricas/trailers - estamos a perder o sentido.

13) Receitas rápidas

Linkerd: ativar mTLS e policy por servidor

yaml apiVersion: policy. linkerd. io/v1beta1 kind: Server metadata: { name: billing, namespace: prod }
spec:
podSelector: { matchLabels: { app: billing } }
port: 8080 apiVersion: policy. linkerd. io/v1beta1 kind: ServerAuthorization metadata: { name: billing-allow-inventory, namespace: prod }
spec:
server: { name: billing }
client:
meshTLS:
identities: ["inventory. prod. serviceaccount. identity. linkerd. cluster. local"]

Consul (L7 intent + splitter)

hcl
Kind = "service-router"
Name = "orders"
Routes = [{
Match { HTTP { PathPrefix = "/v1" } }
Destination { Service = "orders" }
}]
Kind = "service-splitter"
Name = "orders"
Splits = [
{ Weight = 90, ServiceSubset = "v1" },
{ Weight = 10, ServiceSubset = "v2" }
]

14) FAQ

O mesh precisa de uma pequena equipa?
Se não houver serviços 3-5, mais vezes. Comece com um bom ingress e bibliotecas de estabilidade. Ligue mesh quando você precisar de mTLS padrão, políticas unificadas e rastreamento sem alterar o código.

Como controlar o custo?
Mede as barras (CPU/RAM/latency) nas vias críticas, desliga os filtros extras, reduza o volume de logs/trailers, use os modos sem sidecar onde for seguro.

É possível atrapalhar mesh e proxy personalizados manualmente?
Sim, mas evite o roading duplo/retrações duplicadas. O único lugar é verdadeiro.

O que é mais importante, segurança ou desempenho?
Por padrão, segurança (mTLS, AuthZ). O desempenho é obtido por sintonização de conexion pools, outlier detecção, rotas de destino.

15) Resultado

O Service Mesh transforma a rede entre os serviços em uma camada programável com políticas unificadas: criptografia e identidade, rotação fina e sustentabilidade, telemetria e quotas. Comece com caminhos críticos, inclua mTLS e AuthZ aparentes, instantes/retais/ST, controle de egress, mede p99 e 5xx, execute o game days. Então mesh será um aumento de confiabilidade e velocidade de lançamento, em vez de uma fonte de surpresa.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Telegram
@Gamble_GC
Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.