使用容器網路可觀測性監控 Kubernetes 工作負載流量 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用容器網路可觀測性監控 Kubernetes 工作負載流量

Amazon EKS 提供增強的網路可觀測性功能,可讓您更深入了解容器聯網環境。這些功能可協助您更好地了解、監控和疑難排解 Kubernetes 網路環境 AWS。透過增強的容器網路可觀測性,您可以利用精細的網路相關指標,跨叢集流量、跨可用區域流程 AWS 和服務進行更主動的異常偵測。您可以使用這些指標來測量系統效能,並使用您偏好的可觀測性堆疊視覺化基礎指標。

此外,Amazon EKS 現在在 AWS 主控台中提供網路監控視覺化,可加速並增強精確的故障診斷,以加快根本原因分析速度。您也可以利用這些視覺化功能,精確找出導致重新傳輸和重新傳輸逾時的頂端追蹤器和網路流程,在事件期間消除盲點。

這些功能由 Amazon CloudWatch Network Flow Monitor 啟用。

使用案例

測量網路效能以偵測異常

數個團隊會在可觀測性堆疊上標準化,讓他們能夠測量系統效能、視覺化系統指標,並在超過特定閾值時發出警示。EKS 中的容器網路可觀測性透過公開關鍵系統指標來保持一致,您可以在 Pod 和工作者節點層級擴展系統網路效能的可觀測性。

利用主控台視覺化進行更精確的故障診斷

如果監控系統發出警示,您可能想要在問題起源的叢集和工作負載上進行 。若要支援此功能,您可以利用 EKS 主控台中的視覺化,縮小叢集層級的調查範圍,並加速揭露負責最多重新傳輸、重新傳輸逾時和傳輸資料量的網路流程。

追蹤 Amazon EKS 環境中的名流

許多團隊會執行 EKS 作為其平台的基礎,使其成為應用程式環境網路活動的焦點。使用此功能中的網路監控功能,您可以追蹤哪些工作負載負責叢集內、跨 AZs 的最多流量 (由資料磁碟區測量),以及通往 AWS (DynamoDB 和 S3) 內外 AWS 雲端 (網際網路或內部部署) 外部目的地的流量。此外,您可以根據重新傳輸、重新傳輸逾時和傳輸的資料,監控每個流程的效能。

功能

  1. 效能指標 - 此功能可讓您直接從 EKS 叢集中執行的網路流量監控 (NFM) 代理程式,抓取 Pod 和工作者節點的網路相關系統指標。

  2. 服務映射 - 此功能可動態視覺化叢集中工作負載之間的通訊,讓您快速揭露與通訊 Pod 之間的網路流程相關聯的關鍵指標 (重新傳輸 - RT、重新傳輸逾時 - RTO 和資料傳輸 - DT)。

  3. 流程表 - 透過此表,您可以從三個不同的角度監控叢集中 Kubernetes 工作負載中的熱門發言者: AWS 服務檢視、叢集檢視和外部檢視。對於每個檢視,您可以看到重新傳輸、重新傳輸逾時,以及在來源 Pod 及其目的地之間傳輸的資料。

    • AWS 服務檢視:顯示 AWS 服務的最佳發言者 (DynamoDB 和 S3)

    • 叢集檢視:顯示叢集中的熱門發言者 (從 ← 到 → 西部)

    • 外部檢視:顯示外部叢集外部目的地的熱門發言者 AWS

開始使用

若要開始使用,請在 EKS 主控台中為新的或現有的叢集啟用容器網路可觀測性。這將自動化建立網路流量監控 (NFM) 相依性 (範圍監控資源)。此外,您必須安裝網路流量監控代理程式附加元件。或者,您可以使用 AWS CLIEKS APIs (適用於附加元件)、NFM APIs或基礎設施即程式碼 (例如 Terraform) 安裝這些相依性。一旦這些相依性就緒,您就可以設定偏好的監控工具,從 NFM 代理程式抓取 Pod 和工作者節點的網路效能指標。若要視覺化工作負載的網路活動和效能,您可以導覽至叢集可觀測性儀表板的「網路」索引標籤下的 EKS 主控台。

在 EKS 中使用網路流量監視器時,您可以維護現有的可觀測性工作流程和技術堆疊,同時利用一組額外的功能,進一步讓您了解和最佳化 EKS 環境的網路層。您可以在這裡進一步了解 Network Flow Monitor 定價

先決條件和重要備註

  1. 如上所述,如果您從 EKS 主控台啟用容器網路可觀測性,則會代表您自動建立基礎 NFM 資源相依性 (範圍和監控),並引導您完成 NFM 的 EKS 附加元件安裝程序。

  2. 如果您想要使用基礎設施即程式碼 (IaC) 如 Terraform 啟用此功能,您必須在 IaC 中定義下列相依性:NFM 範圍、NFM 監視器、適用於 NFM 的 EKS 附加元件。此外,您必須使用服務帳戶 (IRSA) 的 Pod Identity 或 IAM 角色,將相關許可授予 EKS 附加元件。 https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html

  3. 您必須為 NFM 代理程式的 EKS 附加元件執行最低版本 1.1.0。

  4. 您必須使用 Terraform AWS 提供者的 v6.21.0 或更高版本來支援網路流量監控資源。

所需的 IAM 許可

NFM 代理程式的 EKS 附加元件

您可以使用 CloudWatchNetworkFlowMonitorAgentPublishPolicyAWS 受管政策搭配 Pod Identity。此政策包含 NFM 代理程式將遙測報告 (指標) 傳送至網路流量監控端點的許可。

{ "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),則可以直接從網路流量監控代理程式抓取支援的系統指標。這些指標可以傳送到您的監控堆疊,以在 Pod 和工作者節點層級擴展系統網路效能的測量。可用的指標會列在支援的系統指標下的表格中。

抓取系統指標的圖解

若要啟用這些指標,請在安裝程序期間使用組態變數覆寫下列環境變數 (請參閱:https://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 主控台中視覺化,以呈現叢集環境中的流量,以及其如何根據這些流程層級指標執行。

下圖描述了工作流程,其中可以利用這兩種類型的指標 (系統和流程層級) 來獲得更多操作智慧。

具有不同效能指標的工作流程圖解
  1. 平台團隊可以在其監控堆疊中收集和視覺化系統指標。設定提醒後,他們可以使用 NFM 代理程式的系統指標,偵測網路異常或影響 Pod 或工作者節點的問題。

  2. 下一步,平台團隊可以利用 EKS 主控台中的原生視覺化,進一步縮小調查範圍,並根據流程呈現及其相關指標加速故障診斷。

重要注意事項:從 NFM 代理程式抓取系統指標,以及將流程層級指標推送至 NFM 後端的 NFM 代理程式程序,都是獨立的程序。

支援的系統指標

重要注意事項:系統指標會以 OpenMetrics 格式匯出。

指標名稱 Type 維度 Description

輸入_流程

量測計

instance_id、iface、Pod、命名空間、節點

傳入 TCP 流程計數 (TcpPassiveOpens)

egress_flow

量測計

instance_id、iface、Pod、命名空間、節點

輸出 TCP 流量計數 (TcpActiveOpens)

inress_packets

量測計

instance_id、iface、Pod、命名空間、節點

傳入封包計數 (差異)

egress_packets

量測計

instance_id、iface、Pod、命名空間、節點

輸出封包計數 (差異)

inress_bytes

量測計

instance_id、iface、Pod、命名空間、節點

輸入位元組計數 (差異)

egress_bytes

量測計

instance_id、iface、Pod、命名空間、節點

輸出位元組計數 (差異)

bw_in_allowance_exceeded

量測計

instance_id、eni、節點

由於傳入頻寬限制而排入佇列/捨棄的封包

bw_out_allowance_exceeded

量測計

instance_id、eni、節點

由於傳出頻寬限制而排入佇列/捨棄的封包

pps_allowance_exceeded

量測計

instance_id、eni、節點

由於雙向 PPS 限制而排入佇列/捨棄的封包

conntrack_allowance_exceeded

量測計

instance_id、eni、節點

由於連線追蹤限制而捨棄的封包

linklocal_allowance_exceeded

量測計

instance_id、eni、節點

由於本機代理服務 PPS 限制而捨棄的封包

支援的流程層級指標
指標名稱 Type 說明

TCP 重新傳輸

計數器

傳送者在傳輸期間重新傳送封包遺失或損毀的次數。

TCP 重新傳輸逾時

計數器

寄件者啟動等待期間的次數,以判斷封包是否在傳輸中遺失。

傳輸的資料 (位元組)

計數器

在指定流程的來源和目的地之間傳輸的資料量。

服務映射和流程表

NFM 如何與 EKS 搭配使用的圖例
  1. 安裝後,Network Flow Monitor 代理程式會在每個工作者節點上以 DaemonSet 身分執行,並每 30 秒收集前 500 個網路流程 (根據傳輸的資料量)。

  2. 這些網路流程會依下列類別排序:AZ 內部、AZ 間、EC2 → S3, EC2 → DynamoDB (DDB) 和未分類。每個流程都有 3 個與其相關聯的指標:重新傳輸、重新傳輸逾時和傳輸的資料 (以位元組為單位)。

    • AZ 內部 - 相同 AZ 中 Pod 之間的網路流程

    • AZ 間 - 不同 AZs 中 Pod 之間的網路流程

    • EC2 → S3 - 從 Pod 到 S3 的網路流程

    • EC2 → DDB - 從 Pod 到 DDB 的網路流程

    • 未分類 - 從 Pod 到網際網路或內部部署的網路流程

  3. 來自 Network Flow Monitor Top Contributors API 的網路流程用於為 EKS 主控台中的下列體驗提供支援:

    • 服務映射:叢集內網路流程的視覺化 (AZ 內部和 AZ 間)。

    • 流程表:叢集內網路流程的表格呈現 (內部可用區和內部可用區)、從 Pod 到 AWS 服務 (EC2 → S3 和 EC2 → DDB),以及從 Pod 到外部目的地 (未分類)。

從 Top Contributors API 提取的網路流程範圍為 1 小時時間範圍,且每個類別最多可包含 500 個流程。對於服務映射,這表示在 1 小時的時間範圍內,最多可從 AZ 內部和 AZ 間流程類別取得和呈現 1000 個流程。對於流程表,這表示在 2 小時的時間範圍內,最多可以從所有 6 個網路流程類別中取得和呈現 3000 個網路流程。

範例:服務映射

部署檢視

部署檢視中具有電子商務應用程式的服務映射圖解

Pod 檢視

在 Pod 檢視中使用電子商務應用程式的服務映射圖解

部署檢視

部署檢視中具有光庫應用程式的服務映射圖解

Pod 檢視

在 Pod 檢視中使用光庫應用程式的服務映射圖解

範例:流程資料表

AWS 服務檢視

流程圖檢視的圖例

叢集檢視

叢集檢視中流程圖的圖例

考量和限制

  • EKS 中的容器網路可觀測性僅適用於支援網路流量監控的區域。

  • 支援的系統指標採用 OpenMetrics 格式,並且可以直接從網路流量監控 (NFM) 代理程式中抓取。

  • 若要使用基礎設施即程式碼 (IaC) 如 Terraform 在 EKS 中啟用容器網路可觀測性,您需要在組態中定義和建立這些相依性:NFM 範圍、NFM 監控和 NFM 代理程式。

  • Network Flow Monitor 每分鐘最多支援約 500 萬個流程。這是已安裝 Network Flow Monitor 代理程式的大約 5,000 個 EC2 執行個體 (EKS 工作者節點)。在超過 5000 個執行個體上安裝代理程式可能會影響監控效能,直到有額外的容量可用為止。

  • 您必須為 NFM 代理程式的 EKS 附加元件執行最低版本 1.1.0。

  • 您必須使用 Terraform AWS 提供者的 v6.21.0 或更高版本,才能支援網路流量監控資源。

  • 若要使用 Pod 中繼資料擴充網路流程,您的 Pod 應該在自己的隔離網路命名空間中執行,而不是在主機網路命名空間中執行。