文档菜单
文档首页
/
MongoDB 企业 Kubernetes 操作符
/

设置 cert-manager 集成

本页内容

  • 步骤
  • 创建一个CA 密钥。
  • 将额外的证书添加到自定义 CA 证书。
  • 配置 cert-manager CA 发行者
  • 创建一个 CA ConfigMap
  • 为您的 MongoDB 资源创建证书
  • 运维管理器以及带有 TLS 的 AppDB 创建证书
  • 证书续订

cert-manager 简化和自动化 Kubernetes 安全证书的管理。以下步骤描述了如何配置cert-manager 以生成 MongoDB Kubernetes Operator 资源的证书。

1

注意

以下步骤假设您已经创建了一个自定义的 CA,以及相应的 tls.key 私钥和 tls.crt 签名证书。

创建一个秘密信息以存储您的 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

如果您的运维管理器 TLS 证书是由自定义的 CA 签署的,则该 CA 证书也必须包含允许运维管理器备份守护进程从互联网下载 MongoDB 二进制文件的额外证书。要创建 TLS 证书(s),创建一个 ConfigMap 以存储 CA 证书

重要

TheKubernetes Operator需要您的运维管理器证书在 ConfigMap 中命名为 mms-ca.crt

  1. downloads.mongodb.com 获取 TLS 证书链的全套。运维管理器以下 openssl 命令将链中的证书输出到您的当前工作目录,格式为 .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. 将您的 CA 的证书文件与从 downloads.mongodb.com 获取的整个 TLS 证书链连接起来运维管理器您在上一步中获得了

    cat cert2.crt cert3.crt cert4.crt >> mms-ca.crt
  3. 创建ConfigMap用于运维管理器:

    kubectl create configmap om-http-cert-ca --from-file="mms-ca.crt"
3
  1. 创建一个引用您的CA密钥的CA发行者

    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
    name: ca-issuer
    namespace: <namespace>
    spec:
    ca:
    secretName: ca-key-pair
  2. 验证发行者是否已就绪

    kubectl get issuer ca-issuer

    输出中的READY字段应具有True的值。

4

创建一个包含您的CA的ConfigMap。它必须有两个字段,ca-pemmms-ca.crt,都指向您的CA证书。用<CA-certificate>替换您的CA证书路径。

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

要使用您生成的证书来保护MongoDB资源,您必须为资源本身和MongoDB代理创建证书。

  1. 创建MongoDB资源证书。以下示例假设有一个名为my-replica-set的副本集,包含三个成员

    注意

    spec.issuerRef.name参数引用了之前创建的CA ConfigMap。

    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

    对于分片集群,您必须为每个StatefulSet创建一个证书。要了解更多关于分片集群配置的信息,请参阅部署分片集群.

  2. 创建MongoDB代理证书

    注意

    spec.issuerRef.name参数引用了之前创建的CA ConfigMap。

    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. 创建MongoDB资源

    注意

    如果您未指定spec.security.tls.ca参数,则默认为{replica-set}-ca

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

为了安全地运维管理器资源,您必须首先为运维管理器和 AppDB 创建证书,然后创建运维管理器资源。

  1. 创建 Ops Manager 证书

    注意

    spec.issuerRef.name参数引用了之前创建的CA ConfigMap。

    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. 创建 AppDB 证书

    注意

    spec.issuerRef.name参数引用了之前创建的CA ConfigMap。

    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. 创建运维管理器资源

    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: 6.0.0-ubi8
    replicas: 1
    security:
    certsSecretPrefix: mdb
    tls:
    ca: ca-issuer

cert-manager 会在以下情况下更新证书

  • 证书根据其 spec.durationspec.renewBefore 字段到期。

  • 您删除了持有证书的秘密。在这种情况下,cert-manager 会根据您的证书自定义资源中的配置重新创建秘密。

  • 您更改了证书自定义资源的配置。在这种情况下,当 cert-manager 检测到其配置的更改时,它会重新创建包含证书的秘密。

返回

配置文件系统备份

© . All rights reserved.