使用代理服务器的舰队托管 Elastic Agent 连接编辑

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

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

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

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

Image showing connections between Fleet managed Elastic Agent

在这种情况下,Fleet 服务器和 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 服务器。

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

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

      Screen capture of the Edit Fleet Server UI

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

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

  3. 将代理附加到输出

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

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

      Screen capture of the Edit output UI in Fleet

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

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

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

    此功能处于测试阶段,可能会发生变化。设计和代码不如正式的 GA 功能成熟,并且按原样提供,不提供任何保证。测试版功能不受正式 GA 功能的支持 SLA 的约束。

    同样,如果到工件注册表的下载流量需要通过代理服务器,则还需要将该代理定义添加到 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 服务器和输出。

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

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

设置用于从 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://<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,则可以选择将客户端证书和客户端证书密钥添加到代理。配置完成后,策略中连接到此安全代理(通过输出或舰队服务器)的所有 Elastic Agent 都将使用指定的证书建立与代理服务器的连接。

应该注意的是,用户可以定义证书和密钥的本地路径,因为在许多常见情况下,每个 Elastic Agent 的证书和密钥都是唯一的。

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

Screen capture of the Edit Proxy UI

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

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