

 **協助改進此頁面** 

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

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

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

# 使用容器網路可觀測性監控 Kubernetes 工作負載流量
<a name="network-observability"></a>

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

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

這些功能由 [Amazon CloudWatch Network Flow Monitor](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor.html) 啟用。

## 使用案例
<a name="_use_cases"></a>

### 測量網路效能以偵測異常
<a name="_measure_network_performance_to_detect_anomalies"></a>

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

### 利用主控台視覺化進行更精確的故障診斷
<a name="_leverage_console_visualizations_for_more_precise_troubleshooting"></a>

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

### 追蹤 Amazon EKS 環境中的名流
<a name="_track_top_talkers_in_your_amazon_eks_environment"></a>

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

## 功能
<a name="_features"></a>

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

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

1. 流程表 - 透過此表，您可以從三種不同的角度監控叢集中 Kubernetes 工作負載中的熱門發言者： AWS 服務檢視、叢集檢視和外部檢視。對於每個檢視，您可以看到重新傳輸、重新傳輸逾時，以及在來源 Pod 及其目的地之間傳輸的資料。
   +  AWS 服務檢視：顯示 AWS 服務的最佳發言者 (DynamoDB 和 S3)
   + 叢集檢視：顯示叢集中的熱門發言者 （從 ← 到 → 西部）
   + 外部檢視：顯示外部叢集外部目的地的熱門發言者 AWS 

## 開始使用
<a name="_get_started"></a>

若要開始使用，請在 EKS 主控台中為新的或現有的叢集啟用容器網路可觀測性。這將自動化建立網路流量監控 (NFM) 相依性 ([範圍](https://docs.aws.amazon.com/networkflowmonitor/2.0/APIReference/API_CreateScope.html)和[監控](https://docs.aws.amazon.com/networkflowmonitor/2.0/APIReference/API_CreateMonitor.html)資源）。此外，您必須安裝[網路流量監控代理程式附加元件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-agents-kubernetes-eks.html)。或者，您可以使用 ` AWS CLI`、[EKS APIs](https://docs.aws.amazon.com/eks/latest/APIReference/API_Operations_Amazon_Elastic_Kubernetes_Service.html) （適用於附加元件）、[NFM APIs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-API-operations.html)或基礎設施即程式碼 （例如 [Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/networkflowmonitor_monitor)) 安裝這些相依性。一旦這些相依性就緒，您就可以設定偏好的監控工具，從 NFM 代理程式抓取 Pod 和工作者節點的網路效能指標。若要視覺化工作負載的網路活動和效能，您可以導覽至叢集可觀測性儀表板的「網路」索引標籤下的 EKS 主控台。

在 EKS 中使用網路流量監視器時，您可以維護現有的可觀測性工作流程和技術堆疊，同時利用一組額外的功能，讓您進一步了解和最佳化 EKS 環境的網路層。您可以在[此處進一步了解 Network Flow Monitor 定價](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor.pricing.html)。

## 先決條件和重要備註
<a name="_prerequisites_and_important_notes"></a>

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

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

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

1. 您必須使用 [Terraform AWS 提供者](https://github.com/hashicorp/terraform-provider-aws)的 v6.21.0 或更高版本，才能支援網路流量監控資源。

### 所需的 IAM 許可
<a name="_required_iam_permissions"></a>

#### NFM 代理程式的 EKS 附加元件
<a name="_eks_add_on_for_nfm_agent"></a>

您可以使用 `CloudWatchNetworkFlowMonitorAgentPublishPolicy`[AWS 受管政策](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/CloudWatchNetworkFlowMonitorAgentPublishPolicy.html)搭配 Pod Identity。此政策包含 NFM 代理程式將遙測報告 （指標） 傳送至網路流量監控端點的許可。

```
{
  "Version" : "2012-10-17",
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : [
        "networkflowmonitor:Publish"
      ],
      "Resource" : "*"
    }
  ]
}
```

#### EKS 主控台中的容器網路可觀測性
<a name="_container_network_observability_in_the_eks_console"></a>

需要下列許可，才能在 主控台中啟用此功能並視覺化服務地圖和流程圖。

```
{
  "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
<a name="using_shared_aws_cli_eks_api_and_nfm_api"></a>

```
#!/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)
<a name="_using_infrastructure_as_code_iac"></a>

### Terraform
<a name="_terraform"></a>

如果您使用 Terraform 來管理 AWS 雲端基礎設施，您可以包含下列資源組態，為您的叢集啟用容器網路可觀測性。

#### NFM 範圍
<a name="_nfm_scope"></a>

```
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 監視器
<a name="_nfm_monitor"></a>

```
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 附加元件
<a name="_eks_add_on_for_nfm"></a>

```
resource "aws_eks_addon" "example" {
  cluster_name                = aws_eks_cluster.example.name
  addon_name                  = "aws-network-flow-monitoring-agent"
}
```

## 其運作方式？
<a name="_how_does_it_work"></a>

### 效能指標
<a name="_performance_metrics"></a>

#### 系統指標
<a name="_system_metrics"></a>

如果您執行第三方 (3P) 工具來監控 EKS 環境 （例如 Prometheus 和 Grafana)，則可以直接從網路流量監控代理程式抓取支援的系統指標。這些指標可以傳送到您的監控堆疊，以在 Pod 和工作者節點層級擴展系統網路效能的測量。可用的指標會列在支援的系統指標下的表格中。

![\[抓取系統指標的圖解\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/nfm-eks-metrics-workflow.png)


若要啟用這些指標，請在安裝程序期間使用組態變數覆寫下列環境變數 （請參閱：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]
```

#### 流程層級指標
<a name="_flow_level_metrics"></a>

此外，Network Flow Monitor 會擷取網路流程資料以及流程層級指標：重新傳輸、重新傳輸逾時和傳輸的資料。此資料由 Network Flow Monitor 處理，並在 EKS 主控台中視覺化，以呈現叢集環境中的流量，以及它如何根據這些流程層級指標執行。

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

![\[具有不同效能指標的工作流程圖解\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/nfm-eks-metrics-types-workflow.png)


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

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

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

##### 支援的系統指標
<a name="_supported_system_metrics"></a>

重要注意事項：系統指標會以 [OpenMetrics](https://openmetrics.io/) 格式匯出。


| 指標名稱 | Type | 維度 | Description | 
| --- | --- | --- | --- | 
|  輸入\$1流程  |  量測計  |  instance\$1id、iface、Pod、命名空間、節點  |  傳入 TCP 流程計數 (TcpPassiveOpens)  | 
|  egress\$1flow  |  量測計  |  instance\$1id、iface、Pod、命名空間、節點  |  輸出 TCP 流量計數 (TcpActiveOpens)  | 
|  inress\$1packets  |  量測計  |  instance\$1id、iface、Pod、命名空間、節點  |  傳入封包計數 （差異）  | 
|  egress\$1packets  |  量測計  |  instance\$1id、iface、Pod、命名空間、節點  |  輸出封包計數 （差異）  | 
|  inress\$1bytes  |  量測計  |  instance\$1id、iface、Pod、命名空間、節點  |  輸入位元組計數 （差異）  | 
|  egress\$1bytes  |  量測計  |  instance\$1id、iface、Pod、命名空間、節點  |  輸出位元組計數 （差異）  | 
|  bw\$1in\$1allowance\$1exceeded  |  量測計  |  instance\$1id、eni、節點  |  由於傳入頻寬限制而排入佇列/捨棄的封包  | 
|  bw\$1out\$1allowance\$1exceeded  |  量測計  |  instance\$1id、eni、節點  |  由於傳出頻寬限制而排入佇列/捨棄的封包  | 
|  pps\$1allowance\$1exceeded  |  量測計  |  instance\$1id、eni、節點  |  由於雙向 PPS 限制而排入佇列/捨棄的封包  | 
|  conntrack\$1allowance\$1exceeded  |  量測計  |  instance\$1id、eni、節點  |  由於連線追蹤限制而捨棄的封包  | 
|  linklocal\$1allowance\$1exceeded  |  量測計  |  instance\$1id、eni、節點  |  由於本機代理服務 PPS 限制而捨棄的封包  | 

##### 支援的流程層級指標
<a name="_supported_flow_level_metrics"></a>


| 指標名稱 | Type | 說明 | 
| --- | --- | --- | 
|  TCP 重新傳輸  |  計數器  |  傳送者在傳輸期間重新傳送封包遺失或損毀的次數。  | 
|  TCP 重新傳輸逾時  |  計數器  |  寄件者啟動等待期間的次數，以判斷封包是否在傳輸中遺失。  | 
|  傳輸的資料 （位元組）  |  計數器  |  在指定流程的來源和目的地之間傳輸的資料量。  | 

### 服務映射和流程表
<a name="_service_map_and_flow_table"></a>

![\[NFM 如何與 EKS 搭配使用的圖例\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/nfm-eks-workflow.png)


1. 安裝後，Network Flow Monitor 代理程式會在每個工作者節點上以 DaemonSet 身分執行，並每 30 秒收集前 500 個網路流程 （根據傳輸的資料量）。

1. 這些網路流程會依下列類別排序：AZ 內部、AZ 間、EC2 → S3, EC2 → DynamoDB (DDB) 和未分類。每個流程都有 3 個與其相關聯的指標：重新傳輸、重新傳輸逾時和傳輸的資料 （以位元組為單位）。
   + AZ 內部 - 相同 AZ 中 Pod 之間的網路流程
   + AZ 間 - 不同 AZs 中 Pod 之間的網路流程
   + EC2 → S3 - 從 Pod 到 S3 的網路流程
   + EC2 → DDB - 從 Pod 到 DDB 的網路流程
   + 未分類 - 從 Pod 到網際網路或內部部署的網路流程

1. 來自 Network Flow Monitor Top Contributors API 的網路流程用於為 EKS 主控台中的下列體驗提供支援：
   + 服務映射：叢集內網路流程的視覺化 （可用區域內部和可用區域間）。
   + 流程表：叢集內網路流程的表格呈現 （內部可用區和內部可用區）、從 Pod 到 AWS 服務 (EC2 → S3 和 EC2 → DDB)，以及從 Pod 到外部目的地 （未分類）。

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

#### 範例：服務映射
<a name="_example_service_map"></a>

 *部署檢視* 

![\[部署檢視中具有電子商務應用程式的服務映射圖解\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/ecommerce-deployment.png)


 *Pod 檢視* 

![\[在 Pod 檢視中使用電子商務應用程式的服務映射圖解\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/ecommerce-pod.png)


 *部署檢視* 

![\[部署檢視中具有光庫應用程式的服務映射圖解\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/photo-gallery-deployment.png)


 *Pod 檢視* 

![\[在 Pod 檢視中使用光庫應用程式的服務映射圖解\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/photo-gallery-pod.png)


#### 範例：流程資料表
<a name="_example_flow_table"></a>

 * AWS 服務檢視* 

![\[流程圖檢視的圖例\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/aws-service-view.png)


 *叢集檢視* 

![\[叢集檢視中流程圖的圖例\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/images/cluster-view.png)


## 考量和限制
<a name="_considerations_and_limitations"></a>
+ EKS 中的容器網路可觀測性僅適用於[支援網路流量監控](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-Regions.html)的區域。
+ 支援的系統指標採用 OpenMetrics 格式，並且可以直接從網路流量監控 (NFM) 代理程式中抓取。
+ 若要使用基礎設施即程式碼 (IaC) 如 [Terraform](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/networkflowmonitor_monitor) 在 EKS 中啟用容器網路可觀測性，您需要在組態中定義和建立這些相依性：NFM 範圍、NFM 監控和 NFM 代理程式。
+ Network Flow Monitor 每分鐘最多支援約 500 萬個流程。這是已安裝 Network Flow Monitor 代理程式的大約 5，000 個 EC2 執行個體 (EKS 工作者節點）。在超過 5000 個執行個體上安裝代理程式可能會影響監控效能，直到有額外的容量可用為止。
+ 您必須為 NFM 代理程式的 EKS 附加元件執行最低版本 1.1.0。
+ 您必須使用 [Terraform AWS 提供者](https://github.com/hashicorp/terraform-provider-aws)的 v6.21.0 或更高版本，才能支援網路流量監視器資源。
+ 若要使用 Pod 中繼資料擴充網路流程，您的 Pod 應該在自己的隔離網路命名空間中執行，而不是在主機網路命名空間中執行。