Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Conéctese a un recurso de base de datos MongoDB desde fuera de Kubernetes

El siguiente procedimiento describe cómo conectarse a un recurso MongoDB desplegado en Kubernetes desde fuera del clúster de Kubernetes.

Para que tus bases de datos sean accesibles fuera de Kubernetes, deben ejecutar MongoDB 4.2.3 o una versión posterior.

Si creas servicios personalizados que requieren acceso externo a recursos personalizados de MongoDB implementados por el operador de Kubernetes y usas readiness probes en Kubernetes, configura el ajuste publishNotReadyAddresses en Kubernetes a true.

La publishNotReadyAddresses configuración indica que un agente que interactúa con los puntos finales de este servicio debe ignorar el estado de disponibilidad del servicio. Al establecer publishNotReadyAddresses en, se true anula el comportamiento de la sonda de disponibilidad configurada para el Pod que aloja su servicio.

Por defecto, la configuración publishNotReadyAddresses está establecida en false. En este caso, cuando los Pods que alojan los recursos personalizados de MongoDB en Kubernetes Operator pierden conectividad con Cloud Manager u Ops Manager, las pruebas de disponibilidad configuradas para estos Pods fallan. Sin embargo, cuando se define el ajuste publishNotReadyAddresses a true:

  • Kubernetes no apaga el servicio cuya prueba de preparación falla.

  • Kubernetes considera que todos los endpoints están listos incluso si las pruebas de los Pods que alojan los servicios para estos endpoints indican que no están listos.

  • Los recursos personalizados de MongoDB aún están disponibles para operaciones de lectura y escritura.

Tip

El siguiente procedimiento te guía a través del proceso de configuración de la conectividad externa para tu implementación utilizando las opciones de configuración incorporadas en el Operador de Kubernetes.

La forma en que se conecta a un recurso de MongoDB que el operador de Kubernetes implementó fuera del clúster de Kubernetes depende del recurso.

Para conectarse a su recurso MongoDB autónomo implementado por el Operador de Kubernetes desde fuera del clúster de Kubernetes:

1

Si no has implementado un recurso autónomo, sigue las instrucciones para implementar uno.

Este procedimiento utiliza el siguiente ejemplo:

20---
21apiVersion: mongodb.com/v1
22kind: MongoDB
23metadata:
24 name: <my-standalone>
25spec:
26 version: "8.0.0"
27 opsManager:
28 configMapRef:
29 name: <configMap.metadata.name>
30 # Must match metadata.name in ConfigMap file
31 credentials: <mycredentials>
32 type: Standalone
33...
2

Para conectarse a su recurso autónomo desde un recurso externo, configure el spec.externalAccess entorno:

externalAccess: {}

Esta configuración instruye al operador de Kubernetes para que cree un servicio externo LoadBalancer para el Pod de MongoDB en su recurso autónomo. El servicio externo proporciona un punto de entrada para las conexiones externas. Agregar esta configuración sin valores crea un servicio externo con los siguientes valores por defecto:

Campo
Valor
Descripción

Name

<pod-name>-svc-external

Nombre del Servicio externo. No puedes cambiar este valor.

Type

LoadBalancer

Crea un servicio externo LoadBalancer.

Port

<Port Number>

A port for mongod.

publishNotReadyAddress

true

Specifies that DNS records are created even if the Pod isn't ready. Do not set to false for any database Pod.

Opcionalmente, si necesitas agregar valores al servicio o sobrescribir los valores por defecto, especifica:

Por ejemplo, los siguientes ajustes anulan los valores por defecto para el servicio externo para configurar su recurso autónomo para crear servicios NodePort que exponen el pod MongoDB:

externalAccess:
externalService:
annotations:
# cloud-specific annotations for the service
spec:
type: NodePort # default is LoadBalancer
port: 27017
# you can specify other spec overrides if necessary

Tip

Para obtener más información, consulta anotaciones y ServiceSpec en la documentación de Kubernetes.

3

En tu recurso autónomo, ejecuta el siguiente comando para verificar que el Operador de Kubernetes haya creado el servicio externo para tu implementación.

$ kubectl get services

El comando devuelve una lista de servicios similar a la salida siguiente. Para cada pod de base de datos en el clúster, el Operador de Kubernetes crea un servicio externo llamado <pod-name>-0-svc-external. Este servicio está configurado según los valores y sobrescrituras que usted proporcione en la especificación del servicio externo.

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
<my-standalone>-0-svc-external LoadBalancer 10.102.27.116 <lb-ip-or-fqdn> 27017:27017/TCP 8m30s

Dependiendo de la configuración de su clúster o proveedor de nube, la dirección IP del servicio LoadBalancer es una dirección IP accesible externamente o FQDN. Puedes utilizar la dirección IP o FQDN para enrutar el tráfico desde tu dominio externo.

4

Para conectarte a tu implementación desde fuera del clúster de Kubernetes, utiliza MongoDB Shell (mongosh) y especifica la dirección del Pod de MongoDB que has expuesto a través del dominio externo.

Ejemplo

Si tiene un FQDN externo de <my-standalone>.<external-domain>, puede conectarse a esta instancia de clúster particionado desde fuera del clúster de Kubernetes usando el siguiente comando:

mongosh "mongodb://<my-standalone>.<external-domain>"

Importante

Este procedimiento explica la forma más sencilla de habilitar la conectividad externa. Puede utilizar otras utilidades en la producción.

Para conectarte a tu recurso de set de réplicas de MongoDB implementado por Kubernetes operador desde fuera del clúster de Kubernetes:

1

Si no has implementado un set de réplicas, sigue las instrucciones para implementar uno.

Debe habilitar TLS para el set de réplicas proporcionando un valor para la configuración spec.security.certsSecretPrefix. El set de réplicas debe usar un certificado CA personalizado almacenado con spec.security.tls.ca.

2

Para conectarse a su set de réplicas desde un recurso externo, configure el spec.externalAccess escenario:

externalAccess: {}

Esta configuración le indica al operador de Kubernetes que cree un servicio externo LoadBalancer para los Pods de MongoDB en su set de réplicas. El servicio externo proporciona un punto de entrada para conexiones externas. Agregar esta configuración sin valores crea un servicio externo con los siguientes valores por defecto:

Campo
Valor
Descripción

Name

<pod-name>-svc-external

Nombre del Servicio externo. No puedes cambiar este valor.

Type

LoadBalancer

Crea un servicio externo LoadBalancer.

Port

<Port Number>

A port for mongod.

publishNotReadyAddress

true

Specifies that DNS records are created even if the Pod isn't ready. Do not set to false for any database Pod.

Opcionalmente, si necesitas agregar valores al servicio o sobrescribir los valores por defecto, especifica:

Por ejemplo, los siguientes parámetros anulan los valores predeterminados del servicio externo para configurar tu set de réplicas para crear Servicios NodePort que expongan los pods de MongoDB:

externalAccess:
externalService:
annotations:
# cloud-specific annotations for the service
spec:
type: NodePort # default is LoadBalancer
port: 27017
# you can specify other spec overrides if necessary

Tip

Para obtener más información, consulta anotaciones y ServiceSpec en la documentación de Kubernetes.

3

Agrega cada nombre externo de DNS al SAN del certificado.

4

En tu set de réplicas, ejecuta el siguiente comando para verificar que el operador de Kubernetes creó el servicio externo para tu implementación.

$ kubectl get services

El comando devuelve una lista de servicios similar a la siguiente salida. Para cada pod de base de datos en el clúster, el Operador de Kubernetes crea un servicio externo llamado <pod-name>-<pod-idx>-svc-external. Este servicio se configura según los valores y las anulaciones que proporciones en la especificación del servicio externo.

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
<my-replica-set>-0-svc-external LoadBalancer 10.102.27.116 <lb-ip-or-fqdn> 27017:27017/TCP 8m30s

Dependiendo de la configuración de su clúster o proveedor de nube, la dirección IP del servicio LoadBalancer es una dirección IP accesible externamente o FQDN. Puedes utilizar la dirección IP o FQDN para enrutar el tráfico desde tu dominio externo.

5
6

Cambia los ajustes de este archivo YAML para que coincidan con la configuración de set de réplicas deseada.

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-replica-set>
6spec:
7 members: 3
8 version: "8.0.0"
9 type: ReplicaSet
10 opsManager:
11 configMapRef:
12 name: <configMap.metadata.name>
13 credentials: <mycredentials>
14 persistent: true
15 security:
16 tls:
17 enabled: true
18 connectivity:
19 replicaSetHorizons:
20 - "example-website": "web1.example.com:30907"
21 - "example-website": "web2.example.com:32350"
22 - "example-website": "web3.example.com:31185"
23...
7

Abra su editor de texto preferido y pegue la especificación del objeto al final de su archivo de recursos en la spec sección.

8
Clave
Tipo
Necesidad
Descripción
Ejemplo

spec.connectivity
.replicaSetHorizons

Colección

Condicional

Agregue este parámetro y valores si necesita que se pueda acceder a su base de datos fuera de Kubernetes. Esta configuración le permite proporcionar diferentes configuraciones de DNS dentro del clúster de Kubernetes y al clúster de Kubernetes. El operador de Kubernetes utiliza DNS de horizonte dividido para los miembros del set de réplicas. Esta funcionalidad permite la comunicación tanto dentro del clúster de Kubernetes como desde fuera de Kubernetes.

Puede agregar varios mapeos externos por host.

Requisitos de horizonte dividido

  • Asegúrese de que cada valor en este arreglo sea único.

  • Asegúrate de que el número de entradas en este arreglo coincida con el valor indicado en spec.members.

  • Proporcione un valor para la configuración de spec.security.certsSecretPrefix para habilitar TLS. Este método para usar horizontes de división requiere la extensión de Indicador de Nombre de Servidor del protocolo TLS.

spec.security
certsSecretPrefix

string

Requerido

Agrega el <prefix> del nombre secreto que contiene los certificados TLS de tu implementación de MongoDB.

devDb

9

Confirma que los nombres de host externos en la configuración spec.connectivity.replicaSetHorizons sean correctos.

Los nombres de host externos deben coincidir con los nombres DNS de los nodos de trabajo de Kubernetes. Estos pueden ser cualquier nodo en el clúster de Kubernetes. Los nodos de Kubernetes utilizan el enrutamiento interno si el pod se ejecuta en otro nodo.

Configura los puertos en spec.connectivity.replicaSetHorizons con los valores del servicio externo.

Ejemplo

15 security:
16 tls:
17 enabled: true
18 connectivity:
19 replicaSetHorizons:
20 - "example-website": "web1.example.com:30907"
21 - "example-website": "web2.example.com:32350"
22 - "example-website": "web3.example.com:31185"
23...
10
11

En cualquier directorio, ejecuta el siguiente comando de Kubernetes para actualizar y reiniciar tu set de réplicas:

kubectl apply -f <replica-set-conf>.yaml
12

En el entorno de desarrollo, en cada host de un set de réplicas, ejecuta el siguiente comando:

mongosh --host <my-replica-set>/web1.example.com \
--port 30907
--ssl \
--sslAllowInvalidCertificates

Nota

No utilices la bandera --sslAllowInvalidCertificates en producción.

En producción, para cada host de un set de réplicas, especifica el certificado TLS y la CA para conectar de manera segura a herramientas de clientes o aplicaciones:

mongosh --host <my-replica-set>/web1.example.com \
--port 30907 \
--tls \
--tlsCertificateKeyFile server.pem \
--tlsCAFile ca-pem

Si la conexión es exitosa, deberías ver:

Enterprise <my-replica-set> [primary]

Para conectarte a tu recurso de clúster fragmentado de MongoDB implementado por Kubernetes operador desde fuera del clúster de Kubernetes:

1

Si no ha implementado un clúster, siga las instrucciones para implementar uno.

Debe habilitar TLS para el clúster particionado configurando los siguientes ajustes:

Clave
Tipo
Necesidad
Descripción
Ejemplo

spec.security
.certsSecretPrefix

string

Requerido

Agrega el <prefix> del nombre secreto que contiene los certificados TLS de tu implementación de MongoDB.

devDb

Colección

Opcional

Lista de todos los dominios que se deben agregar a los certificados TLS de cada pod en esta implementación. Cuando configura este parámetro, cada CSR que el Operador de Kubernetes transforma en un certificado TLS incluye un SAN en la forma <pod name>.<additional cert domain>.

example.com

2

Para conectarte a tu clúster segmentado desde un recurso externo, configura el spec.externoAcceso escenario:

externalAccess: {}

Esta configuración indica al operador de Kubernetes que cree un servicio LoadBalancer externo para los mongos Pods de su clúster fragmentado. El servicio externo proporciona un punto de entrada para las conexiones externas. Si se agrega esta configuración sin valores, se crea un servicio externo con los siguientes valores predeterminados:

Campo
Valor
Descripción

Name

<pod-name>-svc-external

Nombre del Servicio externo. No puedes cambiar este valor.

Type

LoadBalancer

Crea un servicio externo LoadBalancer.

Port

<Port Number>

A port for mongod.

publishNotReadyAddress

true

Specifies that DNS records are created even if the Pod isn't ready. Do not set to false for any database Pod.

Opcionalmente, si necesitas agregar valores al servicio o sobrescribir los valores por defecto, especifica:

Por ejemplo, la siguiente configuración anula los valores predeterminados del servicio externo para configurar su clúster fragmentado para crear servicios NodePort que expongan los mongos Pods:

externalAccess:
externalService:
annotations:
# cloud-specific annotations for the service
spec:
type: NodePort # default is LoadBalancer
port: 27017
# you can specify other spec overrides if necessary

Tip

Para obtener más información, consulta anotaciones y ServiceSpec en la documentación de Kubernetes.

3

Agrega cada nombre externo de DNS al SAN del certificado.

Cada host de MongoDB utiliza las siguientes SAN:

<my-sharded-cluster>-<shard>-<pod-index>.<external-domain>
<my-sharded-cluster>-config-<pod-index>.<external-domain>
<my-sharded-cluster>-mongos-<pod-index>.<external-domain>

La instancia de mongos utiliza el siguiente SAN:

<my-sharded-cluster>-mongos-<pod-index>-svc-external.<external-domain>

Establezca la configuración de spec.security.tls.additionalCertificateDomains similar al ejemplo siguiente. Cada certificado TLS que utilice debe incluir el SAN correspondiente para la partición, el servidor de configuración o la instancia mongos. El operador de Kubernetes valida la configuración.

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-sharded-cluster>
6spec:
7 version: "8.0.0"
8 opsManager:
9 configMapRef:
10 name: <configMap.metadata.name>
11 # Must match metadata.name in ConfigMap file
12 shardCount: 2
13 mongodsPerShardCount: 3
14 mongosCount: 2
15 configServerCount: 3
16 credentials: my-secret
17 type: ShardedCluster
18 externalAccess: {}
19 security:
20 tls:
21 certsSecretPrefix: <prefix>
22 additionalCertificateDomains:
23 - "<external-domain>"
24...
4

En su clúster, ejecute el siguiente comando para verificar que el Operador de Kubernetes haya creado los servicios externos para su implementación.

$ kubectl get services

El comando devuelve una lista de servicios similar a la salida siguiente. Para cada instancia de mongos en el clúster, el operador de Kubernetes crea un servicio externo llamado <pod-name>-<pod-idx>-svc-external. Este servicio está configurado de acuerdo con los valores y las anulaciones que proporciones en la especificación de servicio externo.

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
<my-sharded-cluster>-mongos-0-svc-external LoadBalancer 10.102.27.116 <lb-ip-or-fqdn> 27017:27017/TCP 8m30s
<my-sharded-cluster>-mongos-1-svc-external LoadBalancer 10.102.27.116 <lb-ip-or-fqdn> 27017:27017/TCP 8m30s

Dependiendo de la configuración de tu clúster o proveedor de nube, la dirección IP del servicio LoadBalancer es una dirección IP accesible externamente o FQDN. Puedes utilizar la dirección IP o el FQDN para enrutar el tráfico desde tu dominio externo. Este ejemplo tiene dos instancias mongos, por lo tanto, el Kubernetes operador crea dos servicios externos.

5

Para conectarse a su implementación desde fuera del clúster de Kubernetes, use el MongoDB Shell (mongosh) y especifique las direcciones de las instancias mongos que haya expuesto a través del dominio externo.

Ejemplo

Si tiene el FQDN externo de <my-sharded-cluster>-mongos-0-svc-external.<external-domain> y <my-sharded-cluster>-mongos-1-svc-external.<external-domain> addressCommand: mongodb://<my-sharded-cluster>-mongos-0-svc-external.<external-domain>,<my-sharded-cluster>-mongos-1-svc-external.<external-domain>, puede conectarse a esta instancia de clúster particionado desde fuera del clúster de Kubernetes utilizando el siguiente comando:

mongosh ""