Docs 菜单
Docs 主页
/
MongoDB Enterprise Kubernetes Operator
/

设置 cert-manager 集成

在此页面上

  • 步骤
  • 创建 CA密钥。
  • 为自定义CA证书添加其他证书。
  • 配置证书经理CA颁发者
  • 创建CA ConfigMap
  • 为 MongoDB 资源创建证书
  • 使用 TLS 为 Ops Manager 和 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

如果您的MongoDB Ops Manager TLS证书由自定义CA签名,则该CA证书还必须包含允许MongoDB Ops Manager备份守护程序从互联网下载MongoDB二进制文件的其他证书。 要创建 TLS 证书,请创建 ConfigMap 持有 CA 证书:

重要

Kubernetes 操作符要求 Ops Manager 证书在 ConfigMap 中命名为mms-ca.crt

  1. downloads.mongodb.com获取 Ops Manager 的整个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. 将 Ops Manager 的CA证书文件与您在上一步中获得的来自downloads.mongodb.com的整个TLS证书链连接:

    cat cert2.crt cert3.crt cert4.crt >> mms-ca.crt
  3. 创建 ConfigMap 对于MongoDB Ops Manager :

    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

要保护 Ops Manager 资源,必须首先为 Ops Manager 和 AppDB 创建证书,然后创建 Ops Manager 资源。

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

cert-manager 将在以下情况下续订证书:

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

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

  • 您可以更改证书自定义资源的配置。 在这种情况下,cert-经理在检测到其配置更改时会重新创建包含证书的密钥。

后退

配置文件系统备份