Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Conectar a um recurso de banco de dados MongoDB de fora do Kubernetes

O procedimento a seguir descreve como se conectar a um recurso do MongoDB distribuído em Kubernetes a partir de fora do cluster de Kubernetes.

Para que seus bancos de dados sejam acessados fora do Kubernetes, eles devem executar o MongoDB 4.2.3 ou posterior.

Se você criar serviços personalizados que exijam acesso externo aos recursos personalizados do MongoDB implantados pelo Kubernetes Operator, e usar testes de prontidão no Kubernetes, defina a configuração publishNotReadyAddresses no Kubernetes como true.

The publishNotReadyAddresses setting indicates that an agent that interacts with endpoints for this service should disregard the service's ready state. Setting publishNotReadyAddresses to true overrides the behavior of the readiness probe configured for the Pod hosting your service.

Por padrão, a configuração publishNotReadyAddresses é definida como false. Nesse caso, quando os Pods que hospedam os recursos personalizados do MongoDB no Operador de Kubernetes perdem a conectividade com o Cloud Manager ou o Ops Manager, os testes de preparação configurados para esses Pods falham. No entanto, quando você define a configuração publishNotReadyAddresses como true:

  • O Kubernetes não desliga o serviço cuja análise de prontidão falha.

  • O Kubernetes considera todos os pontos de extremidade como prontos, mesmo que os testes dos Pods que hospedam os serviços desses pontos de extremidade indiquem que eles não estão prontos.

  • Os recursos personalizados do MongoDB ainda estão disponíveis para operações de leitura e gravação.

O procedimento a seguir orienta você pelo processo de configuração da conectividade externa para sua implementação usando as opções de configuração internas no Operador Kubernetes.

A forma como você se conecta a um recurso do MongoDB que o Operador de Kubernetes distribuiu de fora do cluster do Kubernetes depende do recurso.

Para conectar-se ao standalone do MongoDB implantado pelo operador Kubernetes de fora do cluster do Kubernetes:

1

Se você não tiver implantado um recurso autônomo, siga as instruções para implantar um.

Este procedimento usa o seguinte exemplo:

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 se conectar ao standalone a partir de um recurso externo, configure o spec.externalAccess contexto:

externalAccess: {}

Essa configuração instrui o Kubernetes Operator a criar um serviço externo do LoadBalancer para o pod do MongoDB em seu recurso standalone. O serviço externo fornece um ponto de entrada para conexões externas. Adicionar esta configuração sem valores cria um serviço externo com os seguintes valores-padrão:

Campo
Valor
Descrição

Name

<pod-name>-svc-external

Nome do serviço externo. Não é possível alterar este valor.

Type

LoadBalancer

Cria um serviço LoadBalancer externo.

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.

Como opção, para adicionar valores ao serviço ou substituir os valores padrão, especifique:

Por exemplo, as seguintes configurações substituem os valores padrão do serviço externo para configurar seu standalone para criar serviços NodePort que expõem o 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

Dica

Para saber mais, consulte Anotações e ServiceSpec na documentação do Kubernetes.

3

Em seu recurso independente, execute o seguinte comando para verificar se o Kubernetes Operator criou o serviço externo para sua implantação.

$ kubectl get services

O comando retorna uma lista de serviços semelhantes à seguinte saída. Para cada Pod de banco de dados no cluster, o Operador Kubernetes cria um serviço externo chamado <pod-name>-0-svc-external. Esse serviço é configurado de acordo com os valores e substituições fornecidos na especificação de serviço 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

Dependendo da configuração do cluster ou do provedor de serviços em nuvem, o endereço IP do serviço LoadBalancer é um endereço IP ou FQDN externamente acessível. Você pode usar o endereço IP ou FQDN para rotear o tráfego do seu domínio externo.

4

Para se conectar à sua implantação de fora do cluster do Kubernetes, use o MongoDB Shell (mongosh) e especifique o endereço do MongoDB Pod que você expôs através do domínio externo.

Exemplo

If you have an external FQDN of <my-standalone>.<external-domain>, you can connect to this sharded cluster instance from outside of the Kubernetes cluster by using the following command:

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

Importante

Este procedimento explica a maneira mais simples de habilitar a conectividade externa. Você pode usar outros utilitários na produção.

Para conectar-se ao recurso do conjunto de réplicas do MongoDB implantado pelo operador do Kubernetes de fora do cluster do Kubernetes:

1

Se você não tiver implantado um conjunto de réplicas, siga as instruções para implantar um.

You must enable TLS for the replica set by providing a value for the spec.security.certsSecretPrefix setting. The replica set must use a custom CA certificate stored with spec.security.tls.ca.

2

Para se conectar ao conjunto de réplicas a partir de um recurso externo, configure o spec.externalAccess configuração:

externalAccess: {}

Essa configuração instrui o Kubernetes Operator a criar um serviço externo do LoadBalancer para os pods do MongoDB em seu conjunto de réplicas. O serviço externo fornece um ponto de entrada para conexões externas. Adicionar esta configuração sem valores cria um serviço externo com os seguintes valores-padrão:

Campo
Valor
Descrição

Name

<pod-name>-svc-external

Nome do serviço externo. Não é possível alterar este valor.

Type

LoadBalancer

Cria um serviço LoadBalancer externo.

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.

Como opção, para adicionar valores ao serviço ou substituir os valores padrão, especifique:

Por exemplo, as seguintes configurações substituem os valores padrão do serviço externo para configurar seu conjunto de réplicas para criar serviços NodePort que expõem os pods 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

Dica

Para saber mais, consulte Anotações e ServiceSpec na documentação do Kubernetes.

3

Adicione cada nome de DNS externo ao certificado SAN .

4

Em seu conjunto de réplicas, execute o seguinte comando para verificar se o Kubernetes Operator criou o serviço externo para sua implantação.

$ kubectl get services

O comando retorna uma lista de serviços semelhantes à seguinte saída. Para cada Pod de banco de dados de dados no cluster, o Operador Kubernetes cria um serviço externo chamado <pod-name>-<pod-idx>-svc-external. Esse serviço é configurado de acordo com os valores e substituições fornecidos na especificação de serviço 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

Dependendo da configuração do cluster ou do provedor de serviços em nuvem, o endereço IP do serviço LoadBalancer é um endereço IP ou FQDN externamente acessível. Você pode usar o endereço IP ou FQDN para rotear o tráfego do seu domínio externo.

5
6

Altere as configurações desse arquivo YAML para corresponder à configuração desejada do definir .

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

Open your preferred text editor and paste the object specification at the end of your resource file in the spec section.

8
Chave
Tipo
necessidade
Descrição
Exemplo

spec.connectivity
.replicaSetHorizons

collection

Condicional

Adicione esse parâmetro e valores se precisar que seu banco de dados seja acessado fora do Kubernetes. Essa configuração permite fornecer diferentes configurações de DNS dentro do cluster do Kubernetes e para o cluster do Kubernetes. O Operador Kubernetes utiliza o DNS de horizonte dividido para membros do conjunto de réplica. Este recurso permite comunicação dentro do cluster Kubernetes e de fora do Kubernetes.

Você pode adicionar diversos mapeamentos externos por host.

Requisitos de horizonte dividido

  • Certifique-se de que cada valor nesta array é único.

  • Certifique-se de que o número de entradas nesta array corresponda ao valor fornecido em spec.members.

  • Forneça um valor para a configuração spec.security.certsSecretPrefix para habilitar o TLS. Este método para usar horizontes divididos requer a extensão Server Name Indication do protocolo TLS .

spec.security
certsSecretPrefix

string

Obrigatório

Adicione o <prefix> do nome secreto que contém os certificados TLS da implantação do MongoDB.

devDb

9

Confirme se os nomes de host externos na configuração spec.connectivity.replicaSetHorizons estão corretos.

Os nomes de host externos devem corresponder aos nomes DNS dos nós de trabalho do Kubernetes. Podem ser quaisquer nós do cluster Kubernetes. Os nós do Kubernetes usarão roteamento interno se o pod for executado em outro nó.

Configure as portas no spec.connectivity.replicaSetHorizons para os valores de serviço externo.

Exemplo

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...
11

Em qualquer diretório, invoque o seguinte comando do Kubernetes para atualizar e reiniciar seu conjunto de réplicas:

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

No ambiente de desenvolvimento, para cada host em um conjunto de réplicas, execute o seguinte comando:

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

Observação

Não use o sinalizador --sslAllowInvalidCertificates em produção.

Na produção, para cada host em um conjunto de réplicas, especifique o certificado TLS e o CA para se conectar com segurança às ferramentas ou aplicativos do cliente:

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

Se a conexão for bem-sucedida, você deverá ver:

Enterprise <my-replica-set> [primary]

Para conectar-se ao Kubernetes MongoDB recurso de cluster fragmentado do implantado pelo operador de fora do Kubernetes cluster :

1

Se você não tiver implementado um cluster fragmentado, siga as instruções para implantar um.

Você deve habilitar o TLS para o cluster fragmentado definindo as seguintes configurações:

Chave
Tipo
necessidade
Descrição
Exemplo

spec.security
.certsSecretPrefix

string

Obrigatório

Adicione o <prefix> do nome secreto que contém os certificados TLS da implantação do MongoDB.

devDb

collection

Opcional

List of every domain that should be added to TLS certificates to each pod in this deployment. When you set this parameter, every CSR that the Kubernetes Operator transforms into a TLS certificate includes a SAN in the form <pod name>.<additional cert domain>.

example.com

2

Para se conectar ao cluster fragmentado a partir de um recurso externo, configure o spec.externalAccess configuração:

externalAccess: {}

This setting instructs the Kubernetes Operator to create an external LoadBalancer service for the mongos Pods in your sharded cluster. The external service provides an entry point for external connections. Adding this setting with no values creates an external service with the following default values:

Campo
Valor
Descrição

Name

<pod-name>-svc-external

Nome do serviço externo. Não é possível alterar este valor.

Type

LoadBalancer

Cria um serviço LoadBalancer externo.

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.

Como opção, para adicionar valores ao serviço ou substituir os valores padrão, especifique:

For example, the following settings override the default values for the external service to configure your sharded cluster to create NodePort services that expose the 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

Dica

Para saber mais, consulte Anotações e ServiceSpec na documentação do Kubernetes.

3

Adicione cada nome de DNS externo ao certificado SAN .

Cada host MongoDB usa os seguintes SANs :

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

The mongos instance uses the following SAN:

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

Configure the spec.security.tls.additionalCertificateDomains setting similar to the following example. Each TLS certificate that you use must include the corresponding SAN for the shard, config server, or mongos instance. The Kubernetes Operator validates your configuration.

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

Em seu cluster fragmentado, execute o seguinte comando para verificar se o Kubernetes Operator criou os serviços externos para sua implantação.

$ kubectl get services

O comando retorna uma lista de serviços semelhantes à seguinte saída. Para cada instância do mongos no cluster, o Operador do Kubernetes cria um serviço externo denominado <pod-name>-<pod-idx>-svc-external. Esse serviço é configurado de acordo com os valores e substituições fornecidos na especificação de serviço 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

Depending on your cluster configuration or cloud provider, the IP address of the LoadBalancer service is an externally accessible IP address or FQDN. You can use the IP address or FQDN to route traffic from your external domain. This example has two mongos instances, therefore the Kubernetes Operator creates two external services.

5

Para se conectar à sua implantação de fora do cluster do Kubernetes, use o MongoDB Shell (mongosh) e especifique os endereços das instâncias mongos que você expôs através do domínio externo.

Exemplo

Se você tiver FQDN externo de <my-sharded-cluster>-mongos-0-svc-external.<external-domain> e <my-sharded-cluster>-mongos-1-svc-external.<external-domain> endereçoCommand: mongodb://<my-sharded-cluster>-mongos-0-svc-external.,<external-domain> <my-sharded-cluster>-mongos-1-svc-external.,<external-domain> você pode se conectar a esta instância de cluster fragmentado de fora do cluster Kubernetes usando o seguinte comando:

mongosh ""