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

Configurar armazenamento secreto

Nesta página

  • Ferramentas de armazenamento secretos suportadas
  • Segredos que você pode armazenar
  • Limitações
  • Definir a Ferramenta de Armazenamento Secreto
  • Próximos passos

Você pode escolher a ferramenta de armazenamento secreta para o Kubernetes Operator. A ferramenta de armazenamento secreta é um local seguro para armazenar informações confidenciais para os componentes que o Kubernetes Operator managed. Isso inclui segredos para reconhecimento de data center MongoDB, Ops Manager e AppDB.

Depois de configurar o armazenamento secreto, o Kubernetes Operator acessa a ferramenta, recupera os segredos e os usa para estabelecer conexões com segurança.

O Kubernetes Operator oferece suporte às seguintes ferramentas de armazenamento secreto:

  • Kubernetes: armazene informações confidenciais como segredos (o armazenamento secreto embutido para Kubernetes). Segredos do Kubernetes armazenar credenciais de autenticação para que apenas os Kubernetes possam acessá-las.

  • HashiCorp Vault: armazene informações confidenciais no Vault, um serviço de terceiros para gerenciamento secreto.

Você pode usar qualquer ferramenta de armazenamento de segredos compatível para qualquer segredo na documentação do MongoDB Enterprise Kubernetes Operator, exceto aqueles listados nas limitações.

Importante

Após a configuração, o Kubernetes Operator usa sua ferramenta de armazenamento de segredos selecionada para todos os segredos, exceto aqueles listados nas limitações. Você não pode misturar e combinar ferramentas de armazenamento secreto.

Existem as seguintes limitações para as ferramentas de armazenamento de segredos suportadas:

  • Alguns registros, como o OpenShift, exigem imagemPullSecrets para extrair imagens do repositório. O operador do Kubernetes não pode fornecer imagemPullSecrets do HashiCorp Vault. Você pode especificar um fornecedor de credenciais de imagem do Kubelet para recuperar credenciais de um registro de imagem de contêiner usando o Kubernetes.

Para definir a ferramenta de armazenamento secreto, selecione uma das seguintes opções:

Todos os tutoriais nesta documentação do MongoDB Enterprise Kubernetes Operator usam segredos do Kubernetes por padrão. Para usar segredos do Kubernetes para armazenar segredos para o Operador Kubernetes, prossiga com a instalação do Operador Kubernetes e siga as etapas nos tutoriais.

Para usar o HashiCorp Vault para armazenar segredos para o Operador Kubernetes, conclua o procedimento a seguir.

Antes de começar, você deve:

  • Configure uma instância do Vault. O cluster Kubernetes em que o Operador Kubernetes está sendo executado deve ter acesso à instância do Vault.

    Observação

    Certifique-se de que o Vault não esteja em execução no modo de desenvolvimento e que a instalação do Vault segue todas as recomendações de configuração aplicáveis.

  • Habilitar autenticação do Kubernetes para a instância do Vault. Isso permite que você autentique com o Vault.

  • Implante o injetor de sidecar do Vault Agent no cluster Kubernetes. Isso permite que você injete segredos do Vault em seus Pods Kubernetes.

  • Baixe os quatro arquivos de políticas do Vault para o Kubernetes Operator, banco de banco deMongoDB dados , MongoDB Ops Manager e AppDB.

  • Criar um papel no Vault com o nome mongodbenterprise. A configuração de segredos no Operador Kubernetes depende da presença deste papel e seu nome exato.

1

Escreva as políticas para os Kubernetes Operator, MongoDB database, MongoDB Ops Manager e AppDB no Vault usando o comando a seguir, substituindo as variáveis pelos valores na tabela:

Espaço reservado
Descrição
{PolicyName}
Rótulo legível por humanos que identifica a política que você está criando no Vault.
{PathToPolicyFile}
O caminho absoluto para o arquivo de política que você baixou.
vault policy write {PolicyName} {PathToPolicyFile}

Repita o comando para todos os recursos que você está adicionando ao Vault.

2

Vincule os roles do Vault às políticas para o Kubernetes Operator, MongoDB database, MongoDB Ops Manager e AppDB usando os quatro comandos a seguir, substituindo as variáveis pelos valores na tabela:

Espaço reservado
Descrição
{OperatorPolicyName}
Um rótulo legível por humanos que identifica a política do Kubernetes Operator no Vault.
{DatabasePolicyName}
Um rótulo legível por humanos que identifica a política de MongoDB database no Vault.
{OpsManagerPolicyName}
Um etiqueta legível por humanos que identifica a política do MongoDB Ops Manager no Vault.
{AppDBPolicyName}
Um etiqueta legível por humanos que identifica a política do AppDB no Vault.
{ServiceAccountNamespace}
Etiqueta que identifica o namespace da conta de serviço vinculada ao seu pod.
vault write auth/kubernetes/role/{OperatorPolicyName}
bound_service_account_names=enterprise-operator bound_service_account_namespaces={ServiceAccountNamespace}
vault write auth/kubernetes/role/{DatabasePolicyName}
bound_service_account_names=mongodb-enterprise-database-pods bound_service_account_namespaces={ServiceAccountNamespace}
vault write auth/kubernetes/role/{OpsManagerPolicyName}
bound_service_account_names=mongodb-enterprise-ops-manager bound_service_account_namespaces={ServiceAccountNamespace}
vault write auth/kubernetes/role/{AppDBPolicyName}
bound_service_account_names=mongodb-enterprise-appdb bound_service_account_namespaces={ServiceAccountNamespace}

Esses comandos garantem que os pods de cada componente tenham somente o acesso especificado em sua política.

Observação

Esta etapa concede ao Operador do Kubernetes acesso ao Vault. Para usar o Vault com aplicativos que o operador Kubernetes não gerencia, você deve gravar e vincular políticas do Vault para esses aplicativos.

Você pode adaptar os comandos nesta etapa para vincular outras políticas substituindo o nome das contas de serviço. Para configurar outros aplicativos para usar o Vault, substitua {ServiceAccountName} no seguinte comando pela conta de serviço usada para o pod do aplicativo:

vault write auth/kubernetes/role/{PolicyName}
bound_service_account_names={ServiceAccountName} bound_service_account_namespaces={ServiceAccountNamespace}
3

Antes de executar os comandos nesta etapa, certifique-se de ter criado uma função no Vault com o nome mongodbenterprise.

Adicione as seguintes linhas realçadas à seção spec.template.metadata.annotations do seu arquivo de sistema do Kubernetes Operator. Para a maioria dos usuários, o nome desse arquivo é mongodb-enterprise.yaml ou mongodb-enterprise-openshift.yaml.

Observação

Se você instalou o Operador Kubernetes usando o Helm e definiu operator.vaultSecretBackend.enabled como true, o Operador Kubernetes adicionará as seguintes anotações. Você pode prosseguir para a próxima etapa.

apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-enterprise-operator
namespace: production
spec:
replicas: 1
template:
metadata:
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "mongodbenterprise"

Se você estiver executando o Vault no modoTLS e especificou o valor operator.vaultSecretBackend.tlsSecretRef , o Kubernetes Operator adicionará as seguintes anotações. Caso contrário, adicione a seguinte linha destacada ao arquivo, substituindo {TLSSecret} pelo nome do segredo contendo uma entrada ca.crt . O conteúdo da entrada ca.crt deve corresponder ao certificado da CA usada para gerar os certificados Vault TLS.

annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "mongodbenterprise"
vault.hashicorp.com/tls-secret: {TLSSecret}
vault.hashicorp.com/ca-cert: /vault/tls/ca.crt
4

Adicione as seguintes linhas realçadas à seção spec.env do seu arquivo de sistema do Kubernetes Operator. Para a maioria dos usuários, o nome desse arquivo é mongodb-enterprise.yaml ou mongodb-enterprise-openshift.yaml.

apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-enterprise-operator
namespace: production
spec:
env:
- name: OPERATOR_ENV
value: ENVIRONMENT_NAME
- name: SECRET_BACKEND
value: VAULT_BACKEND

Isso define a variável de ambiente para Vault no Kubernetes.

5

Usando seu aplicação de edição de texto preferido, crie um arquivo chamado config. Cole o seguinte texto no arquivo:

apiVersion: v1
kind: ConfigMap
metadata:
name: secret-configuration
namespace: {Namespace}
data:
VAULT_SERVER_ADDRESS: {VaultServerAddress}
OPERATOR_SECRET_BASE_PATH: mongodbenterprise/operator
DATABASE_SECRET_BASE_PATH: mongodbenterprise/database
OPS_MANAGER_SECRET_BASE_PATH: mongodbenterprise/opsmanager
APPDB_SECRET_BASE_PATH: mongodbenterprise/appdb

Os caminhos neste arquivo são os caminhos padrão. Você pode substituí-los por seus caminhos de base se tiver personalizado a configuração do Kubernetes Operator.

Se estiver executando o Vault no modo TLS , você também deverá adicionar a seguinte linha destacada ao arquivo:

OPS_MANAGER_SECRET_BASE_PATH: mongodbenterprise/opsmanager
APPDB_SECRET_BASE_PATH: mongodbenterprise/appdb
TLS_SECRET_REF: {TLSSecret}
6

Substitua os espaços reservados no arquivo config por estes valores. Salve o arquivo por um tipo de arquivo YAML substituindo a extensão de arquivo .txt por .yaml.

Espaço reservado
Descrição
{Namespace}
O namespace que você criou para o Operador Kubernetes. O namespace padrão é mongodb.
{VaultServerAddress}
O endereço que o Kubernetes Operator deve usar para se conectar ao Vault.
{TLSSecret}
Nome de um segredo contendo uma entrada ca.crt . O conteúdo da entrada ca.crt deve corresponder ao certificado da CA usada para gerar os certificados Vault TLS.
7

Emitir o seguinte comando para criar um ConfigMap contendo as informações do Vault:

kubectl create configmap secret-configuration --from-file=config.yaml

Isso cria um ConfigMap denominado secret-configuration. Este ConfigMap contém o conteúdo do config arquivo .

8

Você deve migrar manualmente os seguintes segredos para armazená-los no Vault:

Para migrar ou criar manualmente novos segredos, adicione-os ao Vault. Depois de adicioná-los ao Vault, você poderá removê-los do Kubernetes.

Todos os outros segredos que o Kubernetes Operator cria migram automaticamente, e o Kubernetes Operator usa o Vault para novos segredos. Os segredos criados pelo usuário devem ser adicionados ao Vault.

Observação

o cert-manager recria automaticamente os segredos do Kubernetes que ele gera se você excluí-los do Kubernetes. Você deve gerenciar manualmente a remoção desses segredos ou parar de usar o cert-manager para evitar o armazenamento dos segredos no Kubernetes.

Depois de configurar a ferramenta de armazenamento secreto para o MongoDB Enterprise Kubernetes Operator, você pode:

Voltar

Habilitar autenticação