Conectar a um recurso de banco de dados MongoDB de fora do Kubernetes
Nesta página
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.
Pré-requisitos
Versões do MongoDB compatíveis
Para que seus bancos de dados sejam acessados fora do Kubernetes, eles devem executar o MongoDB 4.2.3 ou posterior.
Considerações
Configurar substituições do teste de preparação
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.
Procedimento
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:
Implemente um recurso independente com o Operador Kubernetes.
Se você não tiver implantado um recurso autônomo , siga as instruções para implantar um.
Este procedimento usa o seguinte exemplo:
20 21 apiVersion: mongodb.com/v1 22 kind: MongoDB 23 metadata: 24 name: <my-standalone> 25 spec: 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 ...
Crie um serviço externo para o MongoDB Pod.
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:
Anotações específicas para seu provedor de nuvem, em
spec.externalAccess.externalService.annotations
Substitui a especificação de serviço, em
spec.externalAccess.externalService.spec
.
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.
Verifique os serviços externos.
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.
Teste a conexão com o recurso independente.
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:
Implemente um conjunto de réplicas com o Operador Kubernetes.
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
.
Crie um serviço externo para os Pods MongoDB.
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:
Anotações específicas para seu provedor de nuvem, em
spec.externalAccess.externalService.annotations
Substitui a especificação de serviço, em
spec.externalAccess.externalService.spec
.
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.
Verifique os serviços externos.
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.
Copie o recurso definir de exemplo.
Altere as configurações desse arquivo YAML para corresponder à configuração desejada do definir .
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-replica-set> 6 spec: 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 ...
Cole a seção de exemplo copiada no recurso de conjunto de réplicas existente.
Abra seu editor de texto preferido e cole o objeto especificação no final do seu arquivo de recurso na spec
seção .
Altere as configurações destacadas para seus valores preferidos.
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
| |
spec.security | string | Obrigatório | Adicione o <prefix> do nome secreto que contém os certificados TLS da implantação do MongoDB. | devDb |
Confirme os nomes de host externos e valores de serviço externo no recurso de conjunto de réplicas.
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 ...
Salve o arquivo de configuração do conjunto de réplicas.
Atualize e reinicie o sistema do conjunto de réplicas.
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
Teste a conexão com o conjunto de réplicas.
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 :
Implemente um cluster fragmentado com o Kubernetes Operator.
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 |
spec.security.tls | 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 |
Crie um serviço externo para os mongos
Pods do.
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:
Anotações específicas para seu provedor de nuvem, em
spec.externalAccess.externalService.annotations
Substitui a especificação de serviço, em
spec.externalAccess.externalService.spec
.
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.
Adicione nomes alternativos de assunto aos seus certificados TLS.
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 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-sharded-cluster> 6 spec: 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 ...
Verifique os serviços externos.
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.
Teste a conexão com o cluster fragmentado.
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 ""