

# 为自行管理的 Kubernetes 实例安装代理
<a name="CloudWatch-NetworkFlowMonitor-agents-kubernetes-non-eks"></a>

按照本节中的步骤，为自行管理的 Kubernetes 集群上的工作负载安装 Network Flow Monitor 代理。完成这些步骤后，Network Flow Monitor 代理容器组将在所有自行管理的 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 图表并安装代理](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 Reference Guide》中的 [Installing or updating to the latest version of the 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 图表并安装代理
<a name="CloudWatch-NetworkFlowMonitor-agents-kubernetes-install-agents"></a>

您可以使用以下命令，从 AWS 公共存储库下载 Network Flow Monitor 代理 Helm 图表。确保您首先使用 GitHub 账户进行身份验证。

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

在 `./charts/amazon-network-flow-monitor-agent` 目录中，您可以找到 Network Flow Monitor 代理 Helm 图表和 Makefile，其中包含用于创建目标的安装。您可以使用以下 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 应用程序容器是否已成功创建和部署，请检查其状态是否为 `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 实例提供凭证的方式相似。建议通过实施 IRSA 来提供 Network Flow Monitor 代理为成功访问 Network Flow Monitor 摄取 API 所需的所有权限。有关更多信息，请参阅《Amazon EKS 用户指南》中的[服务账户的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)。

   为 Network Flow Monitor 代理设置 IRSA 时，请使用以下信息：
   + **ServiceAccount：**在定义 IAM 角色信任策略时，对于 `ServiceAccount`，指定 `aws-network-flow-monitor-agent-service-account`。
   + **命名空间：**对于 `namespace`，请指定 `amazon-network-flow-monitor`。
   + **临时凭证部署：**完成 Network Flow Monitor 代理容器组的部署后，在配置权限并使用 IAM 角色更新 `ServiceAccount` 时，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 代理容器组的 HTTP 200 日志，检查代理的配置是否正常运行。首先，搜索 Network Flow Monitor 代理容器组，然后搜索日志文件以找到成功的 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 日志。如果您更改了命名空间，请确保使用新命名空间。

      ```
      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 秒发布一次网络流报告。