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 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.
Dica
Kubernetes API Reference and search for
publishNotReadyAddresses
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: "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 ...
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 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 |
|---|---|---|
|
| Nome do serviço externo. Não é possível alterar este valor. |
|
| Cria um serviço LoadBalancer externo. |
|
| A port for |
|
| Specifies that DNS records are created even if the Pod isn't ready. Do not set to |
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.annotationsSubstitui 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 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.
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 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.
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
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:
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.
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.
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: {}
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 |
|---|---|---|
|
| Nome do serviço externo. Não é possível alterar este valor. |
|
| Cria um serviço LoadBalancer externo. |
|
| A port for |
|
| Specifies that DNS records are created even if the Pod isn't ready. Do not set to |
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.annotationsSubstitui 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 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.
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: "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 ...
Cole a seção de exemplo copiada no recurso de conjunto de réplicas existente.
Open your preferred text editor and paste the object specification at the end of your resource file in the spec section.
Altere as configurações destacadas para seus valores preferidos.
Chave | Tipo | necessidade | Descrição | Exemplo |
|---|---|---|---|---|
| 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
| |
| string | Obrigatório | Adicione o |
|
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 a implantação 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 definindo as seguintes configurações:
Chave | Tipo | necessidade | Descrição | Exemplo |
|---|---|---|---|---|
| string | Obrigatório | Adicione o |
|
| 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 |
|
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: {}
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 |
|---|---|---|
|
| Nome do serviço externo. Não é possível alterar este valor. |
|
| Cria um serviço LoadBalancer externo. |
|
| A port for |
|
| Specifies that DNS records are created even if the Pod isn't ready. Do not set to |
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.annotationsSubstitui a especificação de serviço, em
spec.externalAccess.externalService.spec.
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.
Adicione nomes alternativos de assunto aos seus TLS certificados.
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 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-sharded-cluster> 6 spec: 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 ...
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
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.
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 esta instância de cluster fragmentado de fora do cluster Kubernetes usando o seguinte comando:
mongosh ""