Elasticsearch:为自行管理的 Elastic Stack 自定义 TLS 证书

目录

开始之前

验证现有配置

[准备 PKI 主机](#准备 PKI 主机 "#t2")

[为 Elasticsearch 传输层配置 TLS 证书](#为 Elasticsearch 传输层配置 TLS 证书 "#t3")

[第 1 步:为 Elasticsearch 传输层生成新的 CA](#第 1 步:为 Elasticsearch 传输层生成新的 CA "#t4")

[第 2 步:为所有节点生成传输层证书](#第 2 步:为所有节点生成传输层证书 "#t5")

[第 3 步:分发证书](#第 3 步:分发证书 "#t6")

[第 4 步:在节点上配置传输层 TLS 并应用更改](#第 4 步:在节点上配置传输层 TLS 并应用更改 "#t7")

滚动重启更新的准备工作

节点配置

[为 Elasticsearch HTTP 层配置 TLS 证书](#为 Elasticsearch HTTP 层配置 TLS 证书 "#t10")

[第 1 步:为 Elastic Stack 生成新的 CA](#第 1 步:为 Elastic Stack 生成新的 CA "#t11")

[第 2 步:为 Elasticsearch 生成新的 HTTP 证书](#第 2 步:为 Elasticsearch 生成新的 HTTP 证书 "#t12")

[第 3 步:将 HTTP 证书分发到 Elasticsearch 节点](#第 3 步:将 HTTP 证书分发到 Elasticsearch 节点 "#t13")

[第 4 步:应用配置更改并重启节点第 4 步:应用配置更改并重启节点](#第 4 步:应用配置更改并重启节点第 4 步:应用配置更改并重启节点 "#t14")

[配置 Kibana 以信任 Elasticsearch](#配置 Kibana 以信任 Elasticsearch "#t15")

[为 Kibana 配置 HTTPS](#为 Kibana 配置 HTTPS "#t16")

[第 1 步:为 Kibana HTTP 生成新证书](#第 1 步:为 Kibana HTTP 生成新证书 "#t17")

[第 2 步:将证书文件分发到 Kibana](#第 2 步:将证书文件分发到 Kibana "#t18")

[第 3 步:配置 Kibana SSL 服务端并重启](#第 3 步:配置 Kibana SSL 服务端并重启 "#t19")

[为 Fleet Server 和 Elastic Agent 配置自定义证书](#为 Fleet Server 和 Elastic Agent 配置自定义证书 "#t20")

[第 1 步:使用自定义 TLS 证书安装 Fleet Server](#第 1 步:使用自定义 TLS 证书安装 Fleet Server "#t21")

[第 2 步:安装 Elastic Agent](#第 2 步:安装 Elastic Agent "#t22")

[第 3 步:查看系统数据](#第 3 步:查看系统数据 "#t23")

后续步骤


本教程演示如何将安装自行管理的 Elastic Stack 教程中的默认证书和 密钥 ,替换为你自行创建和安装的证书与密钥。首先,为 Elasticsearch 的节点间传输和 HTTP API 配置 TLS,并相应调整 Kibana,使其信任集群 HTTP 层的证书颁发机构(CA)。随后,为浏览器访问 Kibana 启用 HTTPS,并为 Fleet Server 及通过它注册的 Elastic Agent 主机配置 TLS。

提示

要回顾安装自行管理的 Elastic Stack教程中建立的基础安全与 TLS 配置,包括 Elasticsearch 的自动安全设置,以及快速入门流程生成的 Fleet Server 自签名证书,请参阅安全概述。

本教程分为以下几个阶段:

  • [为 Elasticsearch 传输层配置 TLS 证书](#为 Elasticsearch 传输层配置 TLS 证书 "#%E4%B8%BA%20Elasticsearch%20%E4%BC%A0%E8%BE%93%E5%B1%82%E9%85%8D%E7%BD%AE%20TLS%20%E8%AF%81%E4%B9%A6")
    • 为传输层生成新的证书颁发机构(CA)
    • 为所有节点生成传输层证书
    • 应用配置更改并重启节点
  • [为 Elasticsearch HTTP 层配置 TLS 证书](#为 Elasticsearch HTTP 层配置 TLS 证书 "#%E4%B8%BA%20Elasticsearch%20HTTP%20%E5%B1%82%E9%85%8D%E7%BD%AE%20TLS%20%E8%AF%81%E4%B9%A6")
    • 为 Elastic Stack 生成共享的 HTTP CA
    • 为 Elasticsearch 节点生成 HTTP 证书
    • 应用配置更改并重启集群
    • 配置 Kibana 客户端,使其信任 Elasticsearch HTTP CA
  • [为 Kibana 配置 HTTPS](#为 Kibana 配置 HTTPS "#%E4%B8%BA%20Kibana%20%E9%85%8D%E7%BD%AE%20HTTPS")
    • 为 Kibana 生成服务端 TLS 证书
    • 应用配置更改并重启 Kibana
  • [为 Fleet Server 和 Elastic Agent 配置自定义证书](#为 Fleet Server 和 Elastic Agent 配置自定义证书 "#%E4%B8%BA%20Fleet%20Server%20%E5%92%8C%20Elastic%20Agent%20%E9%85%8D%E7%BD%AE%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AF%81%E4%B9%A6")
    • 使用自定义 TLS 证书安装 Fleet Server
    • 安装 Elastic Agent
    • 查看系统数据

除非另有说明,各节内容相互独立,因此你可以仅按照与你的部署相关的部分进行操作。预计完成时间为 90 分钟。

注意

本教程不涉及 HTTP 客户端连接 Elasticsearch 时的双向 TLS 身份验证(mTLS)。如果需要使用客户端证书进行身份验证,请参阅以下文档:

开始之前

开始之前,你必须已按照 安装自行管理的 Elastic Stack 教程中的步骤,搭建好 本地部署 的 Elasticsearch 集群,并完成 Kibana 的设置。

验证现有配置

完成集群安装后,所有 Elasticsearch 节点的 /etc/elasticsearch/certs 目录下都应包含以下文件:

bash 复制代码
`

1.  sudo ls -l /etc/elasticsearch/certs
2.  -rw-rw----. 1 root elasticsearch  1935 ... http_ca.crt     #1
3.  -rw-rw----. 1 root elasticsearch 10077 ... http.p12        #2
4.  -rw-rw----. 1 root elasticsearch  5838 ... transport.p12   #3

`AI代码解释
  1. PEM 格式的 HTTP CA 证书
  2. PKCS#12 格式的节点 HTTP 密钥库,包含服务器证书、私钥和 HTTP CA 证书
  3. PKCS#12 格式的节点传输层密钥库,包含服务器证书、私钥和传输层 CA 证书

所有节点现有的 elasticsearch.yml 配置都应包含类似以下内容的设置:

yaml 复制代码
`

1.  # Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
2.  xpack.security.http.ssl:
3.    enabled: true
4.    keystore.path: certs/http.p12

6.  # Enable encryption and mutual authentication between cluster nodes
7.  xpack.security.transport.ssl:
8.    enabled: true
9.    verification_mode: certificate
10.    keystore.path: certs/transport.p12
11.    truststore.path: certs/transport.p12

`AI代码解释![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

每个节点的 Elasticsearch 密钥库还应包含以下安全设置:

markdown 复制代码
`

1.  sudo /usr/share/elasticsearch/bin/elasticsearch-keystore list
2.  xpack.security.http.ssl.keystore.secure_password
3.  xpack.security.transport.ssl.keystore.secure_password
4.  xpack.security.transport.ssl.truststore.secure_password

`AI代码解释

注意

如果你的部署使用了不同的证书文件或路径,或者尚未配置 TLS,可能需要相应调整本教程中的部分步骤。

准备 PKI 主机

本教程使用 /usr/share/elasticsearch/pki 作为统一的工作目录,用于生成和存储证书,随后再将其分发到相应节点。

此目录称为 PKI 目录 ,执行这些步骤的主机称为 PKI 主机。

注意

本教程中所有 CA 和证书生成步骤均使用 elasticsearch-certutil。

为简化操作,示例使用第一个 Elasticsearch 节点作为 PKI 主机。在生产环境中,请使用独立且安全的主机执行 PKI 操作,将 CA 私钥保留在该主机上,并仅向各节点分发所需的证书相关文件。

你可以在任何能够访问 Elasticsearch 发行包的 Linux 主机上运行 elasticsearch-certutil,例如使用解压后的 .tar.gz 归档包。

在 PKI 主机上运行以下命令:

1)创建 PKI 目录,用于存储所有生成的证书:

bash 复制代码
`sudo mkdir -p /usr/share/elasticsearch/pki`AI代码解释

2)如果尚未安装 unzip 工具,请先安装:

go 复制代码
`sudo yum install -y unzip`AI代码解释

为 Elasticsearch 传输层配置 TLS 证书

在本节中,你将创建一个自签名证书颁发机构(CA),用于为集群中的所有 Elasticsearch 节点签发传输层证书。这些证书既可以替换现有证书,也可以用于在尚未配置传输层 TLS 的集群上启用该功能。

重要

我们强烈建议为每个集群使用专用 CA 来保障 Elasticsearch 传输层安全,不要使用为其他系统或用途签发证书的 CA。切勿为 Elasticsearch 传输层使用公共 CA。有关传输层 TLS 证书的要求,请参阅使用外部证书颁发机构保护节点间连接。

第 1 步:为 Elasticsearch 传输层生成新的 CA

在用于生成证书的主机(即 PKI 主机)上运行以下命令:

1)创建 CA。出现提示时,为输出文件指定一个唯一的名称,例如 transport-ca.zip:

bash 复制代码
`sudo /usr/share/elasticsearch/bin/elasticsearch-certutil ca -pem`AI代码解释

2)将输出文件移动到 /usr/share/elasticsearch/pki/transport 目录:

bash 复制代码
`

1.  sudo mkdir -p /usr/share/elasticsearch/pki/transport
2.  sudo mv /usr/share/elasticsearch/transport-ca.zip /usr/share/elasticsearch/pki/transport/

`AI代码解释

3)解压文件:

bash 复制代码
`sudo unzip -d /usr/share/elasticsearch/pki/transport/ /usr/share/elasticsearch/pki/transport/transport-ca.zip`AI代码解释

4)解压后会创建一个 ca 目录,其中包含以下文件:

markdown 复制代码
`

1.  /usr/share/elasticsearch/pki/transport/
2.  └── ca/
3.      ├── ca.crt
4.      └── ca.key

`AI代码解释

在后续步骤中,使用此 CA 为集群中的所有 Elasticsearch 节点生成传输层证书。请将 ca.key 文件保存在安全位置,不要将其分发到各节点。

  • ca.crt:生成的 CA 证书。
  • ca.key:证书颁发机构的私钥。

第 2 步:为所有节点生成传输层证书

在本节中,你将使用上一步创建的 CA,为集群中的所有节点生成传输层证书。

注意

请勿为 Elasticsearch 传输层使用受公共信任的证书。如果希望使用私有 CA 或企业 CA,请参阅使用外部证书颁发机构保护节点间连接,了解传输层证书的要求和最佳实践。

1)在用于生成证书的主机(即 PKI 主机)上,使用新创建的 CA 证书和私钥,为所有 Elasticsearch 节点创建证书:

bash 复制代码
`

1.  sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert \
2.  --ca-cert /usr/share/elasticsearch/pki/transport/ca/ca.crt \
3.  --ca-key /usr/share/elasticsearch/pki/transport/ca/ca.key \
4.  --multiple  #1

`AI代码解释
  • 使用 --multiple 选项,通过一条命令为多个 Elasticsearch 节点生成证书。在 elasticsearch-certutil 的交互提示中,以实例名称的形式输入各个节点。你也可以为每个 Elasticsearch 节点分别运行一次命令,并在每次运行时指定不同的输出文件名。

出现提示时:

  • 为每个节点设置实例名称。
  • (可选)为每个节点设置 IP address(IP 地址)和 FQDN names(完全限定域名),以增强安全性。
  • 选择输出文件名(可以使用默认的 certificate-bundle.zip),并为每个证书设置密码。
  • (可选)为所有证书使用相同的密码,以简化下一步的密钥库配置。

以下是命令交互过程的示例:

markdown 复制代码
`

1.  Enter instance name: es-node1
2.  Enter name for directories and files of es-node1 [es-node1]:
3.  Enter IP Addresses for instance (comma-separated if more than one) []:
4.  Enter DNS names for instance (comma-separated if more than one) []:
5.  Would you like to specify another instance? Press 'y' to continue entering instance information: y
6.  Enter instance name: es-node2
7.  Enter name for directories and files of es-node2 [es-node2]:
8.  Enter IP Addresses for instance (comma-separated if more than one) []:
9.  Enter DNS names for instance (comma-separated if more than one) []:
10.  Would you like to specify another instance? Press 'y' to continue entering instance information: y
11.  Enter instance name: es-node3
12.  Enter name for directories and files of es-node3 [es-node3]:
13.  Enter IP Addresses for instance (comma-separated if more than one) []:
14.  Enter DNS names for instance (comma-separated if more than one) []:
15.  Would you like to specify another instance? Press 'y' to continue entering instance information: n
16.  Please enter the desired output file [certificate-bundle.zip]:
17.  Enter password for es-node2/es-node2.p12 :
18.  Enter password for es-node1/es-node1.p12 :
19.  Enter password for es-node3/es-node3.p12 :

21.  Certificates written to /usr/share/elasticsearch/certificate-bundle.zip

`AI代码解释![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

2)将输出文件移动到 /usr/share/elasticsearch/pki/transport 目录:

bash 复制代码
`

1.  sudo mkdir -p /usr/share/elasticsearch/pki/transport
2.  sudo mv /usr/share/elasticsearch/certificate-bundle.zip /usr/share/elasticsearch/pki/transport/

`AI代码解释

3)解压文件:

bash 复制代码
`sudo unzip -d /usr/share/elasticsearch/pki/transport/ /usr/share/elasticsearch/pki/transport/certificate-bundle.zip`AI代码解释

解压后,/usr/share/elasticsearch/pki/transport/ 的目录结构如下。ca/ 目录中存放的是你在第 1 步:为 Elasticsearch 传输层生成新的 CA 中创建的传输层 CA。

markdown 复制代码
`

1.  /usr/share/elasticsearch/pki/transport/
2.  ├── ca/
3.  │   ├── ca.crt
4.  │   └── ca.key
5.  ├── es-node1/
6.  │   └── es-node1.p12
7.  ├── es-node2/
8.  │   └── es-node2.p12
9.  └── es-node3/
10.      └── es-node3.p12

`AI代码解释![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

4)列出某个节点目录中解压得到的文件:

bash 复制代码
`sudo ls /usr/share/elasticsearch/pki/transport/<es-node-name>`AI代码解释
  • <es-node-name>.p12:生成的 PKCS#12 格式证书,使用你在创建证书时输入的密码进行保护。

第 3 步:分发证书

在此步骤中,你将把传输层 CA 证书和节点证书复制到各个 Elasticsearch 节点。每个节点仅接收自身的证书和共享的 CA 证书。

注意

本教程使用 scp 将文件复制到普通用户的主目录,然后使用 mv 将其移动到 Elasticsearch 配置目录。如果你的环境支持直接传输到最终目标位置,可以改用该方式。

完成此步骤后,每个 Elasticsearch 节点上都应存在以下文件:

  • /etc/elasticsearch/certs/transport_ca_new.pem:包含 PEM 格式的 CA 证书。
  • /etc/elasticsearch/certs/transport_cert_new.p12:包含 PKCS#12 格式的节点传输层密钥库。

1)在用于生成所有证书的主机(即 PKI 主机)上,将传输层 CA 证书和节点证书一同复制到对应的 Elasticsearch 节点:

xml 复制代码
`

1.  sudo scp /usr/share/elasticsearch/pki/transport/ca/ca.crt \
2.    /usr/share/elasticsearch/pki/transport/<es-node-name>/<es-node-name>.p12 \
3.    <user>@<node-host>:/home/user/

`AI代码解释

对每个节点重复执行此命令,将节点名称、主机和用户相关占位符替换为对应的实际值。

2)在每个 Elasticsearch 节点上,将复制的证书文件从该目录移动到配置目录:

bash 复制代码
`

1.  sudo mv /home/user/ca.crt /etc/elasticsearch/certs/transport_ca_new.pem
2.  sudo mv /home/user/<es-node-name>.p12 /etc/elasticsearch/certs/transport_cert_new.p12

`AI代码解释
  • 为保持一致并简化运维,所有 Elasticsearch 节点上的最终证书文件均使用相同的文件名。如果希望保留原始文件名(<es-node-name>.p12),请务必在下一步中相应更新配置。

3)确保每个 Elasticsearch 节点上的证书文件具有正确的所有者、所属组和权限:

bash 复制代码
`

1.  sudo chown -R root:elasticsearch /etc/elasticsearch/certs/
2.  sudo sh -c 'chmod 640 /etc/elasticsearch/certs/*'
3.  sudo chmod 750 /etc/elasticsearch/certs

`AI代码解释

第 4 步:在节点上配置传输层 TLS 并应用更改

根据能否接受短暂的服务中断,或是否希望避免任何停机,你可以选择以下两种方式应用更改:

  • 整个集群重启:更简单、更快速,推荐用于能够接受短暂停机的小型集群。更新所有节点的配置,然后停止并启动所有节点。
  • 滚动重启(无停机):更新信任库,临时同时包含现有和新的 CA 证书,使节点在过渡期间同时信任新旧证书。然后更新配置,逐个重启节点,直到所有节点都使用新证书。

请选择最符合运维要求的方式。

注意

在整个集群重启和滚动重启流程中,更改是在关闭所有节点后(整个集群重启),或关闭当前节点后(滚动重启)应用的。

本教程则在停止和重启之前进行这些更改,以缩短停机时间。当更改不会影响正在运行的节点、仅在服务重启后生效时,可以采用此顺序。

滚动重启更新的准备工作

替换传输层 CA 时,使用新 CA 签发证书的节点默认不会受到信任。因此,除非采取额外措施,否则通常需要重启整个集群。

注意

只有在希望逐个节点应用更改、避免服务中断时,才需要执行这些步骤。如果可以接受整个集群重启,请直接跳至节点配置。

要让集群同时信任现有和新的证书,请在所有 Elasticsearch 节点上执行以下步骤:

1)从现有 PKCS#12 信任库中提取原传输层 CA。后续步骤将用到该 CA。

markdown 复制代码
`

1.  sudo openssl pkcs12 -in /etc/elasticsearch/certs/transport.p12 \
2.    -cacerts -nokeys \
3.    -out /etc/elasticsearch/certs/transport_ca_old.pem

`AI代码解释
  • transport.p12 是当前使用的传输层 TLS 信任库名称,由 xpack.security.transport.ssl.truststore.path 指定。

出现提示时,输入信任库密码。该命令会创建 /etc/elasticsearch/certs/transport_ca_old.pem 文件,其中包含 PEM 格式的原 CA 证书。

提示

如果不知道原信任库的密码,可以通过以下命令从 Elasticsearch 安全设置中获取:

bash 复制代码
`sudo /usr/share/elasticsearch/bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password`AI代码解释

2)将新创建的 CA 证书导入现有 Elasticsearch 信任库。此步骤可确保正在运行的集群信任使用新证书的节点:

bash 复制代码
`

1.  sudo /usr/share/elasticsearch/jdk/bin/keytool -importcert -trustcacerts -noprompt \
2.    -keystore /etc/elasticsearch/certs/transport.p12 \   #1
3.    -storepass <password> -alias new-transport-ca \
4.    -file /etc/elasticsearch/certs/transport_ca_new.pem  #2

`AI代码解释

要验证 CA 是否已添加到信任库,请运行:

bash 复制代码
`

1.  sudo /usr/share/elasticsearch/jdk/bin/keytool \
2.    -keystore /etc/elasticsearch/certs/transport.p12 -list

`AI代码解释

确认输出中存在 new-transport-ca 别名。

  • transport.p12 是当前使用的传输层 TLS 信任库名称,由 xpack.security.transport.ssl.truststore.path 指定。
  • transport_ca_new.pem 是新创建的 PEM 格式传输层 CA 证书。

3)将原 CA 导入新的 transport_cert_new.p12 PKCS#12 文件。此步骤可确保重新配置的节点能够加入集群,并与仍使用原 CA 的现有节点通信。

要验证 CA 是否已添加到信任库,请运行:

bash 复制代码
`

1.  sudo /usr/share/elasticsearch/jdk/bin/keytool \
2.    -keystore /etc/elasticsearch/certs/transport_cert_new.p12 -list

`AI代码解释

确认输出中存在 old-transport-ca 别名。

  • transport_cert_new.p12 是新的传输层 TLS 证书文件名。
  • 使用你在第 2 步:生成传输层证书中设置的相同密码。
  • transport_ca_old.pem 是当前使用的 PEM 格式传输层 CA 证书。

节点配置

在第一个 Elasticsearch 节点上完成以下操作,将其配置为使用新证书。本节最后会根据你选择的重启方式,说明如何以及何时在其余节点上重复相同流程。

1)使用文本编辑器打开配置文件(/etc/elasticsearch/elasticsearch.yml),调整以下设置,使其指向新创建的证书:

yaml 复制代码
`

1.  # 启用集群节点之间的加密和双向身份验证
2.  xpack.security.transport.ssl:
3.    enabled: true
4.    verification_mode: certificate          #1
5.    keystore.path: certs/transport_cert_new.p12    #2
6.    truststore.path: certs/transport_cert_new.p12  #3

`AI代码解释
  • 如果为每个节点生成了包含对应 DNS 名称或 IP 地址的独立证书,可以将验证模式设置为 full。请参阅 TLS 设置中的 xpack.security.transport.ssl.verification_mode 参数。
  • 如果创建证书时使用了不同的文件名,请在每个节点上相应调整配置。
  • 信任库使用相同的文件名,是因为生成的 PKCS#12 文件也包含 CA 证书。

1)使用 elasticsearch-keystore 工具,将 PKCS#12 文件的密码配置为安全设置。

  • 在 Elasticsearch 安装目录中,列出已配置的安全设置:

    bash 复制代码
    `sudo /usr/share/elasticsearch/bin/elasticsearch-keystore list`AI代码解释

    检查输出中是否存在以下设置:

    go 复制代码
    `
    
    1.  xpack.security.transport.ssl.keystore.secure_password
    2.  xpack.security.transport.ssl.truststore.secure_password
    
    `AI代码解释

    这些安全设置保存着安装期间创建的现有 PKCS#12 证书的保护密码,需要将其替换为新证书的密码。

  • 删除默认传输层密钥库和信任库的现有设置:

    arduino 复制代码
    `
    
    1.  sudo /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.transport.ssl.keystore.secure_password
    2.  sudo /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.transport.ssl.truststore.secure_password
    
    `AI代码解释
  • 添加安全设置,填入新创建证书所使用的密码,确保 Elasticsearch 能够读取新的 PKCS#12 文件:

    bash 复制代码
    `
    
    1.  sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
    2.  sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password  #1
    
    `AI代码解释

    #1 两项安全设置应使用相同的密码,因为 Elasticsearch YAML 配置中的 keystore 和 truststore 指向同一个文件。

3)根据所选方式执行相应操作,以应用更改:

如果采用滚动重启: 重启当前节点,确认它使用新证书重新加入集群,然后在下一个节点上重复此流程。

重启正在运行的节点:

go 复制代码
`sudo systemctl restart elasticsearch`AI代码解释

确认 Elasticsearch 正在运行:

go 复制代码
`sudo systemctl status elasticsearch.service`AI代码解释

如有需要,监控 Elasticsearch 日志,检查启动或 TLS 相关错误:

bash 复制代码
`sudo tail -f /var/log/elasticsearch/elasticsearch-demo.log`AI代码解释

有关操作指导和其他验证步骤,请参阅滚动重启。

如果采用整个集群重启: 在所有节点上重复前述步骤。完成全部节点的配置后,停止并启动整个集群。

要停止集群,请在所有节点上运行:

arduino 复制代码
`systemctl stop elasticsearch`AI代码解释

要启动集群,请在所有节点上运行:

go 复制代码
`systemctl start elasticsearch`AI代码解释

有关操作指导和其他验证步骤,请参阅整个集群重启。

4)所有 Elasticsearch 节点均已使用新证书运行后,如果你采用了滚动重启方式,并完成了滚动重启准备工作,请在所有节点的新信任库中删除原 CA(old-transport-ca):

markdown 复制代码
`

1.  sudo /usr/share/elasticsearch/jdk/bin/keytool -delete \
2.    -keystore /etc/elasticsearch/certs/transport_cert_new.p12 \
3.    -storepass <password> \
4.    -alias old-transport-ca

`AI代码解释

为 Elasticsearch HTTP 层配置 TLS 证书

本节介绍 Elasticsearch HTTP 连接的 TLS 配置,包括创建可在整个 Elastic Stack 中复用的共享 HTTP CA。

注意

出于安全考虑,建议传输层使用集群专用的 CA;而 HTTP 证书则有多种可行方案。例如,你可以使用受公共信任的 CA 签发的证书,也可以使用组织内部 CA 签发的证书。

你还可以在整个 Stack 中使用同一个共享 HTTP CA(例如,为 Elasticsearch、Kibana 和 Fleet Server 签发证书),或者为各组件使用不同的 CA 和证书配置文件,以隔离信任域。有关这些信任模型的更多详细信息,请参阅相同 CA和不同 CA。

第 1 步:为 Elastic Stack 生成新的 CA

本节通过创建一个共享 HTTP CA,为整个 Elastic Stack 的 HTTP 连接配置 TLS。该 CA 用于为 Elasticsearch、Kibana 和 Fleet Server 签发证书。

在用于生成证书的主机(即 PKI 主机)上运行以下命令:

1)创建新的自签名 CA:

bash 复制代码
`sudo /usr/share/elasticsearch/bin/elasticsearch-certutil ca -pem`AI代码解释

出现提示时,为输出文件指定一个唯一的名称,例如 elastic-stack-http-ca.zip。

2)将输出文件移动到 /usr/share/elasticsearch/pki/http 目录:

bash 复制代码
`

1.  sudo mkdir -p /usr/share/elasticsearch/pki/http
2.  sudo mv /usr/share/elasticsearch/elastic-stack-http-ca.zip /usr/share/elasticsearch/pki/http/

`AI代码解释

3)解压文件:

bash 复制代码
`sudo unzip -d /usr/share/elasticsearch/pki/http/ /usr/share/elasticsearch/pki/http/elastic-stack-http-ca.zip`AI代码解释

4)解压后会创建一个 ca 目录,其中包含以下文件:

markdown 复制代码
`

1.  /usr/share/elasticsearch/pki/http/
2.  └── ca/
3.      ├── ca.crt
4.      └── ca.key

`AI代码解释

5)使用具有描述性的名称重命名文件:

bash 复制代码
`

1.  sudo mv /usr/share/elasticsearch/pki/http/ca/ca.crt /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt
2.  sudo mv /usr/share/elasticsearch/pki/http/ca/ca.key /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.key

`AI代码解释

最终目录结构如下:

markdown 复制代码
`

1.  /usr/share/elasticsearch/pki/http/
2.  ├── elastic-stack-http-ca.zip
3.  └── ca/
4.      ├── elastic-stack-http-ca.crt
5.      └── elastic-stack-http-ca.key

`AI代码解释
  • elastic-stack-http-ca.crt:生成的 CA 证书。
  • elastic-stack-http-ca.key:证书颁发机构的私钥。

在本教程的后续步骤中,你将使用此 CA 为整个 Stack 生成 HTTP 证书,包括 Elasticsearch 节点以及 Kibana、Fleet Server 等其他组件。请将 CA 私钥文件保存在安全位置,不要将其分发到各节点。

第 2 步:为 Elasticsearch 生成新的 HTTP 证书

在此步骤中,你将使用之前创建的 HTTP CA,为 Elasticsearch 节点生成证书。

注意

如果已从安全团队或证书颁发机构获取 HTTP 证书,请跳过此步骤,直接前往第 3 步:应用配置更改并重启节点。

1)在用于生成证书的主机(即 PKI 主机)上,使用 elasticsearch-certutil 工具为 Elasticsearch 节点创建 HTTP 证书:

bash 复制代码
`sudo /usr/share/elasticsearch/bin/elasticsearch-certutil http`AI代码解释

按照以下说明响应命令提示:

工具会将所有生成的证书保存到 /usr/share/elasticsearch/elasticsearch-ssl-http.zip 中。

  • 当询问是否生成证书签名请求(CSR)时,输入 n。

    注意

    如果希望生成 CSR 并交由外部 CA 签名,请在 CSR 提示处改为输入 y。

  • 当询问是否使用现有 CA 时,输入 y,并提供在第 1 步:为 Elastic Stack 生成共享 HTTP CA 中生成的 CA 证书和私钥:

    • /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt
    • /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.key
  • 输入证书有效期,可以按年、月或天指定。例如,输入 1y 表示一年。

  • 当询问是否为每个节点生成一个证书时,输入 y。

    工具将引导你为每个节点创建证书。每个证书都有独立的私钥,并针对所提供的主机名和 IP 地址签发。

    注意

    如果希望为所有集群节点创建一个共用证书,请在询问是否为每个节点生成一个证书时输入 n,并确保包含客户端访问集群时使用的所有 IP 地址和完全限定域名(FQDN)。

  • 对于要创建的每个证书,完成以下操作:

    1. 为节点输入一个具有描述性的名称,例如 es-node1。

    2. 输入主机名列表,这些名称将作为 DNS 名称添加到证书的 Subject Alternative Name(主题备用名称,SAN)字段中。

      注意

      如果希望所有节点都接受某个共用 FQDN,请将其包含在所有证书中。通过外部负载均衡器或反向代理访问集群时,这种做法很有用。

    3. 出现提示时,确认设置正确。

    4. 添加客户端可用于连接该节点的网络 IP 地址。至少应包含此证书对应节点的 IP 地址,例如 203.0.113.21。

      注意

      如果使用某个共用 IP 地址访问集群,请将其包含在所有证书中。通过外部负载均衡器或反向代理访问集群,并希望允许通过其 IP 地址访问时,这种做法很有用。

    5. 出现提示时,确认设置正确。

    6. 出现提示时,选择继续生成其他证书,然后为 Elasticsearch 集群中的每个节点重复上述步骤。

  • 为生成的 http.p12 密钥库文件设置密码。

    注意

    所有生成的 PKCS#12 证书均使用相同的密码进行保护。

  • 指定输出文件名,或接受默认值 /usr/share/elasticsearch/elasticsearch-ssl-http.zip。

2)将输出文件移动到 /usr/share/elasticsearch/pki/http 目录:

bash 复制代码
`

1.  sudo mkdir -p /usr/share/elasticsearch/pki/http
2.  sudo mv /usr/share/elasticsearch/elasticsearch-ssl-http.zip /usr/share/elasticsearch/pki/http/

`AI代码解释

3)解压生成的 elasticsearch-ssl-http.zip 归档文件:

bash 复制代码
`sudo unzip -d /usr/share/elasticsearch/pki/http/ /usr/share/elasticsearch/pki/http/elasticsearch-ssl-http.zip`AI代码解释

4)解压后,证书文件会分别放入各个 Elasticsearch 节点对应的目录中。此外,还会为 HTTP CA 创建一个 ca 目录,并创建一个 kibana 目录,供你配置 Kibana 以信任该 CA。

markdown 复制代码
`

1.  /usr/share/elasticsearch/pki/http/
2.  ├── elasticsearch-ssl-http.zip
3.  ├── elasticsearch/
4.  │   ├── es-node1/
5.  │   │   └── http.p12
6.  │   └── es-node2/
7.  │       └── http.p12
8.  │   └── ...
9.  └── kibana/
10.      └── elasticsearch-ca.pem

`AI代码解释![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)
  • http.p12:每个 Elasticsearch 节点的 PKCS#12 密钥库,包含该节点的证书和私钥。
  • elasticsearch-ca.pem:PEM 格式的 CA 证书,供 Kibana 和其他客户端用于信任 Elasticsearch HTTP 证书。它与 elastic-stack-http-ca.crt 是同一个 CA 证书。

第 3 步:将 HTTP 证书分发到 Elasticsearch 节点

在此步骤中,你将生成的 PKCS#12 证书和 CA 证书复制到对应的 Elasticsearch 节点。新的密钥库保存为 http_new.p12,现有的 http.p12 则继续使用,直到下一步进行切换。

注意

本教程使用 scp 将文件复制到普通用户的主目录,然后使用 mv 将其移动到 Elasticsearch 配置目录。如果你的环境支持直接传输到最终目标位置,可以改用该方式。

完成此步骤后,每个 Elasticsearch 节点的 /etc/elasticsearch/certs 目录中都应存在以下文件:

  • http.p12:包含当前正在使用的 HTTP 证书。
  • http_new.p12:包含该节点的新 HTTP 证书。
  • elastic-stack-http-ca.crt:包含 PEM 格式的 HTTP CA 证书。

1)在用于生成证书的主机(即 PKI 主机)上,将生成的各个 http.p12 证书及共享 HTTP CA 证书复制到对应节点:

bash 复制代码
`

1.  sudo scp /usr/share/elasticsearch/pki/http/elasticsearch/<es-node-hostname>/http.p12 \
2.    /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt \
3.    <user>@<es-node-host>:/home/user/

`AI代码解释

对每个节点重复执行此命令,将 <es-node-hostname> 和 <es-node-host> 替换为对应的实际值。

2)在每个 Elasticsearch 节点上,将接收到的文件移动到配置目录,并将 http.p12 重命名为 http_new.p12:

bash 复制代码
`

1.  sudo mv /home/user/http.p12 /etc/elasticsearch/certs/http_new.p12
2.  sudo mv /home/user/elastic-stack-http-ca.crt /etc/elasticsearch/certs/elastic-stack-http-ca.crt

`AI代码解释

3)确保每个 Elasticsearch 节点上的证书文件具有正确的所有者、所属组和权限:

bash 复制代码
`

1.  sudo chown -R root:elasticsearch /etc/elasticsearch/certs/
2.  sudo chmod 640 /etc/elasticsearch/certs/*
3.  sudo chmod 750 /etc/elasticsearch/certs

`AI代码解释

第 4 步:应用配置更改并重启节点第 4 步:应用配置更改并重启节点

你可以按照滚动重启流程,逐个节点更新 Elasticsearch 集群的 HTTP 证书。

重要

使用由不同 CA 签发的新 HTTP 证书,可能会影响 Kibana、Fleet Server 和 Elastic Agent 主机等客户端与集群之间的 HTTP 连接。不信任新 CA 的客户端将无法连接到 Elasticsearch。在生产环境中,请先将新的 HTTP CA 添加到所有客户端的信任库,再应用更改。

对集群中的每个节点执行以下操作:

1)使用文本编辑器打开配置文件(/etc/elasticsearch/elasticsearch.yml),更新 HTTP SSL 设置,使其指向新的证书密钥库:

yaml 复制代码
`

1.  xpack.security.http.ssl:
2.    enabled: true
3.    keystore.path: certs/http_new.p12

`AI代码解释
  • 确保此路径与各节点上部署的新 HTTP 证书的位置一致。

2)使用 elasticsearch-keystore 工具,更新以安全设置形式配置的 HTTP 密钥库密码:

  1. 首先删除现有条目:

    arduino 复制代码
    `sudo /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.http.ssl.keystore.secure_password`AI代码解释
  2. 重新添加该安全设置,使用新 HTTP 证书的密码:

    bash 复制代码
    `sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password`AI代码解释

3)重启 Elasticsearch 服务,使更改生效:

go 复制代码
`sudo systemctl restart elasticsearch.service`AI代码解释

4)按照滚动重启流程中的检查步骤,验证重启后的节点是否重新加入集群。

如果出现问题,也可以实时查看 Elasticsearch 日志文件,排查相关问题:

bash 复制代码
`sudo tail -f /var/log/elasticsearch/elasticsearch-demo.log`AI代码解释

5)使用新的 CA 证书验证节点能否正常响应 HTTP 请求:

arduino 复制代码
`curl -u elastic --cacert /etc/elasticsearch/certs/elastic-stack-http-ca.crt "https://<NODE_IP>:9200/_cat/nodes?v"`AI代码解释
  • 根据生成 HTTP 证书时包含的 SAN 条目,使用对应的节点 IP 地址、主机名或 FQDN。

6)继续处理下一个节点。

配置 Kibana 以信任 Elasticsearch

当 Elasticsearch HTTP CA 发生变化时,Kibana 必须信任新的 CA 证书,才能继续与 Elasticsearch 建立 HTTPS 连接。

  1. 在用于生成证书的主机(即 PKI 主机)上,将 Elasticsearch CA 证书(elastic-stack-http-ca.crt)从 PKI 目录复制到 Kibana 主机:

    arduino 复制代码
    `sudo scp /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt <user>@<kibana-host>:/home/user/elastic-stack-http-ca.crt`AI代码解释
  2. 在 Kibana 主机上,将该文件移动到 Kibana 配置目录:

    bash 复制代码
    `sudo mv /home/user/elastic-stack-http-ca.crt /etc/kibana`AI代码解释
  3. 更新 /etc/kibana/kibana.yml 配置文件,指定 elastic-stack-http-ca.crt 的位置:

    less 复制代码
    `elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/elastic-stack-http-ca.crt" ]`AI代码解释
  4. 重启 Kibana 服务:

    go 复制代码
    `sudo systemctl restart kibana.service`AI代码解释

为 Kibana 配置 HTTPS

本节介绍 Kibana 服务端的 HTTPS 配置,以加密浏览器与 Kibana 之间的流量。

重要

强烈建议为 Kibana 配置服务端 SSL/TLS 证书。默认情况下,系统不会自动配置这些证书。

本教程使用为 Elastic Stack 生成新的 HTTP CA 中创建的证书颁发机构(CA),为 Kibana 生成新的 TLS 证书,但也可以采用其他方案:

有关 Kibana 安全和 HTTPS 配置的更多指导,请参阅在 Kibana 中配置安全功能和设置 HTTPS。

第 1 步:为 Kibana HTTP 生成新证书

要使用现有 HTTP CA 为 Kibana 创建新证书,请完成以下操作:

  1. 在用于生成证书的主机(即 PKI 主机)上,使用证书工具为 Kibana 服务器生成证书包:

    css 复制代码
    `
    
    1.  sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --name kibana-server \
    2.    --ca-cert /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt \
    3.    --ca-key /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.key \
    4.    --dns <DNS name> --ip <IP address> --pem
    
    `AI代码解释

    将 <DNS name> 和 <IP address> 替换为 Kibana 服务器主机的名称和 IP 地址。

    提示

    如果希望证书也适用于其他 FQDN,可以包含多个 --dns 条目。

    出现提示时,为输出文件指定一个唯一的名称,例如 kibana-cert-bundle.zip。

  2. 将输出归档文件移动到 PKI 目录:

    bash 复制代码
    `
    
    1.  sudo mkdir -p /usr/share/elasticsearch/pki/kibana
    2.  sudo mv /usr/share/elasticsearch/kibana-cert-bundle.zip /usr/share/elasticsearch/pki/kibana/
    
    `AI代码解释
  3. 解压生成的 kibana-cert-bundle.zip 归档文件:

    bash 复制代码
    `sudo unzip -d /usr/share/elasticsearch/pki/kibana/ /usr/share/elasticsearch/pki/kibana/kibana-cert-bundle.zip`AI代码解释
  4. 生成的证书包目录结构类似如下:

    markdown 复制代码
    `
    
    1.  /usr/share/elasticsearch/pki/kibana/
    2.  ├── kibana-cert-bundle.zip
    3.  └── kibana-server/
    4.      ├── kibana-server.crt
    5.      └── kibana-server.key
    
    `AI代码解释

    注意

    此新证书对应的 CA 证书,是之前创建的共享 HTTP CA 证书(/usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt)。

第 2 步:将证书文件分发到 Kibana

  1. 在用于生成证书的主机(即 PKI 主机)上,将 Kibana 证书和私钥复制到 Kibana 主机:

    vbscript 复制代码
    `
    
    1.  sudo scp /usr/share/elasticsearch/pki/kibana/kibana-server/kibana-server.crt \
    2.    /usr/share/elasticsearch/pki/kibana/kibana-server/kibana-server.key \
    3.    <user>@<kibana-host>:/home/user/
    
    `AI代码解释

    将 <kibana-host> 替换为 Kibana 服务器的主机名或 IP 地址。

  2. 在同一台主机上,将签发 Kibana 服务器证书的 CA 证书复制到 Kibana 主机。本教程使用的 CA 是之前生成的共享 HTTP CA:

    arduino 复制代码
    `sudo scp /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt <user>@<kibana-host>:/home/user/elastic-stack-http-ca.crt`AI代码解释

    注意

    如果使用其他 CA 生成了 Kibana 服务器证书,请改为复制该 CA 的证书。

  3. 在 Kibana 主机上,将证书文件移动到 /etc/kibana:

    bash 复制代码
    `
    
    1.  sudo mv /home/user/kibana-server.crt /etc/kibana/
    2.  sudo mv /home/user/kibana-server.key /etc/kibana/
    3.  sudo mv /home/user/elastic-stack-http-ca.crt /etc/kibana/
    
    `AI代码解释
  4. 更新证书文件的所有者、所属组和权限。在 /etc/kibana 目录中运行:

    bash 复制代码
    `
    
    1.  sudo chown root:kibana /etc/kibana/kibana-server.crt /etc/kibana/kibana-server.key /etc/kibana/elastic-stack-http-ca.crt
    2.  sudo chmod 640 /etc/kibana/kibana-server.crt /etc/kibana/kibana-server.key /etc/kibana/elastic-stack-http-ca.crt
    
    `AI代码解释

第 3 步:配置 Kibana SSL 服务端并重启

  1. 打开 /etc/kibana/kibana.yml,进行以下更改:

    vbscript 复制代码
    `
    
    1.  server.ssl.certificate: /etc/kibana/kibana-server.crt
    2.  server.ssl.key: /etc/kibana/kibana-server.key
    3.  server.ssl.enabled: true
    
    `AI代码解释
  2. 重启 Kibana 服务:

    go 复制代码
    `sudo systemctl restart kibana.service`AI代码解释
  3. 确认 Kibana 正在运行:

    go 复制代码
    `sudo systemctl status kibana.service`AI代码解释

    如果所有配置均正确,Kibana 将与 Elasticsearch 建立连接并正常启动。

  4. 你也可以查看 Kibana 日志文件,以获取更多详细信息:

    bash 复制代码
    `tail -f /var/log/kibana/kibana.log`AI代码解释

    确认日志文件中包含 Kibana is now available(Kibana 现已可用)消息。

  5. 在浏览器中通过 HTTPS(https://<KIBANA-IP>:5601)访问 Kibana。使用 elastic 用户和安装第一个 Elasticsearch 节点时生成的密码登录。

    注意

    为避免浏览器安全警告并确保正确验证 TLS,客户端浏览器必须信任签发 Kibana 服务器证书的 CA(elastic-stack-http-ca.crt),或包含该 CA 的证书链。

为 Fleet Server 和 Elastic Agent 配置自定义证书

第 1 步:使用自定义 TLS 证书安装 Fleet Server

现在 Kibana 已启动并正常运行,你可以继续安装 Fleet Server,用于管理后续步骤中设置的 Elastic Agent。

有关更多详细信息,请参阅部署本地和自行管理的 Fleet Server 和为自行管理的 Fleet Server 配置 SSL/TLS。

  1. 登录生成 HTTP CA 的主机(即 PKI 主机),使用证书工具为 Fleet Server 生成证书包。在命令中,将 <DNS name> 和 <IP address> 替换为 Fleet Server 主机的名称和 IP 地址:

    css 复制代码
    `
    
    1.  sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --name fleet-server \
    2.    --ca-cert /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt \
    3.    --ca-key /usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.key \
    4.    --dns <DNS name> --ip <IP address> --pem
    
    `AI代码解释

    注意

    本教程中,Fleet Server 与 Kibana、Elasticsearch 的 HTTP 层使用相同的 CA。如果希望为 Fleet Server 证书创建新的 CA,请重复为 Elastic Stack 生成新的 HTTP CA 中的步骤,并指定不同的文件名。

    出现提示时,为输出文件指定一个唯一的名称,例如 fleet-cert-bundle.zip。

  2. 在 Fleet Server 主机上,为证书文件创建目录:

    bash 复制代码
    `sudo mkdir /etc/fleet`AI代码解释
  3. 将生成的归档文件复制到 Fleet Server 主机,并解压到 /etc/fleet/,使证书文件位于以下路径:

    • /etc/fleet/fleet-server.crt
    • /etc/fleet/fleet-server.key
  4. 将 Elasticsearch CA 证书(/usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt)复制到 Fleet Server 主机的 /etc/fleet/ 目录,并将其重命名为 es-ca.crt:

    • /etc/fleet/es-ca.crt

    注意

    本教程使用 Elasticsearch HTTP CA 来生成 Fleet Server 证书。在其他环境中,两者可以使用不同的 CA。

  5. 更新证书文件的权限,确保其可读。在 /etc/fleet 目录中运行:

    bash 复制代码
    `
    
    1.  sudo chmod 640 *.crt
    2.  sudo chmod 640 *.key
    
    `AI代码解释
  6. 证书文件准备就绪后,在 Fleet Server 主机上为安装包创建一个工作目录:

    arduino 复制代码
    `mkdir fleet-install-files`AI代码解释
  7. 进入新建的目录:

    bash 复制代码
    `cd fleet-install-files`AI代码解释
  8. 获取 Fleet Server 主机的 IP 地址(例如,运行 ifconfig)。稍后会用到该地址。

  9. 在浏览器中,打开 Kibana 的 Management → Fleet(管理 → Fleet) ,点击 Add Fleet Server(添加 Fleet Server) ,然后选择 Advanced(高级)选项卡。

  10. 在 Create a policy for Fleet Server (为 Fleet Server 创建策略)步骤中,保留默认的 Fleet Server 策略名称,并保持选中采集系统日志和指标的选项。点击 Create policy(创建策略)。创建策略大约需要一分钟。

  11. 在 Choose a deployment mode for security (选择安全部署模式)步骤中,选择 Production(生产),以便提供你自己的证书。

  12. 在 Add your Fleet Server host(添加 Fleet Server 主机)步骤中:

arduino 复制代码
1.  为 Fleet Server 主机指定名称。
markdown 复制代码
2.  指定 Elastic Agent 连接 Fleet Server 时使用的主机 URL,例如 `https://203.0.113.41:8220`。可以使用之前获取的主机 IP 地址,也可以使用能够解析的 FQDN。有关参考信息,请参阅[默认端口分配](https://www.elastic.co/docs/reference/fleet/add-fleet-server-on-prem#default-port-assignments-on-prem "默认端口分配")。
3.  点击 **Add host(添加主机)**。
  1. 在 Generate a service token(生成服务令牌)步骤中,生成令牌并保存输出。该令牌也会自动填入 Fleet Server 安装命令中。

  2. 在 Install Fleet Server to a centralized host (将 Fleet Server 安装到集中式主机)步骤中,选择 Linux Tar 选项卡,或与你的主机操作系统对应的选项卡。建议使用 TAR/ZIP 软件包,而非 RPM/DEB 系统软件包,因为只有前者支持通过 Fleet 升级 Fleet Server。

  3. 在 Kibana 显示的命令块中,运行前三条准备命令。这些命令会执行以下操作:

arduino 复制代码
1.  从 Elastic 制品仓库下载 Fleet Server 软件包。
markdown 复制代码
2.  解压软件包归档文件。
3.  进入包含安装二进制文件的目录。
  1. 运行 elastic-agent install 命令之前:
javascript 复制代码
1.  将以下文件的路径更新为正确位置:
    
    *   Elasticsearch CA 文件(`es-ca.crt`)
    *   Fleet Server 证书(`fleet-server.crt`)
    *   Fleet Server 私钥(`fleet-server.key`)
2.  更新 `fleet-server-es-ca-trusted-fingerprint`。运行以下命令,从 `es-ca.crt` 获取正确的指纹:
    
    ```
    `grep -v ^- /etc/fleet/es-ca.crt | base64 -d | sha256sum`AI代码解释
    ```
    
    也可以使用:
    
    ```
    `openssl x509 -outform der -in /etc/fleet/es-ca.crt | sha256sum`AI代码解释
    ```
    
    保存指纹值,后续步骤会用到。
    
    将 `fleet-server-es-ca-trusted-fingerprint` 设置的值替换为命令返回的值。更新后的命令应类似如下:
    
    ```
    `
    
    1.  sudo ./elastic-agent install --url=https://203.0.113.41:8220 \
    2.    --fleet-server-es=https://203.0.113.21:9200 \
    3.    --fleet-server-service-token=<token> \
    4.    --fleet-server-policy=fleet-server-policy \
    5.    --fleet-server-es-ca-trusted-fingerprint=<fingerprint> \
    6.    --certificate-authorities=/etc/fleet/es-ca.crt \
    7.    --fleet-server-cert=/etc/fleet/fleet-server.crt \
    8.    --fleet-server-cert-key=/etc/fleet/fleet-server.key \
    9.    --fleet-server-port=8220
    
    `AI代码解释
    ```
    
    *   `--url`:设置为 Elastic Agent 连接 Fleet Server 时使用的 HTTPS 端点,即在 **Add your Fleet Server host**(添加 Fleet Server 主机)步骤中配置的主机和端口,通常使用端口 `8220`。
    *   `--fleet-server-es`:设置为 Elasticsearch 集群的 HTTPS 端点。
    
    有关全部选项,请参阅 [elastic-agent install](https://www.elastic.co/docs/reference/fleet/agent-command-reference#elastic-agent-install-command "elastic-agent install")。
    
  1. 运行 elastic-agent install 命令,安装 Fleet Server。
ruby 复制代码
出现提示时,确认将 Elastic Agent 作为服务运行。安装成功完成后,将显示以下消息:

```
`Elastic Agent has been successfully installed.`AI代码解释
```

> **提示**
> 
> 为什么命令中提到的是 Elastic Agent,而不是 Fleet Server?因为 Fleet Server 实际上是一个子进程,通过专用的 Fleet Server 策略在 Elastic Agent 内部运行。有关更多信息,请参阅 [Fleet Server](https://www.elastic.co/docs/reference/fleet#fleet-server-intro "Fleet Server")。
  1. 在 Kibana 的 Add a Fleet Server(添加 Fleet Server)侧边面板中,等待系统确认 Fleet Server 已连接,然后关闭面板。
arduino 复制代码
现在,Fleet Server 已完成全部设置。
  1. 安装 Elastic Agent 之前,完成以下步骤,在 kibana.yml 配置文件中更新 Elasticsearch CA 指纹:
go 复制代码
> **注意**
> 
> 也可以在 Fleet 界面中进行配置:进入 **Settings → Outputs(设置 → 输出)**,编辑默认输出,并在其中设置 CA 可信指纹。

1.  在 Kibana 主机上停止 Kibana 服务:
    
    ```
    `sudo systemctl stop kibana.service`AI代码解释
    ```
    
2.  打开 `/etc/kibana/kibana.yml` 进行编辑。
    
3.  找到 `xpack.fleet.outputs` 设置。
    
4.  将 `ca_trusted_fingerprint` 更新为之前对 Elasticsearch 的 `es-ca.crt` 文件运行 `grep` 命令时获取的值。
    
    更新后的 `kibana.yml` 条目应类似如下:
    
    ```
    `xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: ["https://203.0.113.21:9200"], ca_trusted_fingerprint: "<之前获取的完整指纹值>"}]`AI代码解释
    ```
    
5.  保存更改。
    
6.  启动 Kibana:
    
    ```
    `sudo systemctl start kibana.service`AI代码解释
    ```
    
    现在,Kibana 已配置正确的指纹,供 Elastic Agent 访问 Elasticsearch 使用。接下来就可以设置 Elastic Agent 了!
    

第 2 步:安装 Elastic Agent

接下来,在另一台主机上安装 Elastic Agent,并使用 System 集成监控系统日志和指标。有关更多详细信息,请参阅为自行管理的 Fleet Server 配置 SSL/TLS。

  1. 登录你计划设置 Elastic Agent 的主机。

  2. 为 Fleet Server CA 证书文件创建目录:

    bash 复制代码
    `sudo mkdir /etc/agent`AI代码解释
  3. 在用于生成证书的主机(即 PKI 主机)上,将签发 Fleet Server 证书的 CA 证书复制到 Agent 主机的 /etc/agent/ 目录,并重命名为 fleet-server-ca.crt:

    • /etc/agent/fleet-server-ca.crt

    注意

    Elastic Agent 需要信任签发 Fleet Server 证书的 CA。本教程中,该 CA 与 Elasticsearch HTTP CA(/usr/share/elasticsearch/pki/http/ca/elastic-stack-http-ca.crt)相同,但在其他环境中,两者可以不同。

    Elastic Agent 也需要信任 Elasticsearch,但这一信任配置会在注册后,通过 Fleet 策略和已配置的 Elasticsearch 输出下发,其中包括之前配置的 CA 指纹。

  4. 为安装包创建一个工作目录:

    arduino 复制代码
    `mkdir agent-install-files`AI代码解释
  5. 进入新建的目录:

    bash 复制代码
    `cd agent-install-files`AI代码解释
  6. 在 Kibana 中,进入 Management → Fleet(管理 → Fleet) 。在 Agents 选项卡中,你应该能看到新的 Fleet Server 策略正在运行,且状态为健康。

  7. 点击 Add agent(添加 Agent) ,指定策略名称(例如 Demo Agent Policy),并保持 Collect system logs and metrics (采集系统日志和指标)选项启用,这会添加 System 集成。点击 Create policy(创建策略)。

  8. 在 Enroll in Fleet? (是否注册到 Fleet?)步骤中,保持选中 Enroll in Fleet(注册到 Fleet)。

  9. 在 Install Elastic Agent on your host (在主机上安装 Elastic Agent)步骤中,选择 Linux Tar 选项卡,或选择与部署主机操作系统匹配的选项卡。

    与 Fleet Server 一样,建议使用 TAR/ZIP 软件包,而非 RPM/DEB 系统软件包,因为只有前者支持通过 Fleet 升级 Elastic Agent。

  10. 在 Elastic Agent 主机的终端中,运行 Kibana 命令块中的前三条准备命令。这些命令会执行以下操作:

markdown 复制代码
1.  从 Elastic 制品仓库下载 Elastic Agent 软件包。
markdown 复制代码
2.  解压软件包归档文件。
3.  进入包含安装二进制文件的目录。
  1. 运行 elastic-agent install 命令之前,进行以下修改:
javascript 复制代码
1.  确认 `--url` 参数中的端口号为 `8220`,这是本地部署的 Fleet Server 的默认端口。
2.  添加 `--certificate-authorities` 参数,指定 CA 证书文件的完整路径,例如 `--certificate-authorities=/etc/agent/fleet-server-ca.crt`。

修改后的命令应类似如下:

```
`

1.  sudo ./elastic-agent install \
2.  --url=https://203.0.113.41:8220 \
3.  --enrollment-token=<token> \
4.  --certificate-authorities=/etc/agent/fleet-server-ca.crt

`AI代码解释
```

确保 `--url` 的值与你之前配置的 Fleet Server URL 一致。
  1. 运行 elastic-agent install 命令。出现提示时,输入 Y。等待 Add agent (添加 Agent)侧边面板显示 Agent 已连接,并且 Confirm incoming data(确认数据传入)步骤完成,然后关闭面板。

现在,新的 Elastic Agent 已安装完成,并已注册到 Fleet Server。

第 3 步:查看系统数据

通过以下验证步骤查看系统数据。

查看系统日志数据:

  1. 打开 Kibana 菜单,进入 Analytics → Dashboard(分析 → 仪表板)。
  2. 在查询框中搜索 Logs System。
  3. 选择 [Logs System] Syslog dashboard 链接。Kibana 仪表板随即打开,展示 Syslog 事件、主机名、进程等信息的可视化。

查看系统指标数据:

  1. 打开 Kibana 菜单,返回 Analytics → Dashboard(分析 → 仪表板)。
  2. 在查询框中搜索 Metrics System。
  3. 选择 [Metrics System] Host overview 链接。Kibana 仪表板随即打开,展示 CPU 使用率、内存使用率、运行中的进程等主机指标的可视化。

恭喜!你已使用自己的受信任 CA 签发的证书,成功为 Elasticsearch、Kibana、Fleet 和 Elastic Agent 配置了安全保护。

后续步骤

现在,你已成功安装本地部署的 Elastic Stack 并完成安全配置,接下来可以了解如何导入数据并开始探索:

  • 已有准备好摄取的数据?了解如何将数据导入 Elastic。
  • 使用 Elastic Observability 统一管理日志、基础设施指标、可用性和应用性能数据。
  • 希望保护端点免受安全威胁?试试 Elastic Security。只需向 Agent 策略再添加一项集成,即可启用端点保护!
相关推荐
Elasticsearch6 小时前
斯坦福《2026 年 AI 指数报告》与金融服务业的安全现实
elasticsearch
Elasticsearch7 小时前
Elasticsearch:安装自行管理的 Elastic Stack 集群
elasticsearch
程序员差不多先生8 小时前
Anthropic 用 5 个月重写了 Git:当 AI Agent 把版本控制系统逼到墙角
人工智能·git·elasticsearch·deepseek v4 pro·kimi k3·glm 5.3·qwen3.7 max
Elastic 中国社区官方博客8 小时前
Jina AI:Elasticsearch 集成
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索·jina
草莓熊Lotso8 小时前
【C++ 基于微服务的即时通讯系统】Elasticsearch 从安装到 C++ 客户端二次封装全落地
linux·网络·数据库·c++·elasticsearch·微服务
.冰块.19 小时前
ELK 日志分析系统实验:部署 Elasticsearch 双节点集群实现 Apache 日志采集与 Kibana 可视化
elk·elasticsearch·apache·日志
顧棟1 天前
Elasticsearch Scroll :分页进度到底记在哪?
大数据·elasticsearch·搜索引擎
一枕槐安4871 天前
线上检索延迟 2 秒,我把向量库从 ES 换成了 Chroma
大数据·elasticsearch·搜索引擎
Rock Chin6971 天前
把 Claude Code 和 Codex 接进微信、飞书、钉钉:LangBot Runner 插件实战
elasticsearch·钉钉·飞书