Ajudar a melhorar esta página
Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.
Monitoramento do tráfego de workloads do Kubernetes com observabilidade da rede de contêineres
O Amazon EKS oferece recursos de observabilidade da rede aprimorados que proporcionam insights aprofundados sobre o seu ambiente de rede de contêineres. Essas funcionalidades auxiliam na melhor compreensão, monitoramento e solução de problemas no panorama de rede do Kubernetes na AWS. Com a observabilidade da rede de contêineres aprimorada, você pode aproveitar métricas de rede granulares para uma melhor detecção proativa de anomalias em todo o tráfego do cluster, fluxos entre zonas de disponibilidade e serviços da AWS. Com essas métricas, é possível mensurar a performance do sistema e visualizar as métricas subjacentes por meio da pilha de observabilidade de sua preferência.
Além disso, o Amazon EKS agora fornece visualizações para o monitoramento da rede no console da AWS, agilizando e aprimorando a precisão da solução de problemas para uma análise de causa raiz com mais rapidez. Você também pode aproveitar essas funcionalidades visuais para identificar os recursos que mais geram comunicação e os fluxos de rede que causam retransmissões e tempos limite de retransmissão, eliminando pontos cegos durante incidentes.
Essas funcionalidades são habilitadas pelo Amazon CloudWatch Network Flow Monitor.
Casos de uso
Mensurar a performance da rede para detecção de anomalias
Diversas equipes padronizam uma pilha de observabilidade que lhes permite mensurar a performance do sistema, visualizar métricas do sistema e receber alertas caso um limite específico seja violado. A observabilidade da rede de contêineres no EKS é compatível com esse modelo, fornecendo métricas essenciais do sistema para coleta, o que expande a observabilidade da performance da rede do sistema nos níveis de pods e de nós de processamento.
Aproveitar as visualizações do console para uma solução de problemas mais precisa
Caso ocorra um alarme em seu sistema de monitoramento, talvez você precise se concentrar no cluster e na workload em que o problema se originou. Para apoiar isso, você pode aproveitar as visualizações no console do EKS que restringem o escopo da investigação no nível do cluster e aceleram a identificação dos fluxos de rede responsáveis pela maioria das retransmissões, pelos tempos limite de retransmissão e pelo volume de dados transferidos.
Rastrear os recursos que mais geram comunicação no ambiente do Amazon EKS
Muitas equipes executam o EKS como a base de suas plataformas, tornando-o o ponto central da atividade da rede de um ambiente de aplicação. Usando as funcionalidades de monitoramento de rede deste recurso, é possível rastrear quais workloads são responsáveis pela maior parte do tráfego (com o valor mensurado pelo volume de dados) dentro do cluster, em todas as zonas de disponibilidade (AZs), bem como o tráfego para destinos externos dentro da AWS (como o DynamoDB e o S3) e além da Nuvem AWS (internet ou ambientes on-premises). Além disso, você pode monitorar a performance de cada um desses fluxos com base em retransmissões, tempos limite de retransmissão e dados transferidos.
Recursos
-
Métricas de performance: este recurso permite que você extraia métricas de sistema relativas à rede, tanto de pods quanto de nós de processamento, diretamente do Agente do Network Flow Monitor (NFM) que opera no seu cluster do EKS.
-
Mapa do serviço: este recurso oferece uma visualização dinâmica da comunicação interna entre as workloads do cluster, possibilitando a identificação rápida de métricas relevantes (retransmissões [RT], tempos limite de retransmissão [RTO] e dados transferidos [DT]) relativas aos fluxos de rede entre os pods em comunicação.
-
Tabela de fluxo: com esta tabela, é possível monitorar os recursos que mais geram comunicação entre as workloads do Kubernetes no cluster sob três perspectivas distintas: visualização de serviços da AWS, visualização do cluster e visualização externa. Para cada visualização, você consegue visualizar as retransmissões, os tempos limite de retransmissão e os dados transferidos entre o pod de origem e o destino.
-
Visualização de serviços da AWS: mostra os recursos que mais geram comunicação com os serviços da AWS (DynamoDB e S3)
-
Visualização do cluster: mostra os recursos que mais geram comunicação dentro do cluster (leste ← para → oeste)
-
Visualização externa: mostra os recursos que mais geram comunicação com destinos externos ao cluster fora da AWS
-
Conceitos básicos
Para começar a usar, habilite a observabilidade da rede de contêineres no console do EKS em um cluster novo ou já existente. Esta ação automatiza a criação das dependências do Network Flow Monitor (NFM), como os recursos de Escopo e Monitor. Além disso, você precisará instalar o complemento do Agente do Network Flow Monitor. Como alternativa, você pode instalar essas dependências usando a
AWS CLI, APIs do EKS (para o complemento), APIs do NFM ou infraestrutura como código (como o Terraform
Ao usar o Network Flow Monitor no EKS, é possível manter o fluxo de trabalho de observabilidade e a pilha de tecnologia existentes, enquanto aproveita um conjunto de recursos adicionais que permitem compreender e otimizar ainda mais a camada de rede do seu ambiente do EKS. Para saber mais sobre os preços do Network Flow Monitor, clique aqui.
Pré-requisitos e observações importantes
-
Conforme mencionado anteriormente, ao habilitar a observabilidade da rede de contêineres pelo console do EKS, as dependências de recursos subjacentes do NFM (nomeadamente Escopo e Monitor) serão criadas automaticamente para você, e o sistema guiará você durante a instalação do complemento do EKS para o NFM.
-
Se você desejar ativar este recurso usando infraestrutura como código (IaC), como o Terraform, precisará definir as seguintes dependências em sua IaC: Escopo do NFM, Monitor do NFM e o complemento do EKS para NFM. Além disso, você precisará conceder as permissões relevantes ao complemento do EKS usando a Identidade de Pods ou os perfis do IAM para contas de serviço (IRSA, na sigla em inglês).
-
Você deve estar utilizando, no mínimo, a versão 1.1.0 do complemento do EKS para o agente do NFM.
-
Você deve usar a versão 6.21.0 ou as versões posteriores do Terraform AWS Provider
para obter suporte aos recursos do Network Flow Monitor.
Permissões obrigatórias do IAM
Complemento do EKS para o agente do NFM
É possível usar a política gerenciada pela AWS CloudWatchNetworkFlowMonitorAgentPublishPolicy com a Identidade de Pods. Esta política contém permissões para que o agente do NFM envie relatórios de telemetria (métricas) para um endpoint do Network Flow Monitor.
{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "networkflowmonitor:Publish" ], "Resource" : "*" } ] }
Observabilidade da rede de contêineres no console do EKS
As permissões listadas abaixo são obrigatórias para habilitar o recurso e visualizar o mapa do serviço e a tabela de fluxo diretamente no console.
{ "Version" : "2012-10-17", "Statement" : [ { "Effect": "Allow", "Action": [ "networkflowmonitor:ListScopes", "networkflowmonitor:ListMonitors", "networkflowmonitor:GetScope", "networkflowmonitor:GetMonitor", "networkflowmonitor:CreateScope", "networkflowmonitor:CreateMonitor", "networkflowmonitor:TagResource", "networkflowmonitor:StartQueryMonitorTopContributors", "networkflowmonitor:StopQueryMonitorTopContributors", "networkflowmonitor:GetQueryStatusMonitorTopContributors", "networkflowmonitor:GetQueryResultsMonitorTopContributors" ], "Resource": "*" } ] }
Uso da AWS CLI, da API do EKS e da API do NFM
#!/bin/bash # Script to create required Network Flow Monitor resources set -e CLUSTER_NAME="my-eks-cluster" CLUSTER_ARN="arn:aws:eks:{Region}:{Account}:cluster/{ClusterName}" REGION="us-west-2" AGENT_NAMESPACE="amazon-network-flow-monitor" echo "Creating Network Flow Monitor resources..." # Check if Network Flow Monitor agent is running in the cluster echo "Checking for Network Flow Monitor agent in cluster..." if kubectl get pods -n "$AGENT_NAMESPACE" --no-headers 2>/dev/null | grep -q "Running"; then echo "Network Flow Monitor agent exists and is running in the cluster" else echo "Network Flow Monitor agent not found. Installing as EKS addon..." aws eks create-addon \ --cluster-name "$CLUSTER_NAME" \ --addon-name "$AGENT_NAMESPACE" \ --region "$REGION" echo "Network Flow Monitor addon installation initiated" fi # Get Account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) echo "Cluster ARN: $CLUSTER_ARN" echo "Account ID: $ACCOUNT_ID" # Check for existing scope echo "Checking for existing Network Flow Monitor Scope..." EXISTING_SCOPE=$(aws networkflowmonitor list-scopes --region $REGION --query 'scopes[0].scopeArn' --output text 2>/dev/null || echo "None") if [ "$EXISTING_SCOPE" != "None" ] && [ "$EXISTING_SCOPE" != "null" ]; then echo "Using existing scope: $EXISTING_SCOPE" SCOPE_ARN=$EXISTING_SCOPE else echo "Creating new Network Flow Monitor Scope..." SCOPE_RESPONSE=$(aws networkflowmonitor create-scope \ --targets "[{\"targetIdentifier\":{\"targetId\":{\"accountId\":\"${ACCOUNT_ID}\"},\"targetType\":\"ACCOUNT\"},\"region\":\"${REGION}\"}]" \ --region $REGION \ --output json) SCOPE_ARN=$(echo $SCOPE_RESPONSE | jq -r '.scopeArn') echo "Scope created: $SCOPE_ARN" fi # Create Network Flow Monitor with EKS Cluster as local resource echo "Creating Network Flow Monitor..." MONITOR_RESPONSE=$(aws networkflowmonitor create-monitor \ --monitor-name "${CLUSTER_NAME}-monitor" \ --local-resources "type=AWS::EKS::Cluster,identifier=${CLUSTER_ARN}" \ --scope-arn "$SCOPE_ARN" \ --region $REGION \ --output json) MONITOR_ARN=$(echo $MONITOR_RESPONSE | jq -r '.monitorArn') echo "Monitor created: $MONITOR_ARN" echo "Network Flow Monitor setup complete!" echo "Monitor ARN: $MONITOR_ARN" echo "Scope ARN: $SCOPE_ARN" echo "Local Resource: AWS::EKS::Cluster (${CLUSTER_ARN})"
Uso da infraestrutura como código (IaC)
Terraform
Se você estiver usando o Terraform para gerenciar a infraestrutura de nuvem da AWS, poderá incluir as configurações de recursos apresentadas a seguir para habilitar a observabilidade da rede de contêineres em seu cluster.
Escopo do NFM
data "aws_caller_identity" "current" {} resource "aws_networkflowmonitor_scope" "example" { target { region = "us-east-1" target_identifier { target_type = "ACCOUNT" target_id { account_id = data.aws_caller_identity.current.account_id } } } tags = { Name = "example" } }
Monitor do NFM
resource "aws_networkflowmonitor_monitor" "example" { monitor_name = "eks-cluster-name-monitor" scope_arn = aws_networkflowmonitor_scope.example.scope_arn local_resource { type = "AWS::EKS::Cluster" identifier = aws_eks_cluster.example.arn } remote_resource { type = "AWS::Region" identifier = "us-east-1" # this must be the same region that the cluster is in } tags = { Name = "example" } }
Complemento do EKS para o NFM
resource "aws_eks_addon" "example" { cluster_name = aws_eks_cluster.example.name addon_name = "aws-network-flow-monitoring-agent" }
Como funciona?
Métricas de performance
Métricas do sistema
Caso você use ferramentas de terceiros (3P, na sigla em inglês) para o monitoramento do ambiente do EKS (como o Prometheus e o Grafana), é possível extrair as métricas de sistema compatíveis diretamente do agente do Network Flow Monitor. Essas métricas podem ser enviadas para a pilha de monitoramento para ampliar a medição da performance da rede do seu sistema no nível de pod e de nó de processamento. Você encontra as métricas disponíveis na tabela na seção Métricas do sistema com suporte.
Para habilitar essas métricas, substitua as seguintes variáveis de ambiente usando as variáveis de configuração durante o processo de instalação (consulte: https://aws.amazon.com/blogs/containers/amazon-eks-add-ons-advanced-configuration/
OPEN_METRICS: Enable or disable open metrics. Disabled if not supplied Type: String Values: [“on”, “off”] OPEN_METRICS_ADDRESS: Listening IP address for open metrics endpoint. Defaults to 127.0.0.1 if not supplied Type: String OPEN_METRICS_PORT: Listening port for open metrics endpoint. Defaults to 80 if not supplied Type: Integer Range: [0..65535]
Métricas de nível de fluxo
Além disso, o Network Flow Monitor captura dados de fluxo de rede juntamente com métricas de nível de fluxo: retransmissões, tempos limite de retransmissão e dados transferidos. Esses dados são processados pelo Network Flow Monitor e exibidos no console do EKS para dar visibilidade ao tráfego do cluster e demonstrar a performance da rede com base nestas métricas de nível de fluxo.
O diagrama abaixo ilustra um fluxo de trabalho no qual ambos os tipos de métricas (de sistema e de nível de fluxo) podem ser aproveitados para obter maior inteligência operacional.
-
A equipe responsável pela plataforma pode coletar e visualizar as métricas do sistema na pilha de monitoramento. Com o sistema de alertas ativado, é possível detectar anomalias de rede ou problemas que impactem os pods ou os nós de processamento por meio das métricas de sistema do agente do NFM.
-
Como próximo passo, as equipes responsáveis pela plataforma podem aproveitar as visualizações nativas no console do EKS para restringir ainda mais o escopo da investigação e acelerar a solução de problemas com base em representações de fluxo e suas métricas associadas.
Observação importante: a coleta de métricas do sistema do agente do NFM e o processo de envio de métricas de nível de fluxo pelo agente do NFM ao backend do NFM são processos independentes.
Métricas do sistema com suporte
Observação importante: as métricas do sistema são exportadas no formato OpenMetrics
| Nome da métrica | Tipo | Dimensões | Descrição |
|---|---|---|---|
|
ingress_flow |
Indicador |
instance_id, iface, pod, namespace e node |
Contagem de fluxos TCP de entrada (TcpPassiveOpens) |
|
egress_flow |
Indicador |
instance_id, iface, pod, namespace e node |
Contagem de fluxos TCP de saída (TcpActiveOpens) |
|
ingress_packets |
Indicador |
instance_id, iface, pod, namespace e node |
Contagem de pacotes de entrada (delta) |
|
egress_packets |
Indicador |
instance_id, iface, pod, namespace e node |
Contagem de pacotes de saída (delta) |
|
ingress_bytes |
Indicador |
instance_id, iface, pod, namespace e node |
Contagem de bytes de entrada (delta) |
|
egress_bytes |
Indicador |
instance_id, iface, pod, namespace e node |
Contagem de bytes de saída (delta) |
|
bw_in_allowance_exceeded |
Indicador |
instance_id, eni e node |
Pacotes enfileirados ou descartados devido ao limite de largura de banda de entrada |
|
bw_out_allowance_exceeded |
Indicador |
instance_id, eni e node |
Pacotes enfileirados ou descartados devido ao limite de largura de banda de saída |
|
pps_allowance_exceeded |
Indicador |
instance_id, eni e node |
Pacotes enfileirados ou descartados devido ao limite de PPS bidirecional |
|
conntrack_allowance_exceeded |
Indicador |
instance_id, eni e node |
Pacotes descartados devido ao limite de rastreamento de conexões |
|
linklocal_allowance_exceeded |
Indicador |
instance_id, eni e node |
Pacotes descartados devido ao limite de PPS do serviço de proxy local |
Métricas de nível de fluxo com suporte
| Nome da métrica | Tipo | Descrição |
|---|---|---|
|
Retransmissões TCP |
Contador |
Número de vezes que um remetente reenvia um pacote que foi perdido ou corrompido durante a transmissão. |
|
Tempos limite de retransmissão TCP |
Contador |
Número de vezes que um remetente iniciou um período de espera para determinar se um pacote foi perdido em trânsito. |
|
Dados (bytes) transferidos |
Contador |
Volume de dados transferidos entre uma origem e um destino para um determinado fluxo. |
Mapa do serviço e tabela de fluxo
-
Quando instalado, o agente do Network Flow Monitor é executado como um DaemonSet em cada nó de processamento e coleta os 500 principais fluxos de rede (com base no volume de dados transferidos) a cada 30 segundos.
-
Esses fluxos de rede são classificados nas seguintes categorias: Intra-AZ, Inter-AZ, EC2 → S3, EC2 → DynamoDB (DDB) e Não classificados. Cada fluxo de rede é acompanhado por três métricas principais: retransmissões, tempos limite de retransmissão e volume de dados transferidos (em bytes).
-
Intra-AZ: fluxos de rede entre pods na mesma AZ
-
Inter-AZ: fluxos de rede entre pods em diferentes AZs
-
EC2 → S3: fluxos de rede dos pods para o S3
-
EC2 → DDB: fluxos de rede dos pods para o DDB
-
Não classificado: fluxos de rede dos pods para a internet ou para a infraestrutura on-premises
-
-
Os fluxos de rede provenientes da API “Principais colaboradores” do Network Flow Monitor são usados para potencializar as seguintes experiências no console do EKS:
-
Mapa do serviço: visualização dos fluxos de rede dentro do cluster (Intra-AZ e Inter-AZ).
-
Tabela de fluxo: apresentação em formato de tabela dos fluxos de rede dentro do cluster (Intra-AZ e Inter-AZ), de pods para serviços da AWS (EC2 → S3 e EC2 → DDB) e de pods para destinos externos (Não classificados).
-
Os fluxos de rede extraídos da API “Principais colaboradores” são limitados a um intervalo de tempo de uma hora e podem incluir até 500 fluxos de cada categoria. Para o mapa do serviço, isso significa que até mil fluxos podem ser extraídos e apresentados com base nas categorias de fluxo Intra-AZ e Inter-AZ em um intervalo de tempo de uma hora. Para a tabela de fluxo, isso significa que até 3 mil fluxos de rede podem ser extraídos e apresentados com base em todas as seis categorias de fluxo de rede em um intervalo de tempo de duas horas.
Exemplo: mapa do serviço
Visualização por implantação
Visualização por pod
Visualização por implantação
Visualização por pod
Exemplo: tabela de fluxo
Visualização por serviços da AWS
Visualização por cluster
Considerações e limitações
-
A observabilidade da rede de contêineres no EKS está disponível apenas em regiões nas quais Network Flow Monitor tem suporte.
-
As métricas de sistema compatíveis estão no formato OpenMetrics e podem ser coletadas diretamente do agente do Network Flow Monitor (NFM).
-
Para habilitar a observabilidade da rede de contêineres no EKS usando Infraestrutura como Código (IaC), como o Terraform
, é necessário ter estas dependências definidas e criadas em suas configurações: o escopo do NFM, o monitor do NFM e o agente do NFM. -
O Network Flow Monitor tem capacidade para processar aproximadamente cinco milhões de fluxos por minuto. Isso equivale a aproximadamente 5.000 instâncias do EC2 (nós de processamento do EKS) com o agente do Network Flow Monitor instalado. Instalar agentes em um número superior a 5.000 instâncias pode impactar a performance do monitoramento enquanto não houver capacidade adicional provisionada.
-
Você deve estar utilizando, no mínimo, a versão 1.1.0 do complemento do EKS para o agente do NFM.
-
Você deve usar a versão 6.21.0 ou as versões posteriores do Terraform AWS Provider
para obter suporte aos recursos do Network Flow Monitor. -
Para enriquecer os fluxos de rede com metadados dos pods, os pods devem estar sendo executados em seus próprios namespaces de rede isolados, e não no namespace de rede do host.