设置 cert-manager 集成
在此页面上
cert-manager 简化并自动化Kubernetes安全证书的管理。以下过程介绍如何配置cert-manager
为MongoDB Kubernetes Operator 资源生成证书。
步骤
为自定义CA
如果您的MongoDB Ops Manager TLS证书由自定义CA签名,则该CA证书还必须包含允许MongoDB Ops Manager备份守护程序从互联网下载MongoDB二进制文件的其他证书。 要创建 TLS 证书,请创建 ConfigMap 持有 CA 证书:
重要
Kubernetes 操作符要求 Ops Manager 证书在 ConfigMap 中命名为mms-ca.crt
。
从
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}' 将 Ops Manager 的CA证书文件与您在上一步中获得的来自
downloads.mongodb.com
的整个TLS证书链连接:cat cert2.crt cert3.crt cert4.crt >> mms-ca.crt 创建 ConfigMap 对于MongoDB Ops Manager :
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
使用 TLS 为 Ops Manager 和 AppDB 创建证书
要保护 Ops Manager 资源,必须首先为 Ops Manager 和 AppDB 创建证书,然后创建 Ops Manager 资源。
创建 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 创建 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.duration
和spec.renewBefore
字段过期。删除持有证书的密钥。 在这种情况下,cert-经理会根据证书自定义资源中的配置重新创建密钥。
您可以更改证书自定义资源的配置。 在这种情况下,cert-经理在检测到其配置更改时会重新创建包含证书的密钥。