使用代理服务器管理 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 中为托管代理配置代理服务器

编辑

以下步骤介绍如何设置 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 之间连接问题的无效更改都将导致它们断开连接。唯一的补救方法是重新安装受影响的代理。这是因为与 Fleet Server 的连接确保策略更新到达代理。如果带有无效主机地址的策略到达代理,它将无法再连接,因此不会收到来自 Fleet Server 的任何其他更新(包括更正的设置)。在这方面,添加代理服务器(代理服务器代理无法访问),将破坏与 Fleet Server 的连接。

  3. 将代理附加到输出

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

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

      Screen capture of the Edit output UI in Fleet

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

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

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

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

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

      Screen capture of the Edit agent binary source UI in Fleet

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

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

  5. 配置 Elastic Agent 策略

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

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

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

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

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

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

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

enrollinstall 命令接受以下标志

CLI 标志 描述

--proxy-url <url>

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

--proxy-disabled

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

--proxy-header <标头名称>=<值>

在 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 的证书和密钥都是唯一的。

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

Screen capture of the Edit Proxy UI

当前 Elastic Agent 不会为与 Fleet Server 的控制平面流量提供证书。某些代理服务器被设置为强制要求建立连接的客户端在允许该客户端连接之前向其提供证书。此问题将通过 issue #2248 解决。我们的建议是避免在 Fleet Server 配置浮出框中添加这样的安全代理。

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