

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

# 安裝自我管理式 Kubernetes 執行個體的代理程式
<a name="CloudWatch-NetworkFlowMonitor-agents-kubernetes-non-eks"></a>

請依循本節中的步驟，為自我管理式 Kubernetes 叢集上的工作負載安裝 Network Flow Monitor 代理程式。完成這些步驟後，Network Flow Monitor 代理程式 Pod 將在所有自我管理式 Kubernetes 叢集節點上執行。

如果您使用 Amazon Elastic Kubernetes Service (Amazon EKS)，請依循如下章節中的安裝步驟操作：[安裝 EKS AWS 網路流量監控代理程式附加元件](CloudWatch-NetworkFlowMonitor-agents-kubernetes-eks.md)。

**Topics**
+ [開始之前](CloudWatch-NetworkFlowMonitor-agents-kubernetes-before-you-begin.md)
+ [下載 Helm Chart 並安裝代理程式](CloudWatch-NetworkFlowMonitor-agents-kubernetes-install-agents.md)
+ [設定代理程式傳送指標的許可](CloudWatch-NetworkFlowMonitor-agents-kubernetes-permissions.md)

# 開始之前
<a name="CloudWatch-NetworkFlowMonitor-agents-kubernetes-before-you-begin"></a>

開始安裝程序之前，請依循本節中的步驟，確保您的環境已設定妥當，可成功在正確的 Kubernetes 叢集上安裝代理程式。

**確保您的 Kubernetes 版本受支援**  
若要安裝 Network Flow Monitor 代理程式，必須具備 Kubernetes 1.25 或更高版本。

**確保您已安裝必要的工具**  
用於此安裝程序的指令碼需要您安裝下列工具。如果尚未安裝這些工具，請參閱提供的連結以取得詳細資訊。  
+  AWS Command Line Interface (CLI)。如需詳細資訊，請參閱《 AWS Command Line Interface 參考指南》中的[安裝或更新至最新版本的 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。
+ Helm 套件管理員。如需詳細資訊，請參閱 Helm 網站上的[安裝 Helm](https://helm.sh/docs/intro/install/)。
+ `kubectl` 命令列工具。如需詳細資訊，請參閱 Kubernetes 網站上的[安裝 kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)。
+ `make` Linux 命令相依項。如需詳細資訊，請參閱下列部落格文章：[Intro to make Linux Command: Installation and Usage](https://ioflood.com/blog/install-make-command-linux/)。對於範例，請執行下列其中一項動作：
  + 對於 Debian 型發行，例如 Ubuntu，請使用下列命令：`sudo apt-get install make`
  + 對於 RPM 型發行，例如 CentOS，請使用下列命令：`sudo yum install make`

**確保擁有有效且正確設定的 KubeConfig 環境變數**  
安裝 Network Flow Monitor 代理程式時需用到 Helm 套件管理員工具，該工具使用 kubeconfig 變數 `$HELM_KUBECONTEXT` 來判斷要使用的目標 Kubernetes 叢集。此外，請注意，當 Helm 執行安裝指令碼時，預設會參考標準 `~/.kube/config` 檔案。您可以變更組態環境變數，以使用不同的設定檔 (透過更新 `$KUBECONFIG`) 或定義要使用的目標叢集 (透過更新 `$HELM_KUBECONTEXT`)。

**建立 Network Flow Monitor Kubernetes 命名空間**  
Network Flow Monitor 代理程式的 Kubernetes 應用程式會將其資源安裝至特定命名空間。命名空間必須存在，安裝才能成功。若要確保所需的命名空間已就位，可以執行下列其中一項動作：  
+ 開始之前，請先建立預設命名空間 `amazon-network-flow-monitor`。
+ 建立不同的命名空間，然後在執行安裝以建立目標時，在 `$NAMESPACE` 環境變數中對其進行定義。

# 下載 Helm Chart 並安裝代理程式
<a name="CloudWatch-NetworkFlowMonitor-agents-kubernetes-install-agents"></a>

您可以使用下列命令，從 AWS 公有儲存庫下載網路流量監控代理程式 Helm Chart。請確保已先使用 GitHub 帳戶進行身分驗證。

`git clone https://github.com/aws/network-flow-monitor-agent.git`

在 `./charts/amazon-network-flow-monitor-agent` 目錄中，您可以找到 Network Flow Monitor 代理程式 Helm Chart 和 Makefile，其中包含用於安裝代理程式的安裝 make 目標。可以使用下列 Makefile 目標安裝 Network Flow Monitor 代理程式：`helm/install/customer`

可以視需要自訂安裝，例如執行下列動作：

```
# Overwrite the kubeconfig files to use
KUBECONFIG=<MY_KUBECONFIG_ABS_PATH> make helm/install/customer
 
# Overwrite the Kubernetes namespace to use
NAMESPACE=<MY_K8S_NAMESPACE> make helm/install/customer
```

若要驗證是否已成功建立和部署 Network Flow Monitor 代理程式的 Kubernetes 應用程式 Pod ，請檢查其狀態是否為 `Running`。您可以執行下列命令來檢查代理程式的狀態：`kubectl get pods -o wide -A | grep amazon-network-flow-monitor`

# 設定代理程式傳送指標的許可
<a name="CloudWatch-NetworkFlowMonitor-agents-kubernetes-permissions"></a>

安裝 Network Flow Monitor 代理程式後，必須啟用這些代理程式，使其能夠將網路指標傳送至 Network Flow Monitor 擷取 API。Network Flow Monitor 中的代理程式必須具有存取 Network Flow Monitor 擷取 API 許可，以便他們可以傳送為每個執行個體收集的網路流量指標。您可以透過為服務帳戶 (IRSA) 實作 IAM 角色來授與此存取權。

若要讓代理程式能夠將網路指標傳送至 Network Flow Monitor，請依循本節中的步驟。

1. **為服務帳戶實作 IAM 角色**

   服務帳戶的 IAM 角色提供管理應用程式憑證的功能，類似 Amazon EC2 執行個體設定檔將憑證提供給 Amazon EC2 執行個體的方式。若要提供 Network Flow Monitor 代理程式所需的所有許可，使其能夠成功存取 Network Flow Monitor 擷取 API，建議的做法是實作 IRSA。如需詳細資訊，請參閱《Amazon EKS 使用者指南》中的[服務帳戶的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)。

   為 Network Flow Monitor 代理程式設定 IRSA 時，請使用下列資訊：
   + **服務帳戶：**當您定義 IAM 角色信任政策時，對於 `ServiceAccount`，指定 `aws-network-flow-monitor-agent-service-account`。
   + **命名空間：**對於 `namespace`，指定 `amazon-network-flow-monitor`。
   + **暫時憑證部署：**當您在部署完 Network Flow Monitor 代理程式 Pod 之後設定許可時，`ServiceAccount`請使用 IAM 角色更新 ，Kubernetes 不會部署 IAM 角色憑證。為了確保 Network Flow Monitor 代理程式取得您指定的 IAM 角色憑證，必須逐步重新啟動 `DaemonSet`。例如，使用如下命令：

     `kubectl rollout restart daemonset -n amazon-network-flow-monitor aws-network-flow-monitor-agent`

1. **確認 Network Flow Monitor 代理程式可成功存取 Network Flow Monitor 擷取 API**

   可以透過檢視 Network Flow Monitor 代理程式 Pod 的 HTTP 200 日誌，確認代理程式的設定是否運作正常。首先，搜尋 Network Flow Monitor 代理程式 Pod，然後搜尋日誌檔案以尋找成功的 HTTP 200 請求。例如，您可以執行下列動作：

   1. 尋找網路流量監控代理程式 Pod 名稱。舉例而言，您可以使用下列命令：

      ```
      RANDOM_AGENT_POD_NAME=$(kubectl get pods -o wide -A | grep amazon-network-flow-monitor | grep Running | head -n 1 | tr -s ' ' | cut -d " " -f 2)
      ```

   1. 在所有 HTTP 日誌中搜尋您已定位的 Pod 名稱。如果您已變更 NAMESPACE，請務必使用新的命名空間。

      ```
      NAMESPACE=amazon-network-flow-monitor
      kubectl logs $RANDOM_AGENT_POD_NAME -\-namespace ${NAMESPACE} | grep HTTP
      ```

   如果已成功授與存取權，您應該會看到類似如下的日誌項目：

   ```
   ...
   {"level":"INFO","message":"HTTP request complete","status":200,"target":"amzn_nefmon::reports::publisher_endpoint","timestamp":1737027525679}
   {"level":"INFO","message":"HTTP request complete","status":200,"target":"amzn_nefmon::reports::publisher_endpoint","timestamp":1737027552827}
   ```

   請注意，Network Flow Monitor 代理程式會呼叫 Network Flow Monitor 擷取 API，每 30 秒發布一次網路流量報告。