为自行管理的 Kubernetes 实例安装代理 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为自行管理的 Kubernetes 实例安装代理

按照本节中的步骤,为自行管理的 Kubernetes 集群上的工作负载安装 Network Flow Monitor 代理。完成这些步骤后,Network Flow Monitor 代理容器组将在所有自行管理的 Kubernetes 集群节点上运行。

如果您使用 Amazon Elastic Kubernetes Service(Amazon EKS),则要遵循的安装步骤位于以下章节:安装 EKS Amazon 网络流量监测仪代理插件

开始前的准备工作

在开始安装过程之前,请按照本节中的步骤进行操作,确保环境已进行设置,旨在成功在正确的 Kubernetes 集群上安装代理。

确保 Kubernetes 版本受支持

安装 Network Flow Monitor 代理需要 Kubernetes 版本 1.25 或更高的版本。

确保您已安装所需的工具

用于此安装过程的脚本要求您安装以下工具。如果您尚未安装这些工具,请查看提供的链接以获取更多信息。

确保配置了有效且正确配置的 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 图表并安装代理

您可以使用以下命令,从 Amazon 公共存储库下载 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

为代理配置权限以传送指标

为 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 角色

    为 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

  2. 确认 Network Flow Monitor 代理已成功访问 Network Flow Monitor 摄取 API

    您可以使用 Network Flow Monitor 代理容器组的 HTTP 200 日志,检查代理的配置是否正常运行。首先,搜索 Network Flow Monitor 代理容器组,然后搜索日志文件以找到成功的 HTTP 200 请求。例如,您可以执行以下操作:

    1. 找到 Network Flow Monitor 代理容器组的名称。例如,您可以使用以下命令:

      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)
    2. 搜寻已找到的容器组名称的所有 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 秒发布一次网络流报告。