Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

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 use 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. For a replica set deployment, one group of dedicated search nodes serve the replica set. For a sharded cluster, each shard maintains its own independent group of mongot nodes. Shards do not share mongot instances.

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.

The spec.replicas field controls how many mongot instances the Kubernetes Operator deploys. For a replica set source, spec.replicas sets the total number of mongot pods. For a sharded cluster source, spec.replicas sets the number of mongot pods per shard.

If you set spec.replicas to a value greater than 1, you must place an L7 load balancer between mongod and the mongot pods. The mongod process opens a single long-lived TCP connection to mongot, so an L4 load balancer cannot distribute queries across multiple mongot instances — all traffic flows over that one connection. An L7 load balancer understands HTTP/2 and gRPC, which allows it to distribute individual gRPC streams across mongot pods while pinning each stream to a single mongot for the duration of the query cursor.

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. MongoDB Search and Vector Search deployed through the Kubernetes Operator can target a MongoDB replica set or sharded cluster deployed by the Kubernetes Operator inside the same Kubernetes cluster, or a completely independent external MongoDB deployment (replica set or sharded cluster). To learn how to deploy and configure mongot to use:

  • A MongoDB replica set in Kubernetes, see Install and use With MongoDB Community Edition or 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.

To use MongoDB Search and Vector Search in your:

  • MongoDB Community deployment, you must have a fully functional MongoDB 8.2 or later replica set or sharded cluster deployed inside a Kubernetes cluster using the Kubernetes Operator.

  • MongoDB Enterprise deployment, you must have a fully functional MongoDB 8.2 or later replica set or sharded cluster 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

Before you begin, consider the following:

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 or sharded cluster in Kubernetes or an external MongoDB deployment.

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 or sharded cluster

Kubernetes Operator

You

Create MongoDBSearch custom resource

You

You

Provide connection string to MongoDB deployment

Kubernetes Operator

You

Create mongot configuration YAML

Kubernetes Operator

Kubernetes Operator

Set necessary replica set parameters in each mongod process

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 or load balancer externally for connecting from each mongod node

Not necessary

You

Expose mongod pods externally for connecting from mongot nodes

Not necessary

You

Configure managed load balancer (when spec.replicas is greater than 1)

Kubernetes Operator

Kubernetes Operator

Configure unmanaged load balancer (when spec.replicas is greater than 1)

You

You

Provision per-shard TLS certificates (sharded clusters with TLS)

You

You

Expose load balancer externally (External MongoDB + Managed LB)

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

The mongot process authenticates mongod connections using mTLS. When you enable TLS, the mongot process uses the MongoDB server's TLS certificate as the client certificate for authentication. This certificate is verified against the CA certificate that mongot is configured with. For authentication to work properly, you must configure both mongot and mongod with TLS enabled.

When configured to index a MongoDB resource within the same Kubernetes cluster, the Kubernetes Operator automatically propagates the mongod CA certificate to mongot and enables mTLS for search query connections if both the MongoDB and MongoDBSearch resources are configured for TLS. If the MongoDB replica set is deployed outside Kubernetes, you must create a Kubernetes Secret containing the replica set's CA certificate and reference it in the MongoDBSearch.spec.source.external.tls.ca field to enable mTLS authentication for search query requests.

MongoDBSearch can protect data and credentials in transit using TLS. For index management commands and search queries, set the spec.security.tls field and provide a TLS certificate. You can set this field to an empty object ({}) to enable TLS with default settings.

Deprecated since version 1.8.0: spec.security.tls.certificateKeySecretRef is deprecated. For replica set deployments, the Kubernetes Operator still supports certificateKeySecretRef, but you should migrate to spec.security.tls.certsSecretPrefix. For sharded cluster deployments, you cannot use certificateKeySecretRef because the Kubernetes Operator reads a separate mongot server certificate secret for each shard.

spec.security.tls.certsSecretPrefix is an optional field. When you specify it, the Kubernetes Operator prepends <certsSecretPrefix>- to all certificate secret names it reads. The Kubernetes Operator reads the following certificate secrets:

Cluster Topology
mongot Certificate

Replica set

[<certsSecretPrefix>-]<name>-search-cert

Sharded cluster

[<certsSecretPrefix>-]<name>-search-0-<shardName>-cert (per shard)

If you set spec.loadBalancer.managed, the load balancer client certificate is [<certsSecretPrefix>-]<name>-search-lb-0-client-cert. The following table shows the load balancer server certificates:

Cluster Topology
Certificate

Replica set

[<certsSecretPrefix>-]<name>-search-lb-0-cert

Sharded cluster

[<certsSecretPrefix>-]<name>-search-lb-0-<shardName>-cert

The 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. If you deploy the MongoDB replica set outside the Kubernetes cluster:

  • .spec.source.external.tls field must be populated with a Kubernetes Secret containing the same CA certificate that you used to configure the mongod.

  • searchTLSMode parameter must be set to requireTLS in the mongod configuration.

Without a load balancer, mongod connects directly to mongot using mTLS. The mongod presents its own client certificate, and mongot validates it against a trusted CA.

If you configure a managed load balancer (spec.loadBalancer.managed), the Envoy proxy terminates the mTLS connection from mongod and establishes a new mTLS connection to mongot. Because the load balancer terminates and re-establishes the connection, it uses its own client certificate when connecting to mongot, not the original mongod certificate. The mongot CA must trust the certificate authority that issued the load balancer's client certificate. The Kubernetes Operator manages the Envoy TLS configuration automatically. It requires the following certificates:

  • Server certificate for the Envoy proxy, which mongod connects to. The load balancer uses this certificate to terminate the incoming mTLS connection.

  • Client certificate for the Envoy proxy, which the load balancer presents to mongot when establishing the upstream mTLS connection.

Provision these certificates as Kubernetes Secrets following the naming convention that spec.security.tls.certsSecretPrefix defines. See MongoDB Search and Vector Search Settings for the full naming pattern.

On this page