cert-manager は、 Kubernetesのセキュリティ証明書の管理を簡素化および自動化します。次の手順では、cert-manager を構成してMongoDB Kubernetes Operator リソースの証明書を生成する方法について説明します。
前提条件
オブジェクトを使用してレプリカセットを配置するには、以下を行う必要があります。
Have or create an Ops Manager instance or a Cloud Manager organization.
Kubernetes Operator 用のMongoDB Controls を用意するか、インストールします。
注意
Kubernetes の単一クラスター配置でシークレットが保存されないようにするには、 すべてのシークレットをシークレットストレージツールに移行 します。複数のKubernetesクラスターでの配置では、HashiCorp Vault などのシークレットストレージツールへのシークレットの保存はサポートされていません。
次のコンポーネントごとに 1 つのTLS証明書を生成します。
レプリカセット。 レプリカセットのノードをホストする各 Kubernetes ポッドのSANを証明書に追加することを確認します。
TLS証明書では、各ポッドのSANは次の形式を使用する必要があります。
<pod-name>.<metadata.name>-svc.<namespace>.svc.cluster.local 重要
If you're using an ACME based service provider such as Let's Encrypt to issue TLS certificates, the provider might prohibit you from adding the Pod's default FQDNs (
*.svc.cluster.local) to SANs in the certificate.ACMEベースの証明書を使用するには、レプリカセット リソースの証明書を構成する必要があります。 詳細については、手順の 「 ACMEベースのTLS証明書」 に関するステップを参照してください。
プロジェクトの MongoDB Agent。 MongoDB Agent 証明書については、次の要件を満たしていることを確認してください。
TLS証明書のコモン ネームが空ではない。
各TLS証明書内の組織と組織単位の組み合わせは、レプリカセット ノードのTLS証明書内の組織と組織単位とは異なります。
CA 証明書ファイルを用意し、
ca-pemと名付ける必要があります。TLS証明書の署名に使用したキーが必要です。
重要
Kubernetes 演算子は kubernetes.io/tls を使用します。MongoDB Ops Manager および MongoDB リソース用の TLS 証明書および秘密キーを保存する秘密。Kubernetes 演算子1 17バージョン..0 以降、Kubernetes 演算子 は Opaque secrets. として保存されている連結された PEM ファイルをサポートしません。
オブジェクトを使用してレプリカセットを配置するには、以下を行う必要があります。
Have or create an Ops Manager instance or a Cloud Manager organization.
Kubernetes Operator 用のMongoDB Controls を用意するか、インストールします。
注意
Kubernetes の単一クラスター配置でシークレットが保存されないようにするには、 すべてのシークレットをシークレットストレージツールに移行 します。複数のKubernetesクラスターでの配置では、HashiCorp Vault などのシークレットストレージツールへのシークレットの保存はサポートされていません。
手順
カスタムCA証明書に追加の証明書を追加します。
MongoDB Ops Manager TLS証明書がカスタムCAによって署名されている場合、 CA証明書には、 MongoDB Ops ManagerバックアップデーモンがインターネットからMongoDBバイナリをダウンロードできるようにする追加の証明書も含まれている必要があります。 TLS 証明書を作成するには、 ConfigMap を作成します CA 証明書を保持するには、以下が必要です。
重要
Kubernetes Operator では、ConfigMap 内のMongoDB Ops Manager証明書の名前が 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}' 前のステップで取得した からの TLS 証明書チェーン全体と、MongoDB Ops Manager 用のあなたの CA の証明書ファイルを連結します:
downloads.mongodb.comcat <custom_ca_cert.pem> cert2.crt cert3.crt cert4.crt >> mms-ca.crt 注意
プレースホルダー
<custom_ca_cert.pem>を カスタム CA 証明書 PEMファイルに置き換えます。MongoDBのサーバー証明書は含めることができないため、
cert1.crtファイルを含めないでください。
MongoDB Ops Managerの ConfigMap を作成します。
kubectl create configmap om-http-cert-ca --from-file="mms-ca.crt"
MongoDB リソースの証明書を作成する
生成された証明書でMongoDBリソースを保護するには、リソース自体とMongoDB Agentの両方の証明書を作成する必要があります。
MongoDB リソース証明書を作成します。 次の例では、3 つのノードを含む
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 シャーディングされたクラスターの場合、 Atlas App Services は 1 つの証明書を作成する必要があります。シャーディングされたクラスターの構成の詳細については、シャードクラスタの配置 を参照してください。
MongoDB Agent証明書を作成します。
注意
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: 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
TLS を使用して MongoDB Ops Manager と AppDB の証明書を作成
MongoDB Ops Manager リソースを保護するには、まず MongoDB Ops Manager と AppDB の証明書を作成し、次に MongoDB Ops Manager リソースを作成する必要があります。
MongoDB 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 MongoDB Ops Managerリソースを作成します。
apiVersion: mongodb.com/v1 kind: MongoDBOpsManager metadata: name: om-with-https namespace: mongodb spec: adminCredentials: ops-manager-admin-secret version: "8.0.0" applicationDatabase: members: 3 security: certsSecretPrefix: appdb tls: ca: ca-issuer version: 8.0.0-ubi8 replicas: 1 security: certsSecretPrefix: mdb tls: ca: ca-issuer
証明書の更新
証明書マネージャーは、次の状況で証明書を更新します。
証明書は、
spec.durationspec.renewBeforeフィールドと フィールドに従って期限切れになります。証明書を保持しているシークレットを削除します。 この場合、cert-manager は証明書カスタム リソースの構成に従ってシークレットを再作成します。
証明書カスタム リソースの構成を変更します。 この場合、証明書マネージャーは、構成に対する変更を検出するときに、証明書を含むシークレットを再作成します。