協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 雲端 (網際網路或內部部署) 外部目的地的流量。此外,您可以根據重新傳輸、重新傳輸逾時和傳輸的資料,監控每個流程的效能。
功能
-
效能指標 - 此功能可讓您直接從 EKS 叢集中執行的網路流量監控 (NFM) 代理程式,抓取 Pod 和工作者節點的網路相關系統指標。
-
服務映射 - 此功能可動態視覺化叢集中工作負載之間的通訊,讓您快速揭露與通訊 Pod 之間的網路流程相關聯的關鍵指標 (重新傳輸 - RT、重新傳輸逾時 - RTO 和資料傳輸 - DT)。
-
流程表 - 透過此表,您可以從三個不同的角度監控叢集中 Kubernetes 工作負載中的熱門發言者: AWS 服務檢視、叢集檢視和外部檢視。對於每個檢視,您可以看到重新傳輸、重新傳輸逾時,以及在來源 Pod 及其目的地之間傳輸的資料。
-
AWS 服務檢視:顯示 AWS 服務的最佳發言者 (DynamoDB 和 S3)
-
叢集檢視:顯示叢集中的熱門發言者 (從 ← 到 → 西部)
-
外部檢視:顯示外部叢集外部目的地的熱門發言者 AWS
-
開始使用
若要開始使用,請在 EKS 主控台中為新的或現有的叢集啟用容器網路可觀測性。這將自動化建立網路流量監控 (NFM) 相依性 (範圍和監控資源)。此外,您必須安裝網路流量監控代理程式附加元件。或者,您可以使用 AWS CLI、EKS APIs (適用於附加元件)、NFM APIs或基礎設施即程式碼 (例如 Terraform
在 EKS 中使用網路流量監視器時,您可以維護現有的可觀測性工作流程和技術堆疊,同時利用一組額外的功能,進一步讓您了解和最佳化 EKS 環境的網路層。您可以在這裡進一步了解 Network Flow Monitor 定價。
先決條件和重要備註
-
如上所述,如果您從 EKS 主控台啟用容器網路可觀測性,則會代表您自動建立基礎 NFM 資源相依性 (範圍和監控),並引導您完成 NFM 的 EKS 附加元件安裝程序。
-
如果您想要使用基礎設施即程式碼 (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
-
您必須為 NFM 代理程式的 EKS 附加元件執行最低版本 1.1.0。
-
您必須使用 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 主控台中視覺化,以呈現叢集環境中的流量,以及其如何根據這些流程層級指標執行。
下圖描述了工作流程,其中可以利用這兩種類型的指標 (系統和流程層級) 來獲得更多操作智慧。
-
平台團隊可以在其監控堆疊中收集和視覺化系統指標。設定提醒後,他們可以使用 NFM 代理程式的系統指標,偵測網路異常或影響 Pod 或工作者節點的問題。
-
下一步,平台團隊可以利用 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 重新傳輸逾時 |
計數器 |
寄件者啟動等待期間的次數,以判斷封包是否在傳輸中遺失。 |
|
傳輸的資料 (位元組) |
計數器 |
在指定流程的來源和目的地之間傳輸的資料量。 |
服務映射和流程表
-
安裝後,Network Flow Monitor 代理程式會在每個工作者節點上以 DaemonSet 身分執行,並每 30 秒收集前 500 個網路流程 (根據傳輸的資料量)。
-
這些網路流程會依下列類別排序:AZ 內部、AZ 間、EC2 → S3, EC2 → DynamoDB (DDB) 和未分類。每個流程都有 3 個與其相關聯的指標:重新傳輸、重新傳輸逾時和傳輸的資料 (以位元組為單位)。
-
AZ 內部 - 相同 AZ 中 Pod 之間的網路流程
-
AZ 間 - 不同 AZs 中 Pod 之間的網路流程
-
EC2 → S3 - 從 Pod 到 S3 的網路流程
-
EC2 → DDB - 從 Pod 到 DDB 的網路流程
-
未分類 - 從 Pod 到網際網路或內部部署的網路流程
-
-
來自 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 檢視
範例:流程資料表
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 應該在自己的隔離網路命名空間中執行,而不是在主機網路命名空間中執行。