您可以在Kubernetes集群中部署MongoDB Search 和 Vector Search,直接在应用程序中构建强大的搜索体验。使用MongoDB Search 和 Vector Search,您可以构建传统的文本搜索和AI支持的向量搜索功能,这些功能可自动与本地部署MongoDB 数据库同步。这样一来,在提供高级搜索功能的同时,就无需保持不同的系统同步。要学习;了解详情,请参阅:
要在本地部署中启用全文和语义搜索等搜索功能,必须部署MongoDB搜索和向量搜索进程(mongot),并将其与MongoDB 数据库部署(mongod) 连接。部署 mongot 是可选的,仅当您计划利用其提供的搜索功能时才需要部署。
MongoDB数据库进程 (mongod) 充当 mongot 的所有搜索查询的代理。mongod 将查询转发到 mongot,由其处理该查询。mongot 将查询结果返回给 mongod,然后将结果转发给您。您从不直接与 mongot交互。
每个 mongot进程都有自己的持久卷,不与数据库或其他搜索节点共享。存储用于维护根据持续源自数据库的数据构建的索引。索引定义(元数据)存储在数据库中。
mongot 执行以下操作:
管理索引。
mongot负责更新数据库中的索引定义。从数据库中获取数据。
mongot节点与数据库建立永久连接,以便实时更新数据库中的索引。处理搜索查询。
When
mongodreceives a$search,$searchMeta, or$vectorSearchquery, it directs the query to one of themongotnodes. Themongotthat receives the query processes the query, aggregates the data, and returns the results tomongod, which it forwards to the user.
mongot 组件与单个MongoDB副本集紧密耦合,不能在多个数据库或副本集之间共享。这意味着副本集部署有自己的专用搜索节点。
mongot 和 mongod 之间的网络连接是双向的:
mongot建立与副本集的连接,以获取用于构建索引和运行查询的数据。mongod连接到mongot以转发搜索相关操作,例如索引管理和查询数据。
MongoDB Search 和 Vector Search 部署
有或没有Kubernetes Operator 的搜索部署架构没有太大区别。Kubernetes Operator 简化了部署功能齐全的搜索节点所需的步骤,尤其是当数据库也由Kubernetes Operator托管时。
要部署,请应用MongoDBSearch 自定义资源 (CR), Kubernetes 操作符 会选择该资源并开始部署 mongot Pod,并请求 spec 中指定的持久存储。使用Kubernetes Operator部署的MongoDB Search和向量搜索可以针对Kubernetes Operator在同一Kubernetes集群内或完全独立的外部MongoDB数据库中部署的MongoDB副本集。要学习;了解如何部署和配置 mongot 以使用:
Kubernetes中的MongoDB副本集,详见使用MongoDB Community Edition安装和使用或使用MongoDB Enterprise Edition安装和使用搜索
先决条件
为了在以下环境中利用 MongoDB 搜索和向量搜索:
MongoDB Community部署,您必须使用Kubernetes 操作符在Kubernetes集群内部署功能齐全的MongoDB 8.2+副本集。
MongoDB Enterprise部署,您必须通过以下方式之一部署功能齐全的MongoDB 8.2+副本集:
使用Kubernetes Operator 在Kubernetes集群内部
Kubernetes集群外部
Cloud Manager或MongoDB Ops Manager实例
开始之前,请考虑以下事项:
配置任务
下表显示了Kubernetes Operator 自动执行的配置任务,以及要在Kubernetes中成功部署MongoDB Search 和 Vector Search,以及连接到Kubernetes中的MongoDB副本集或外部MongoDB副本集必须采取的操作。
任务 | (在 Kubernetes 内) 执行者 | (外部 MongoDB) 执行者 |
|---|---|---|
Deploy Ops Manager inside Kubernetes | Kubernetes Operator | Kubernetes Operator |
在Kubernetes外部部署Cloud Manager或MongoDB Ops Manager | 您 | 您 |
部署MongoDB副本集 | Kubernetes Operator | 您 |
创建 MongoDBSearch 自定义资源 | 您 | 您 |
为MongoDB副本集提供连接字符串 | Kubernetes Operator | 您 |
创建 | Kubernetes Operator | Kubernetes Operator |
在每个 | Kubernetes Operator | 您 |
为 | Kubernetes Operator 和您通过应用 MongoDBUser资源 | 您 |
使用具有查询搜索所需权限的用户配置MongoDB副本集 | 您 | 您 |
创建MongoDB Search 和 Vector Search 索引 | 您 | 您 |
向外部公开搜索Pod,以便从每个 | 没有必要 | 您 |
向外部公开mongod Pod,以便从 | 没有必要 | 您 |
安全性
下图说明了 mongot进程的安全配置。如果MongoDB服务器位于Kubernetes集群内部,Kubernetes Operator 会自动为MongoDB 搜索和向量搜索设置密钥文件身份验证。如果MongoDB服务器位于外部,则必须创建一个包含副本集凭证的kubernetes secret,并在 MongoDBSearch CR 中引用它。

身份验证
mongot进程使用 mTLS 对 mongod 连接进行身份验证。启用TLS后,mongot进程将使用MongoDB服务器的TLS证书作为客户端证书进行身份验证。此证书根据配置 mongot 的 CA 证书进行验证。为了使身份验证正常工作,您必须在启用 TLS 的情况下配置 mongot 和 mongod。
当配置为索引同一 Kubernetes 集群中的 MongoDB 资源时,Kubernetes 操作符会自动将 mongod CA 证书传播到 mongot,并为搜索查询连接启用 mTLS(如果 MongoDB 和 MongoDBSearch 资源都配置了 TLS)。如果MongoDB副本集部署在Kubernetes外部,则必须创建一个包含副本集 CA 证书的kubernetes secret,并在 MongoDBSearch.spec.source.external.tls.ca字段中引用它,以便为搜索查询请求启用mTLS身份验证。
传输层安全
MongoDBSearch 可以使用 TLS 保护传输过程中的数据和凭证。对于索引管理命令和搜索查询,指定(即使是空对象,{})spec.security.tls 字段,并在 spec.security.tls.certificateKeySecretRef 字段的 Kubernetes Secret 中提供 TLS 证书。这个 TLS 证书必须由颁发MongoDB副本集使用的 CA 证书的同一 CA 颁发和签名。
当 MongoDBSearch 和 MongoDB 都由 Kubernetes 操作符 部署时,根本的 mongot 和 mongod 配置主要由 Kubernetes 操作符 本身处理。当MongoDB副本集部署在Kubernetes之外时,.spec.source.external.tls字段必须使用包含与配置 mongod 相同的 CA 证书的kubernetes secret来填充,并且 mongod 配置本身必须将 searchTLSMode 参数设立为requireTLS。



