连接编辑

此页面包含创建连接到 Elasticsearch 集群的 .NET 客户端实例所需的信息。

可以通过单个节点连接到 Elasticsearch 集群,也可以使用节点池指定多个节点。与单个节点相比,使用节点池具有一些优势,例如负载均衡和集群故障转移支持。客户端提供了方便的配置选项来连接到 Elastic Cloud 部署。

客户端应用程序应创建一个 ElasticsearchClient 的实例,并在整个应用程序生命周期中使用该实例。客户端在内部管理和维护与节点的 HTTP 连接,并重用它们以优化性能。如果您在应用程序中使用依赖注入容器,则应使用单例生命周期注册客户端实例。

连接到云部署编辑

Elastic Cloud 是开始使用 Elasticsearch 的最简单方法。使用 .NET Elasticsearch 客户端连接到 Elastic Cloud 时,应始终使用云 ID。您可以在创建集群后在“管理部署”页面中找到此值(如果您在 Kibana 中,请查看左上角)。

我们建议尽可能使用云 ID,因为您的客户端将自动配置为与 Elastic Cloud 最佳使用,包括 HTTPS 和 HTTP 压缩。

通过在配置 ElasticsearchClient 实例时提供部署的唯一云 ID,可以连接到 Elasticsearch Service 部署。您还需要合适的凭据,即应用程序用于向部署进行身份验证的用户名和密码或 API 密钥。

作为安全最佳实践,建议为每个应用程序创建一个专用 API 密钥,其权限仅限于应用程序授权进行的任何 API 调用所需的权限。

以下代码段演示了如何创建连接到云中 Elasticsearch 部署的客户端实例。

using Elastic.Clients.Elasticsearch;
using Elastic.Transport;

var client = new ElasticsearchClient("<CLOUD_ID>", new ApiKey("<API_KEY>")); 

将上面的占位符字符串值替换为您的云 ID 和为您的应用程序配置的 API 密钥,以访问您的部署。

连接到单个节点编辑

单节点配置最适合连接到运行在负载均衡器或反向代理后面的多节点集群,该集群通过单个 URL 公开。在本地应用程序开发期间使用单个节点也可能很方便。如果 URL 表示单个 Elasticsearch 节点,请注意,如果服务器不可达或无响应,则这不会提供任何弹性。

默认情况下,Elasticsearch 集群上启用了身份验证和 TLS 等安全功能。首次启动 Elasticsearch 时,将自动为 HTTP 层配置 TLS。将生成 CA 证书并将其存储在磁盘上,用于对 Elasticsearch 集群的 HTTP 层的证书进行签名。

为了使客户端能够通过 HTTPS 与集群建立连接,客户端应用程序必须信任 CA 证书。最简单的选择是使用 CA 证书的十六进制编码 SHA-256 指纹。首次启动 Elasticsearch 时,CA 指纹会输出到终端。您将在 Elasticsearch 的输出中看到一个类似于下面的独特块(如果已经有一段时间了,您可能需要向上滚动)

----------------------------------------------------------------
-> Elasticsearch security features have been automatically configured!
-> Authentication is enabled and cluster connections are encrypted.

->  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  lhQpLELkjkrawaBoaz0Q

->  HTTP CA certificate SHA-256 fingerprint:
  a52dd93511e8c6045e21f16654b77c9ee0f34aea26d9f40320b531c474676228
...
----------------------------------------------------------------

记下 elastic 用户密码和 HTTP CA 指纹,以供下一节使用。

也可以使用以下命令随时从正在运行的集群中检索 CA 指纹

openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt

该命令返回安全证书,包括指纹。issuer 应为 Elasticsearch security auto-configuration HTTP CA

issuer= /CN=Elasticsearch security auto-configuration HTTP CA
SHA256 Fingerprint=<FINGERPRINT>

有关更多信息,请访问 自动启用安全性的情况下启动 Elastic Stack 文档。

以下代码段显示了如何使用 CA 指纹创建通过单个节点连接到 Elasticsearch 集群的客户端实例

using Elastic.Clients.Elasticsearch;
using Elastic.Transport;

var settings = new ElasticsearchClientSettings(new Uri("https://127.0.0.1:9200"))
    .CertificateFingerprint("<FINGERPRINT>")
    .Authentication(new BasicAuthentication("<USERNAME>", "<PASSWORD>"));

var client = new ElasticsearchClient(settings);

前面的代码段演示了如何通过使用基本身份验证提供用户名和密码来配置客户端以进行身份验证。如果愿意,您也可以使用云连接示例中所示的 ApiKey 身份验证。

使用节点池连接到多个节点编辑

为了提供弹性,您应该为集群配置多个节点,客户端将尝试与之通信。默认情况下,客户端以循环方式为每个请求循环访问节点。客户端还会跟踪不健康的节点,并避免向它们发送请求,直到它们变得健康为止。

此配置最适合连接到已知的规模较小的集群,在该集群中,您不需要嗅探来检测集群拓扑。

以下代码段显示了如何使用静态节点池连接到多个节点

using Elastic.Clients.Elasticsearch;
using Elastic.Transport;

var nodes = new Uri[]
{
	new Uri("https://myserver1:9200"),
	new Uri("https://myserver2:9200"),
	new Uri("https://myserver3:9200")
};

var pool = new StaticNodePool(nodes);

var settings = new ElasticsearchClientSettings(pool)
    .CertificateFingerprint("<FINGERPRINT>")
    .Authentication(new ApiKey("<API_KEY>"));

var client = new ElasticsearchClient(settings);