设置 cert-manager 集成
本页内容
cert-manager 简化和自动化 Kubernetes 安全证书的管理。以下步骤描述了如何配置cert-manager
以生成 MongoDB Kubernetes Operator 资源的证书。
步骤
将额外的证书添加到自定义的 CA 证书中。
如果您的运维管理器 TLS 证书是由自定义的 CA 签署的,则该 CA 证书也必须包含允许运维管理器备份守护进程从互联网下载 MongoDB 二进制文件的额外证书。要创建 TLS 证书(s),创建一个 ConfigMap 以存储 CA 证书
重要
TheKubernetes Operator需要您的运维管理器证书在 ConfigMap 中命名为 mms-ca.crt
。
从
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}' 将您的 CA 的证书文件与从
downloads.mongodb.com
获取的整个 TLS 证书链连接起来运维管理器您在上一步中获得了cat cert2.crt cert3.crt cert4.crt >> mms-ca.crt 创建ConfigMap用于运维管理器:
kubectl create configmap om-http-cert-ca --from-file="mms-ca.crt"
为您的MongoDB资源创建证书
要使用您生成的证书来保护MongoDB资源,您必须为资源本身和MongoDB代理创建证书。
创建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创建一个证书。要了解更多关于分片集群配置的信息,请参阅部署分片集群.
创建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 创建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
为运维管理器并且为 AppDB 配置 TLS
为了安全地运维管理器资源,您必须首先为运维管理器和 AppDB 创建证书,然后创建运维管理器资源。
创建 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 创建 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 创建运维管理器资源
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.duration
和spec.renewBefore
字段到期。您删除了持有证书的秘密。在这种情况下,cert-manager 会根据您的证书自定义资源中的配置重新创建秘密。
您更改了证书自定义资源的配置。在这种情况下,当 cert-manager 检测到其配置的更改时,它会重新创建包含证书的秘密。