使用代理服务器管理 Fleet Elastic Agent 连接

编辑

Elastic Agent 策略中的代理设置会覆盖环境变量中指定的代理设置。这意味着您可以为 Elastic Agent 指定与主机或系统级环境设置不同的代理设置。

本页面介绍了在您的部署中允许使用代理服务器的位置,以及如何为 Elastic Agent 和 Fleet 配置代理设置。关于代理服务器本身的部署步骤不在本文档范围之内。

Elastic Agent 通常会发出两组连接,一组用于到 Fleet Server 的控制平面流量,另一组用于到 Elasticsearch 等输出的数据平面流量。类似地,操作员会将 Elastic Agent 置于代理服务器之后,并将控制和数据平面流量代理到其最终目的地。

Fleet 集中管理使您能够定义代理服务器,然后配置输出或 Fleet Server 以通过这些代理中的任何一个访问。这也使您能够根据需要修改代理服务器详细信息,而无需重新安装 Elastic Agent。

Image showing connections between Fleet managed Elastic Agent

在此场景中,Fleet Server 和 Elasticsearch 部署在 Elastic Cloud 中,并且可以通过端口 443 访问。

在 Fleet 中为受管 Agent 配置代理服务器

编辑

这些步骤描述了如何设置 Fleet 组件以使用代理。

  1. 全局向 Fleet 添加代理服务器详细信息。

    1. 在 Fleet 中,打开设置选项卡。
    2. 选择添加代理添加代理编辑代理浮出层将打开。

      Screen capture of the Edit Proxy UI in Fleet
    3. 为代理添加一个名称(在此示例中为Proxy-A)并指定代理 URL。
    4. 添加任何其他可选设置。
    5. 选择保存并应用设置。代理信息将被保存,并且该代理已准备好供 Fleet 中的其他组件引用。
  2. 将代理附加到 Fleet Server。

    如果到/从 Fleet Server 的控制平面流量也需要通过代理服务器,则需要将创建的代理也添加到该 Fleet Server 的定义中。

    1. 在 Fleet 中,打开设置选项卡。
    2. Fleet Server 主机列表中,选择一个主机并选择编辑按钮进行配置。
    3. 代理部分的下拉列表中,选择您配置的代理。

      Screen capture of the Edit Fleet Server UI

      在此示例中,使用此 {fleets-server} 的策略中的所有 Elastic Agent 现在将通过Proxy-A中定义的代理服务器连接到 Fleet Server。

    对 Fleet Server 定义进行任何可能导致 Elastic Agent 和 Fleet Server 之间连接问题的无效更改都将导致它们断开连接。唯一的补救措施是重新安装受影响的 Agent。这是因为连接到 Fleet Server 可确保策略更新到达 Agent。如果具有无效主机地址的策略到达 Agent,它将无法再连接,因此不会从 Fleet Server 接收任何其他更新(包括已更正的设置)。在这方面,添加 Agent 无法访问的代理服务器将中断与 Fleet Server 的连接。

  3. 将代理附加到输出

    类似地,如果数据平面流量到输出需要通过代理,则需要将该代理定义添加到 Fleet 中定义的输出中。

    1. 在 Fleet 中,打开设置选项卡。
    2. 输出列表中,选择一个输出并选择编辑按钮进行配置。
    3. 代理部分的下拉列表中,选择您配置的代理。

      Screen capture of the Edit output UI in Fleet

      在此示例中,配置为写入所选输出的所有 Elastic Agent 现在将通过Proxy-A中定义的代理服务器写入该输出。

    如果 Agent 无法访问配置的代理服务器,则它们将无法将数据写入配置了代理服务器的输出。更改输出的代理时,请确保所有受影响的 Agent 都能够连接到代理本身。

  4. 将代理附加到 Agent 下载源

    同样,如果到/从构件注册表的下载流量需要通过代理服务器,则还需要将该代理定义添加到 Fleet 中定义的 Agent 二进制文件源中。

    1. 在 Fleet 中,打开设置选项卡。
    2. Agent 二进制文件下载列表中,选择一个 Agent 二进制文件源并选择编辑按钮进行配置。
    3. 代理部分的下拉列表中,选择您配置的代理。

      Screen capture of the Edit agent binary source UI in Fleet

      在此示例中,配置为从所选 Agent 下载源下载的所有 Elastic Agent 现在将通过Proxy-A中定义的代理服务器从该 Agent 下载源下载。

    如果 Agent 无法访问配置的代理服务器,则它们将无法从配置了代理服务器的 Agent 下载源下载二进制文件。更改 Agent 二进制文件源的代理时,请确保所有受影响的 Agent 都能够连接到代理本身。

  5. 配置 Elastic Agent 策略

    您现在可以配置 Elastic Agent 策略以使用可通过代理服务器访问的 Fleet Server 和输出。

    • 如果策略配置了附加了代理的 Fleet Server,则该策略中所有 Agent 的控制平面流量都将通过该代理到达 Fleet Server。
    • 类似地,如果输出定义附加了代理,则该策略中的所有 Agent 都将通过该代理写入(数据平面)到输出。
  6. 注册 Elastic Agent

    现在 Fleet 已配置,所有策略下载都将使用最新配置的代理更新 Agent。首次安装 Agent 时,它需要与 Fleet(通过 Fleet Server)通信以下载其第一个策略配置。

设置从 Fleet 检索 Agent 策略的代理
编辑

如果 Elastic Agent 和 Fleet 之间存在代理,请在安装 Elastic Agent 并注册到 Fleet 时在命令行上指定代理设置。您在命令行上指定的设置将添加到安装在运行 Elastic Agent 的系统的fleet.yml文件中。

如果 Agent 与 Fleet 的初始通信(即控制平面)需要遍历代理服务器,则需要使用–proxy-url命令行标志(在 Agent 安装期间应用)配置 Agent 以执行此操作。一旦建立与 Fleet 的连接,就可以通过 UI 管理代理服务器详细信息。

如果 Kibana 位于代理服务器之后,您仍然需要配置 Kibana 设置以访问包注册表。

enrollinstall命令接受以下标志

CLI 标志 描述

--proxy-url <url>

代理服务器的 URL。该值可以是完整的 URL 或host[:port],在这种情况下,将假定http方案。该 URL 接受用于对代理进行身份验证的可选用户名和密码设置。例如:http://<username>:<password>@<proxy host>/

--proxy-disabled

如果指定,则将忽略所有代理设置,包括HTTP_PROXYHTTPS_PROXY环境变量。

--proxy-header <header name>=<value>

在 CONNECT 请求期间发送到代理的附加标头。多次使用--proxy-header标志以添加其他标头。您可以使用此设置传递对代理进行身份验证所需的密钥/令牌。

例如

elastic-agent install --url="https://10.0.1.6:8220" --enrollment-token=TOKEN --proxy-url="http://10.0.1.7:3128" --fleet-server-es-ca="/usr/local/share/ca-certificates/es-ca.crt" --certificate-authorities="/usr/local/share/ca-certificates/fleet-ca.crt"

前面的示例中的命令将以下设置添加到安装了 Elastic Agent 的主机上的fleet.yml策略中

fleet:
  enabled: true
  access_api_key: API-KEY
  hosts:
  - https://10.0.1.6:8220
  ssl:
    verification_mode: ""
    certificate_authorities:
    - /usr/local/share/ca-certificates/es-ca.crt
    renegotiation: never
  timeout: 10m0s
  proxy_url: http://10.0.1.7:3128
  reporting:
    threshold: 10000
    check_frequency_sec: 30
  agent:
    id: ""

当 Elastic Agent 运行时,fleet.yml文件将被加密并重命名为fleet.enc

使用安全代理网关的 Elastic Agent 连接

编辑

许多安全代理网关配置为执行双向 TLS,并期望所有连接都提供其证书。在这些情况下,客户端(在本例中为 Elastic Agent)需要向服务器(安全代理)提供证书和密钥。作为回报,客户端期望从服务器看到证书颁发机构链,以确保它也与受信任的实体通信。

Image showing data flow between the proxy server and the Certificate Authority

如果连接到代理服务器时需要 mTLs,则可以选择将客户端证书和客户端证书密钥添加到代理。配置后,连接到此安全代理(通过输出或 Fleet Server)的策略中的所有 Elastic Agent 将使用指定的证书建立与代理服务器的连接。

需要注意的是,用户可以定义证书和密钥的本地路径,因为在许多常见场景中,证书和密钥对于每个 Elastic Agent 都是唯一的。

同样重要的是,Agent 需要使用哪个证书颁发机构来验证他们从安全代理服务器收到的证书。这也可以在 Fleet 设置中创建代理定义时添加。

Screen capture of the Edit Proxy UI

目前,Elastic Agent 不会为到 Fleet Server 的控制平面流量提供证书。某些代理服务器已设置为强制客户端在建立连接之前向其提供证书,然后才能允许该客户端连接。此问题将由问题 #2248解决。我们建议避免在 Fleet Server 配置浮出层中添加此类安全代理。

如果 Kibana 位于代理服务器之后或无法访问 Elastic Package Registry 以下载包元数据和内容,请参阅设置 Elastic Package Registry 的代理 URL