连接
编辑连接
编辑此页面包含您创建 .NET Elasticsearch 客户端实例以连接到 Elasticsearch 集群所需的信息。
可以通过单个节点或使用节点池指定多个节点来连接到 Elasticsearch 集群。与单个节点相比,使用节点池具有一些优势,例如负载均衡和集群故障转移支持。客户端提供了便捷的配置选项来连接到 Elastic Cloud 部署。
客户端应用程序应该创建一个 ElasticsearchClient
的单一实例,该实例在整个应用程序的生命周期中使用。客户端内部管理并维护与节点的 HTTP 连接,重用它们以优化性能。如果您的应用程序使用依赖注入容器,则客户端实例应注册为单例生命周期。
连接到云部署
编辑Elastic Cloud 是开始使用 Elasticsearch 的最简单方法。当使用 .NET Elasticsearch 客户端连接到 Elastic Cloud 时,您应该始终使用 Cloud ID。您可以在创建集群后在“管理部署”页面中找到此值(如果您在 Kibana 中,请查看左上角)。
我们建议尽可能使用 Cloud ID,因为您的客户端将自动配置为与 Elastic Cloud 进行最佳使用,包括 HTTPS 和 HTTP 压缩。
通过在配置 ElasticsearchClient
实例时提供部署的唯一 Cloud ID,可以实现连接到 Elasticsearch 服务部署。您还需要合适的凭据,即用户名和密码或 API 密钥,应用程序使用该凭据与部署进行身份验证。
作为安全最佳实践,建议为每个应用程序创建一个专用的 API 密钥,其权限仅限于应用程序授权进行的任何 API 调用所需的权限。
以下代码片段演示如何创建一个连接到云中 Elasticsearch 部署的客户端实例。
using Elastic.Clients.Elasticsearch; using Elastic.Transport; var client = new ElasticsearchClient("<CLOUD_ID>", new ApiKey("<API_KEY>"));
连接到单个节点
编辑单节点配置最适合连接到在负载均衡器或反向代理后面运行的多节点集群,该集群通过单个 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);