Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Controladores MongoDB para operador Kubernetes
/

Configurar uma integração docert-manager

cert-manager simplifica e automatiza o gerenciamento de certificados de segurança para o Kubernetes. O procedimento seguinte descreve como configurar o cert-manager para gerar certificados para recursos do MongoDB Kubernetes Operator.

Para implementar um conjunto de réplicas usando um objeto, você deve:

  • Ter ou criar uma instância do Ops Manager ou uma organização do Cloud Manager.

  • Ter ou instalar os Controladores MongoDB para Operador Kubernetes.

  • Criar ou gerar um Kubernetes Operator ConfigMap.

  • Criar credenciais para o Operador Kubernetes ou configurar uma ferramenta de armazenamento de segredos diferente.

Observação

Para evitar o armazenamento de segredos em sistemas do Kubernetes de cluster único, você pode migrar todos os segredos para uma ferramenta de armazenamento secreta. As implantações em vários clusters do Kubernetes não oferecem suporte ao armazenamento de segredos em ferramentas de armazenamento de segredos, como o HashiCorp Vault.

  • Gere um certificadoTLS para cada um dos seguintes componentes:

    • Seu conjunto de réplicas. Certifique-se de adicionar SANspara cada pod Kubernetes que hospeda um membro do seu conjunto de réplicas no certificado.

      No certificado TLS , a SAN para cada pod deve usar o seguinte formato:

      <pod-name>.<metadata.name>-svc.<namespace>.svc.cluster.local

      Importante

      Se você estiver usando um provedor de serviços baseado em ACME , como Vamos Criptografar para emitir certificados TLS , o fornecedor pode proibi-lo de adicionar o FQDNs padrão do Pod (*.svc.cluster.local) ao SANs no certificado.

      Para usar um certificado baseado em ACME, você deve configurar o certificado para o recurso do conjunto de réplicas. Para saber mais, consulte a etapa sobre certificados TLS baseados em ACME no procedimento.

    • O MongoDB Agent do seu projeto. Para o certificado do MongoDB Agent, certifique-se de atender aos seguintes requisitos:

      • O nome comum no certificado TLS não está vazio.

      • A Organização e a Unidade Organizacional combinadas em cada certificado TLS diferem da Organização e da Unidade Organizacional no certificado TLS para os membros do conjunto de réplicas.

  • Você deve ter o arquivo de certificado da CA e nomeá-lo ca-pem.

  • Você deve ter a chave usada para assinar seus certificados TLS .

Importante

O operador do Kubernetes usa kubernetes.io/tls segredos para armazenar certificados TLS e chaves privadas para recursos do MongoDB Ops Manager e MongoDB . A partir da versão 1 do operador Kubernetes .17.0, o Operador Kubernetes não suporta arquivos PEM concatenados armazenados como segredos Opaco.

Para implementar um conjunto de réplicas usando um objeto, você deve:

Observação

Para evitar o armazenamento de segredos em sistemas do Kubernetes de cluster único, você pode migrar todos os segredos para uma ferramenta de armazenamento secreta. As implantações em vários clusters do Kubernetes não oferecem suporte ao armazenamento de segredos em ferramentas de armazenamento de segredos, como o HashiCorp Vault.

1

Observação

As etapas a seguir pressupõem que você já tenha criado uma CA personalizada junto com a chave privada tls.key correspondente e o certificado assinado tls.crt .

Crie um segredo para armazenar seus dados de CA :

apiVersion: v1
kind: Secret
metadata:
name: ca-key-pair
namespace: <namespace>
data:
tls.crt: <your-CA-certificate>
tls.key: <your-CA-private-key>
2

Se o MongoDB Ops Manager certificado TLS for assinado por uma CA personalizada , o certificado CA também deverá conter certificados adicionais que permitam MongoDB Ops Manager ao Backup Daemon do baixar MongoDB binários do da Internet. Para criar o(s) certificado(s)TLS , crie um ConfigMap para manter o certificado CA :

Importante

O Kubernetes Operator exige que seu certificado do Ops Manager seja denominado mms-ca.crt no ConfigMap.

  1. Obtenha toda a cadeia de certificados TLS para o Ops Manager em downloads.mongodb.com. O comando openssl a seguir gera o certificado na cadeia para o seu diretório de trabalho atual, no formato .crt :

    openssl s_client -showcerts -verify 2 \
    -connect downloads.mongodb.com:443 -servername downloads.mongodb.com < /dev/null \
    | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".crt"; print >out}'
  2. Concatene o arquivo de certificado da CA para o Ops Manager com toda a cadeia de certificados TLS da downloads.mongodb.com que você obteve na etapa anterior:

    cat <custom_ca_cert.pem> cert2.crt cert3.crt cert4.crt >> mms-ca.crt

    Observação

    • Substitua o espaço reservado <custom_ca_cert.pem> pelo seu arquivo PEM de certificado de CA personalizado.

    • Não inclua seu arquivo cert1.crt, pois é o certificado do servidor do MongoDB que não deve ser incluído.

  3. Criar o ConfigMap para MongoDB Ops Manager:

    kubectl create configmap om-http-cert-ca --from-file="mms-ca.crt"
3
  1. Crie um emissor de CA que faça referência ao seu segredo de CA :

    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
    name: ca-issuer
    namespace: <namespace>
    spec:
    ca:
    secretName: ca-key-pair
  2. Verifique se o emissor está pronto:

    kubectl get issuer ca-issuer

    O campo READY na saída deve ter um valor de True.

4

Crie um ConfigMap contendo seu CA. Ele deve ter dois campos, ca-pem e mms-ca.crt, ambos apontando para o seu certificado CA. Substitua <CA-certificate> pelo caminho para o certificado da CA.

kubectl create cm ca-issuer --from-file=ca-pem=<CA-certificate> \
--from-file=mms-ca.crt=<CA-certificate>
5

Para proteger um recurso do MongoDB com sua certificação gerada, você deve criar certificados para o próprio recurso e para o MongoDB Agent.

  1. Crie o certificado de recurso MongoDB. O exemplo a seguir pressupõe um nome do conjunto my-replica-set com três membros:

    Observação

    O parâmetro spec.issuerRef.name faz referência ao CA ConfigMap criado anteriormente.

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
    name: my-replica-set-certificate
    namespace: mongodb
    spec:
    dnsNames:
    - my-replica-set-0
    - my-replica-set-0.my-replica-set-svc.mongodb.svc.cluster.local
    - my-replica-set-1
    - my-replica-set-1.my-replica-set-svc.mongodb.svc.cluster.local
    - my-replica-set-2
    - my-replica-set-2.my-replica-set-svc.mongodb.svc.cluster.local
    duration: 240h0m0s
    issuerRef:
    name: ca-issuer
    renewBefore: 120h0m0s
    secretName: mdb-my-replica-set-cert
    usages:
    - server auth
    - client auth

    Para clusters fragmentados, você deve criar um certificado para cada StatefulSet. Para saber mais sobre configuração de cluster fragmentado, consulte Implementar um cluster fragmentado.

  2. Criar o certificado do MongoDB Agent:

    Observação

    O parâmetro spec.issuerRef.name faz referência ao CA ConfigMap criado anteriormente.

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
    name: agent-certs
    namespace: mongodb
    spec:
    commonName: automation
    dnsNames:
    - automation
    duration: 240h0m0s
    issuerRef:
    name: ca-issuer
    renewBefore: 120h0m0s
    secretName: mdb-my-replica-set-agent-certs
    usages:
    - digital signature
    - key encipherment
    - client auth
    subject:
    countries:
    - US
    localities:
    - NY
    organizationalUnits:
    - a-1635241837-m5yb81lfnrz
    organizations:
    - cluster.local-agent
    provinces:
    - NY
  3. Criar o recurso MongoDB:

    Observação

    Se você deixar o parâmetro spec.security.tls.ca não especificado, o padrão será {replica-set}-ca.

    apiVersion: mongodb.com/v1
    kind: MongoDB
    metadata:
    name: my-replica-set
    namespace: mongodb
    spec:
    type: ReplicaSet
    members: 3
    version: 8.0.0
    opsManager:
    configMapRef:
    name: my-project
    credentials: my-credentials
    security:
    certsSecretPrefix: mdb
    authentication:
    enabled: true
    modes:
    - X509
    tls:
    ca: ca-issuer
    enabled: true
6

Para proteger um recurso do Ops Manager, você deve primeiro criar certificados para o Ops Manager e o AppDB e, em seguida, criar o recurso do Ops Manager.

  1. Criar o certificado do Ops Manager:

    Observação

    O parâmetro spec.issuerRef.name faz referência ao CA ConfigMap criado anteriormente.

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
    name: cert-for-ops-manager
    namespace: mongodb
    spec:
    dnsNames:
    - om-with-https-svc.mongodb.svc.cluster.local
    duration: 240h0m0s
    issuerRef:
    name: ca-issuer
    renewBefore: 120h0m0s
    secretName: mdb-om-with-https-cert
    usages:
    - server auth
    - client auth
  2. Criar o certificado AppDB:

    Observação

    O parâmetro spec.issuerRef.name faz referência ao CA ConfigMap criado anteriormente.

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
    name: appdb-om-with-https-db-cert
    namespace: mongodb
    spec:
    dnsNames:
    - om-with-https-db-0
    - om-with-https-db-0.om-with-https-db-svc.mongodb.svc.cluster.local
    - om-with-https-db-1
    - om-with-https-db-1.om-with-https-db-svc.mongodb.svc.cluster.local
    - om-with-https-db-2
    - om-with-https-db-2.om-with-https-db-svc.mongodb.svc.cluster.local
    duration: 240h0m0s
    issuerRef:
    name: ca-issuer
    renewBefore: 120h0m0s
    secretName: appdb-om-with-https-db-cert
    usages:
    - server auth
    - client auth
  3. Criar o recurso do Ops Manager:

    apiVersion: mongodb.com/v1
    kind: MongoDBOpsManager
    metadata:
    name: om-with-https
    namespace: mongodb
    spec:
    adminCredentials: ops-manager-admin-secret
    applicationDatabase:
    members: 3
    security:
    certsSecretPrefix: appdb
    tls:
    ca: ca-issuer
    version: 8.0.0-ubi8
    replicas: 1
    security:
    certsSecretPrefix: mdb
    tls:
    ca: ca-issuer

o certifique-manager atualizará os certificados nas seguintes circunstâncias:

  • O certificado expira de acordo com seus campos spec.duration e spec.renewBefore .

  • Você exclui o segredo que contém um certificado. Nesse caso, o certificado-manager recria o segredo de acordo com a configuração em seu recurso personalizado de certificado.

  • Você altera a configuração do recurso personalizado do certificado. Nesse caso, o certificado-manager recria o segredo que contém o certificado quando detecta as alterações em sua configuração.

Voltar

Configurar backup do sistema de arquivos

Nesta página