이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
컨테이너 네트워크 관찰성을 사용하여 Kubernetes 워크로드 트래픽 모니터링
Amazon EKS는 컨테이너 네트워킹 환경에 대한 보다 심층적인 인사이트를 제공하는 향상된 네트워크 관찰성 기능을 제공합니다. 이러한 기능은 AWS에서 Kubernetes 네트워크 환경을 더 잘 이해하고 모니터링하며 문제를 해결하는 데 도움이 됩니다. 향상된 컨테이너 네트워크 관찰성을 사용하여 클러스터 트래픽, 교차 AZ 흐름 및 AWS 서비스 전반에서 더 나은 선제적 이상 탐지를 위해 세분화된 네트워크 관련 지표를 활용할 수 있습니다. 이러한 지표를 사용하면 시스템 성능을 측정하고 선호하는 관찰성 스택을 사용하여 기본 지표를 시각화할 수 있습니다.
또한 이제 Amazon EKS은 더 빠른 근본 원인 분석을 위해 정확한 문제 해결을 가속화하고 개선하는 네트워크 모니터링 시각화를 AWS 콘솔에 제공합니다. 이러한 시각적 기능을 활용하여 재전송 및 재전송 제한 시간을 유발하는 상위 화자 및 네트워크 흐름을 정확히 찾아 인시던트 중에 사각 지대를 없앨 수도 있습니다.
이러한 기능은 Amazon CloudWatch Network Flow Monitor에서 활성화됩니다.
사용 사례
네트워크 성능을 측정하여 이상 감지
여러 팀이 시스템 성능을 측정하고 시스템 지표를 시각화하며 특정 임계치를 위반할 경우 경보를 받을 수 있는 관찰성 스택을 표준화합니다. EKS의 컨테이너 네트워크 관찰성은 포드 및 워커 노드 수준에서 시스템 네트워크 성능의 관찰성을 넓히기 위해 스크래핑할 수 있는 주요 시스템 지표를 공개하여 이에 맞춥니다.
보다 정확한 문제 해결을 위해 콘솔 시각화 활용
모니터링 시스템에서 경보가 발생하는 경우 문제가 발생한 클러스터 및 워크로드에 집중할 수 있습니다. 이 기능을 지원하기 위해 EKS 콘솔에서 시각화를 활용하여 클러스터 수준에서 조사 범위를 좁히고 대부분의 재전송, 재전송 제한 시간 및 전송된 데이터 볼륨을 담당하는 네트워크 흐름의 공개를 가속화할 수 있습니다.
Amazon EKS 환경에서 상위 화자 추적
많은 팀이 EKS를 플랫폼의 기반으로 실행하므로, 이는 애플리케이션 환경의 네트워크 활동의 중심이 됩니다. 이 기능의 네트워크 모니터링 기능을 사용하면 클러스터 내 여러 AZ에서 대부분의 트래픽(데이터 볼륨으로 측정됨) 그리고 AWS 내 외부 대상(DynamoDB 및 S3) 및 AWS 클라우드를 벗어난 대상(인터넷 또는 온프레미스)으로의 트래픽을 담당하는 워크로드를 추적할 수 있습니다. 또한 재전송, 재전송 제한 시간 및 전송된 데이터를 기반으로 이러한 각 흐름의 성능을 모니터링할 수도 있습니다.
특성
-
성능 지표 - 이 기능을 사용하면 EKS 클러스터에서 실행되는 Network Flow Monitor(NFM) 에이전트에서 직접 포드 및 워커 노드에 대한 네트워크 관련 시스템 지표를 스크래핑할 수 있습니다.
-
서비스 맵 - 이 기능은 클러스터의 워크로드 간 상호 통신을 동적으로 시각화하므로 통신 포드 간 네트워크 흐름과 관련된 주요 지표(재전송(RT), 재전송 제한 시간(RTO) 및 전송된 데이터(DT))를 빠르게 공개할 수 있습니다.
-
흐름 테이블 - 이 테이블을 사용하면 AWS 서비스 보기, 클러스터 보기, 외부 보기와 같은 세 가지 시점에서 클러스터의 Kubernetes 워크로드 전반에 걸쳐 상위 화자를 모니터링할 수 있습니다. 각 보기에 대해 재전송, 재전송 제한 시간 그리고 소스 포드와 대상 사이에서 전송된 데이터를 볼 수 있습니다.
-
AWS 서비스 보기: AWS 서비스에 대한 상위 화자(DynamoDB 및 S3) 표시
-
클러스터 보기: 클러스터 내 상위 화자 표시(동쪽(←)에서 서쪽(→))
-
외부 보기: AWS 외부의 클러스터 외부 대상에 대한 상위 화자 표시
-
시작하기
시작하려면 새 클러스터 또는 기존 클러스터에 대해 EKS 콘솔에서 컨테이너 네트워크 관찰성을 활성화합니다. 이렇게 하면 Network Flow Monitor(NFM) 종속성(범위 및 모니터 리소스) 생성이 자동화됩니다. 또한 Network Flow Monitor 에이전트 추가 기능을 설치해야 합니다. 또는
AWS CLI, EKS API(추가 기능용), NFM API 또는 코드형 인프라(예: Terraform
EKS에서 Network Flow Monitor를 사용하는 경우 EKS 환경의 네트워크 계층을 추가로 이해하고 최적화할 수 있는 일련의 추가 기능을 활용하면서 기존 관찰성 워크플로 및 기술 스택을 유지 관리할 수 있습니다. 여기에서 Network Flow Monitor 요금에 대해 자세히 알아볼 수 있습니다.
사전 조건 및 중요 참고 사항
-
위에서 언급한 것처럼 EKS 콘솔에서 컨테이너 네트워크 관찰성을 활성화하면 사용자를 대신하여 기본 NFM 리소스 종속성(범위 및 모니터)이 자동으로 생성되고 NFM에 대한 EKS 추가 기능의 설치 프로세스를 안내합니다.
-
Terraform과 같은 코드형 인프라(IaC)를 사용하여 이 기능을 활성화하려면 IaC에서 NFM 범위, NFM 모니터, NFM에 대한 EKS 추가 기능과 같은 종속성을 정의해야 합니다. 또한 Pod Identity 또는 서비스 계정에 대한 IAM 역할(IRSA)을 사용하여 EKS 추가 기능에 관련 권한을 부여해야 합니다.
-
NFM 에이전트의 EKS 추가 기능을 사용하려면 최소 버전 1.1.0을 실행해야 합니다.
-
Network Flow Monitor 리소스를 지원하려면 v6.21.0 이상의 Terraform AWS 공급자
를 사용해야 합니다.
필수 IAM 권한
NFM 에이전트에 대한 EKS 추가 기능
Pod Identity와 함께 CloudWatchNetworkFlowMonitorAgentPublishPolicy AWS 관리형 정책을 사용할 수 있습니다. 이 정책은 NFM 에이전트가 Network Flow Monitor 엔드포인트에 원격 측정 보고서(지표)를 전송하기 위한 권한을 부여합니다.
{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "networkflowmonitor:Publish" ], "Resource" : "*" } ] }
EKS 콘솔의 컨테이너 네트워크 관찰성
콘솔에서 기능을 활성화하고 서비스 맵 및 흐름 테이블을 시각화하려면 다음 권한이 필요합니다.
{ "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": "*" } ] }
AWS CLI, EKS API 및 NFM API 사용
#!/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})"
코드형 인프라(IaC) 사용
Terraform
Terraform을 사용하여 AWS 클라우드 인프라를 관리하는 경우 다음 리소스 구성을 포함하여 클러스터에 대한 컨테이너 네트워크 관찰성을 활성화할 수 있습니다.
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" } }
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" } }
NFM에 대한 EKS 추가 기능
resource "aws_eks_addon" "example" { cluster_name = aws_eks_cluster.example.name addon_name = "aws-network-flow-monitoring-agent" }
작동 방식
성능 지표
시스템 지표
서드 파티(3P) 도구를 실행하여 EKS 환경(예: Prometheus 및 Grafana)을 모니터링하는 경우 Network Flow Monitor 에이전트에서 지원되는 시스템 지표를 직접 스크래핑할 수 있습니다. 이러한 지표를 모니터링 스택으로 전송하여 포드 및 워커 노드 수준에서 시스템의 네트워크 성능 측정을 확장할 수 있습니다. 사용 가능한 지표는 지원되는 시스템 지표 아래의 표에 나열되어 있습니다.
이러한 지표를 활성화하려면 설치 프로세스 중에 구성 변수를 사용하여 다음 환경 변수를 재정의합니다(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]
흐름 수준 지표
또한 Network Flow Monitor는 재전송, 재전송 제한 시간, 전송된 데이터와 같은 흐름 수준 지표와 함께 네트워크 흐름 데이터를 캡처합니다. 이 데이터는 Network Flow Monitor에서 처리되고 EKS 콘솔에서 시각화되어 클러스터 환경의 트래픽과 이러한 흐름 수준 지표를 기반으로 처리되는 방식을 표시합니다.
아래 다이어그램에서는 두 가지 유형의 지표(시스템 및 흐름 수준)를 모두 활용하여 더 많은 운영 인텔리전스를 얻을 수 있는 워크플로를 보여줍니다.
-
플랫폼 팀은 해당 모니터링 스택에서 시스템 지표를 수집 및 시각화할 수 있습니다. 알림을 설정하면 NFM 에이전트의 시스템 지표를 사용하여 포드 또는 워커 노드에 영향을 미치는 네트워크 이상 또는 문제를 감지할 수 있습니다.
-
다음 단계로 플랫폼 팀은 EKS 콘솔의 기본 시각화를 활용하여 조사 범위를 더욱 좁히고 흐름 표현 및 관련 지표를 기반으로 문제 해결을 가속화할 수 있습니다.
중요 참고 사항: NFM 에이전트에서 시스템 지표를 스크래핑하고 흐름 수준 지표를 NFM 백엔드로 푸시하는 NFM 에이전트의 프로세스는 서로 독립적인 프로세스입니다.
지원되는 시스템 지표
중요 참고 사항: 시스템 지표는 OpenMetrics
| 지표 이름 | Type | 측정기준 | 설명 |
|---|---|---|---|
|
ingress_flow |
게이지 |
instance_id, iface, pod, namespace, node |
수신 TCP 흐름 수(TcpPassiveOpens) |
|
egress_flow |
게이지 |
instance_id, iface, pod, namespace, node |
송신 TCP 흐름 수(TcpActiveOpens) |
|
ingress_packets |
게이지 |
instance_id, iface, pod, namespace, node |
수신 패킷 수(델타) |
|
egress_packets |
게이지 |
instance_id, iface, pod, namespace, node |
송신 패킷 수(델타) |
|
ingress_bytes |
게이지 |
instance_id, iface, pod, namespace, node |
수신 바이트 수(델타) |
|
egress_bytes |
게이지 |
instance_id, iface, pod, namespace, node |
송신 바이트 수(델타) |
|
bw_in_allowance_exceeded |
게이지 |
instance_id, eni, node |
인바운드 대역폭 제한으로 인해 대기열에 추가되거나 삭제된 패킷 |
|
bw_out_allowance_exceeded |
게이지 |
instance_id, eni, node |
아웃바운드 대역폭 제한으로 인해 대기열에 추가되거나 삭제된 패킷 |
|
pps_allowance_exceeded |
게이지 |
instance_id, eni, node |
양방향 PPS 제한으로 인해 대기열에 추가되거나 삭제된 패킷 |
|
conntrack_allowance_exceeded |
게이지 |
instance_id, eni, node |
연결 추적 제한으로 인해 삭제된 패킷 |
|
linklocal_allowance_exceeded |
게이지 |
instance_id, eni, node |
로컬 프록시 서비스 PPS 제한으로 인해 삭제된 패킷 |
지원되는 흐름 수준 지표
| 지표 이름 | Type | 설명 |
|---|---|---|
|
TCP 재전송 횟수 |
카운터 |
발신자가 전송 중에 손실되거나 손상된 패킷을 재전송한 횟수. |
|
TCP 재전송 제한 시간 |
카운터 |
전송 중 패킷이 손실되었는지 확인하기 위해 발신자가 대기 기간을 시작한 횟수. |
|
전송된 데이터(바이트) |
카운터 |
지정된 흐름에 대해 소스와 대상 사이에서 전송된 데이터의 볼륨. |
서비스 맵 및 흐름 테이블
-
설치된 Network Flow Monitor 에이전트는 모든 워커 노드에서 DaemonSet로 실행되며 30초마다 상위 500개의 네트워크 흐름(전송된 데이터 볼륨 기준)을 수집합니다.
-
이러한 네트워크 흐름은 AZ 내, AZ 간, EC2 → S3, EC2 → DynamoDB(DDB) 및 미분류와 같은 범주로 정렬됩니다. 각 흐름에는 재전송, 재전송 제한 시간, 전송된 데이터(바이트)와 같은 3개의 지표가 연결되어 있습니다.
-
AZ 내 - 동일한 AZ의 포드 간 네트워크 흐름
-
AZ 간 - 서로 다른 AZ의 포드 간 네트워크 흐름
-
EC2 → S3 - 포드에서 S3로의 네트워크 흐름
-
EC2 → DDB - 포드에서 DDB로의 네트워크 흐름
-
미분류 - 포드에서 인터넷 또는 온프레미스로의 네트워크 흐름
-
-
Network Flow Monitor 상위 기여자 API의 네트워크 흐름은 EKS 콘솔에서 다음 경험을 지원하는 데 사용됩니다.
-
서비스 맵: 클러스터 내(AZ 내 및 AZ 간) 네트워크 흐름의 시각화.
-
흐름 테이블: 클러스터 내(AZ 내 및 AZ 간), 포드에서 AWS 서비스(EC2 → S3 및 EC2 → DDB), 포드에서 외부 대상(미분류)으로의 네트워크 흐름에 대한 표 형식의 프레젠테이션.
-
상위 기여자 API에서 가져온 네트워크 흐름은 1시간의 범위로 지정되며, 각 범주에서 최대 500개의 흐름을 포함할 수 있습니다. 서비스 맵의 경우 1시간 동안 AZ 내 및 AZ 간 흐름 범주에서 최대 1,000개의 흐름을 소싱하고 표시할 수 있습니다. 흐름 테이블의 경우 2시간 동안 6개의 네트워크 흐름 범주 모두에서 최대 3,000개의 네트워크 흐름을 소싱하고 표시할 수 있습니다.
예제: 서비스 맵
배포 보기
포드 보기
배포 보기
포드 보기
예제: 흐름 테이블
AWS 서비스 보기
클러스터 보기
고려 사항 및 제한
-
EKS의 컨테이너 네트워크 관찰성은 Network Flow Monitor가 지원되는 리전에서만 사용할 수 있습니다.
-
지원되는 시스템 지표는 OpenMetrics 형식이며, Network Flow Monitor(NFM) 에이전트에서 직접 스크래핑할 수 있습니다.
-
Terraform
과 같은 코드형 인프라(IaC)를 사용하여 EKS에서 컨테이너 네트워크 관찰성을 활성화하려면 구성에서 NFM 범위, NFM 모니터 및 NFM 에이전트와 같은 종속성을 정의 및 생성해야 합니다. -
Network Flow Monitor는 분당 최대 약 5백만 개의 흐름을 지원합니다. 이는 Network Flow Monitor 에이전트가 설치된 약 5,000개의 EC2 인스턴스(EKS 워커 노드)입니다. 5,000개가 넘는 인스턴스에 에이전트를 설치하면 추가 용량을 사용할 수 있을 때까지 모니터링 성능에 영향을 미칠 수 있습니다.
-
NFM 에이전트의 EKS 추가 기능을 사용하려면 최소 버전 1.1.0을 실행해야 합니다.
-
Network Flow Monitor 리소스를 지원하려면 v6.21.0 이상의 Terraform AWS 공급자
를 사용해야 합니다. -
포드 메타데이터로 네트워크 흐름을 보강하려면 포드가 호스트 네트워크 네임스페이스가 아닌 자체 격리된 네트워크 네임스페이스에서 실행되어야 합니다.