Menu Docs
Página inicial do Docs
/
Operador de Kubernetes do MongoDB Enterprise
/ /

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

Nesta página

  • Pré-requisitos
  • Considerações
  • Procedimento

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 implementados pelo Kubernetes Operator e usar testes de prontidão no Kubernetes, defina a configuração publishNotReadyAddresses no Kubernetes como true.

A publishNotReadyAddresses configuração indica que um agente que interage com endpoints para este serviço deve desconsiderar o estadopronto do serviço. A definição de publishNotReadyAddresses como true substitui o comportamento do teste de preparação configurado para o Pod que hospeda seu serviço.

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 endpoints como prontos, mesmo que os testes dos Pods que hospedam os serviços desses endpoints 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.

Dica

Veja também:

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: "4.2.2-ent"
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 autônoma. 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>

Uma porta para o mongod.

publishNotReadyAddress

true

Especifica que os registros DNS são criados mesmo que o Pod não esteja pronto. Não defina como false para nenhum pod de banco de dados.

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 autônomo 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 nuvem, o endereço IP do serviço LoadBalancer é um endereço IP acessível externamente ou FQDN. 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

Se você tiver um FQDN externo de <my-standalone>.<external-domain>, poderá se conectar a essa instância de cluster fragmentado de fora do cluster Kubernetes usando o seguinte comando:

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.

Você deve habilitar o TLS para o conjunto de réplicas fornecendo um valor para a configuração spec.security.certsSecretPrefix . O conjunto de réplicas deve usar um certificado de CA personalizado armazenado com 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: {}

Esta configuração instrui o Operador do Kubernetes a criar um LoadBalancer externo serviço para os Pods 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>

Uma porta para o mongod.

publishNotReadyAddress

true

Especifica que os registros DNS são criados mesmo que o Pod não esteja pronto. Não defina como false para nenhum pod de banco de dados.

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 fornecedor 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: "4.2.2-ent"
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 seu editor de texto preferido e cole o objeto especificação no final do seu arquivo de recurso na spec seção .

8
Chave
Tipo
necessidade
Descrição
Exemplo
spec.connectivity

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 usa o DNS de horizonte dividido para membros do conjunto de réplica. Esse recurso permite uma comunicação dentro do cluster do 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 do spec.security.certsSecretPrefix para habilitar o TLS. Este método para usar horizontes divisão requer a extensão Server Name Indication do protocolo TLS .

spec.security

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 as seguintes configurações:

Chave
Tipo
necessidade
Descrição
Exemplo
spec.security

string

Obrigatório

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

devDb

collection

Opcional

Lista de todos os domínios que devem ser adicionados aos certificados TLS para cada pod neste sistema. Ao definir este parâmetro, cada CSR que o Kubernetes Operator transforma em um certificado TLS inclui um SAN no formato <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: {}

Esta configuração instrui o Operador do Kubernetes a criar um LoadBalancer externo serviço para os mongos Pods em seu cluster fragmentado. 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>

Uma porta para o mongod.

publishNotReadyAddress

true

Especifica que os registros DNS são criados mesmo que o Pod não esteja pronto. Não defina como false para nenhum pod de banco de dados.

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 cluster fragmentado para criar serviços NodePort que expõem os 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>

A instância do mongos utiliza o seguinte SAN:

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

Defina a configuração spec.security.tls.additionalCertificateDomains semelhante ao exemplo a seguir. Cada certificado TLS que você utiliza deve incluir o SAN correspondente para o shard, servidor de configuração ou instância mongos . O operador Kubernetes valida sua configuração.

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-sharded-cluster>
6spec:
7 version: "4.2.2-ent"
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

Dependendo da configuração do cluster ou do provedor de 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. Este exemplo tem duas instâncias mongos , portanto o Operador Kubernetes cria dois serviços externos.

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 essa instância de cluster fragmentado de fora do cluster Kubernetes usando o seguinte comando:

mongosh ""

Voltar

Inside Kubernetes