Docs Menu
Docs Home
/
MongoDB Controllers for Kubernetes Operator

Deploy MongoDB Search and Vector Search

You can deploy MongoDB Search and Vector Search in your Kubernetes cluster to build powerful search experiences directly within your applications. Using MongoDB Search and Vector Search, you can build both traditional text search and AI-powered vector search capabilities that automatically sync with an on-premises MongoDB database. This eliminates the need to maintain separate systems in sync while providing advanced search features. To learn more, see:

To enable the search capabilities such as full-text and semantic search in on-prem deployments, you must deploy the MongoDB Search and Vector Search process (mongot) and connect it with your MongoDB database deployment (mongod). Deployment of mongot is optional and is needed only if you plan to leverage the search features it offers.

The MongoDB Database processes (mongod) acts as the proxy for all search queries for mongot. The mongod forwards the query to mongot, which processes the query. The mongot returns the query results to the mongod, which then forwards the results to you. You never interact directly with the mongot.

Each mongot process has its own persistent volume that is not shared with the database or other search nodes. Storage is used to maintain indexes that are built from the data continuously sourced from the database. The index definitions (metadata) are stored in the database itself.

The mongot performs the following actions:

  • Manages the index.

    The mongot is responsible for updating the index definitions in the database.

  • Sources the data from the database.

    The mongot nodes establish permanent connections to the database in order to update indexes from the database in real time.

  • Processes search queries.

    When mongod receives a $search, $searchMeta, or $vectorSearch query, it directs the query to one of the mongot nodes. The mongot that receives the query processes the query, aggregates the data, and returns the results to mongod, which it forwards to the user.

The mongot components are tightly coupled with a single MongoDB replica set and cannot be shared across multiple databases or replica sets. That means a replica set deployment has its own dedicated search nodes.

Network connectivity between mongot and mongod goes in both directions:

  • mongot establishes connection to the replica set to source the data used to build indexes and run queries.

  • mongod connects to mongot to forward search related operations such as index management and querying the data.

There are not many differences between the search deployment architecture with or without the Kubernetes Operator. The Kubernetes Operator simplifies the steps required to deploy fully functioning search nodes, especially when the database is also managed by the Kubernetes Operator.

To deploy, you apply the MongoDBSearch Custom Resource (CR), which the Kubernetes Operator picks up and starts deploying mongot pods and requests persistent storage specified in the spec. The MongoDB Search and Vector Search deployed using the Kubernetes Operator can target MongoDB replica set deployed by the Kubernetes Operator inside the same Kubernetes cluster or a completely independent external MongoDB database. To learn how to deploy and configure mongot to use:

  • A MongoDB replica set in Kubernetes, see Install and Use Search With MongoDB Enterprise Edition

  • An external MongoDB replica set, see Install and Use MongoDB Search and Vector Search With External MongoDB Enterprise Edition.

In order to leverage MongoDB Search and Vector Search in your MongoDB Enterprise deployment, you must have the following:

  • Fully functional MongoDB 8.0.10+ replica set deployed in one of the following ways:

    • Inside a Kubernetes cluster using the Kubernetes Operator

    • Outside a Kubernetes cluster

  • Cloud Manager or Ops Manager Instance

The following table shows the configuration tasks that the Kubernetes Operator automatically performs and the actions that you must take to successfully deploy MongoDB Search and Vector Search in Kubernetes and connect to a MongoDB replica set in Kubernetes or an external MongoDB replica set.

Task
(Inside Kubernetes)
Performed by
(External MongoDB)
Performed by

Deploy Ops Manager inside Kubernetes

Kubernetes Operator

Kubernetes Operator

Deploy Cloud Manager or Ops Manager outside Kubernetes

You

You

Deploy MongoDB replica set

Kubernetes Operator

You

Create MongoDBSearch custom resource

You

You

Provide connection string to MongoDB replica set

Kubernetes Operator

You

Create mongot configuration YAML

Kubernetes Operator

Kubernetes Operator

Set necessary replica set parameters in each mongod process

Kubernetes Operator

You

Polyfill searchCoordinator role in MongoDB version less than 8.2

Kubernetes Operator

You

Create user for mongot with searchCoordinator role

Kubernetes Operator and you by applying MongoDBUser resource

You

Configure MongoDB replica set with a user that has necessary permissions to query search

You

You

Create MongoDB Search and Vector Search indexes

You

You

Expose search pods externally for connecting from each mongod node

Not necessary

You

Expose mongod pods externally for connecting from mongot nodes

Not necessary

You

The following image illustrates the security configuration for the mongot process. If the MongoDB server is inside of the Kubernetes cluster, the Kubernetes Operator automatically sets up keyfile authentication for MongoDB Search and Vector Search. If the MongoDB server is external, you must create a Kubernetes Secret containing the replica set's keyfile credential and reference it in the MongoDBSearch CR.

Diagram showing the keyfile authentication and TLS configuration for search.
click to enlarge

When connecting to mongod, mongot authenticates itself as a database user. When deploying MongoDB Search and Vector Search, you must create the database user. You must pass the user credentials stored in a Kubernetes Secret to mongot by populating the spec.source.username and spec.source.passwordSecretRef fields in the MongoDBSearch CR.

When accepting a connection from mongod, the mongot authenticates the remote request using internal authentication with keyfiles, similar to the MongoDB replica set member internal authentication. When configured to index a MongoDB resource on the same Kubernetes cluster, the Kubernetes Operator automatically sets up keyfile authentication for MongoDBSearch. If the MongoDB replica set is deployed outside Kubernetes, you must create a Kubernetes Secret containing the replica set's keyfile credential and reference it in the MongoDBSearch.spec.source.external.keyfileSecretRef field.

MongoDBSearch can protect data and credentials in transit using TLS. For index management commands and search queries, specify (even an empty object, {}) spec.security.tls field and provide a TLS certificate in a Kubernetes Secret in the spec.security.tls.certificateKeySecretRef field. This TLS certificate must be issued and signed by the same CA that issued the CA certificate that the MongoDB replica set uses.

When both MongoDBSearch and MongoDB are deployed by the Kubernetes Operator, the underlying mongot and mongod configuration is largely handled by the Kubernetes Operator itself. When the MongoDB replica set is deployed outside of Kubernetes, the .spec.source.external.tls field must be populated with a Kubernetes Secret containing the same CA certificate mongod is configured with, and mongod configuration itself must have the searchTLSMode parameter set to requireTLS.

On this page