cert-manager は、 Kubernetesのセキュリティ証明書の管理を簡素化および自動化します。次の手順では、cert-manager を構成してMongoDB Kubernetes Operator リソースの証明書を生成する方法について説明します。
前提条件
オブジェクトを使用してレプリカセットを配置するには、以下を行う必要があります。
MongoDB Ops Manager インスタンスまたはCloud Manager 組織を選択するか、または作成します。
Kubernetes Operator 用の MongoDB Controls を用意するか、インストールします。
注意
Kubernetes の単一クラスター配置でシークレットが保存されないようにするには、 すべてのシークレットをシークレットストレージツールに移行 します。複数のKubernetesクラスターでの配置では、HashiCorp Vault などのシークレットストレージツールへのシークレットの保存はサポートされていません。
次のコンポーネントごとに 1 つの TLS 証明書を生成します。
レプリカセット。 レプリカセットのノードをホストする各 Kubernetes ポッドのSANを証明書に追加することを確認します。
TLS証明書では、各ポッドのSANは次の形式を使用する必要があります。
<pod-name>.<metadata.name>-svc.<namespace>.svc.cluster.local 重要
let
*.svc.cluster.localの暗号化などの AME ベースのサービスプロバイダーを使用して TLS 証明書を発行している場合、プロバイダーはポッドのデフォルトのFQDN ( )を証明書に SAN に追加することを禁止する可能性があります。ACME ベースの証明書を使用するには、レプリカセットリソースの証明書を構成する必要があります。詳細については、手順の 「ACME ベースの TLS 証明書」 に関するステップを参照してください。
プロジェクトの MongoDB Agent。 MongoDB Agent 証明書については、次の要件を満たしていることを確認してください。
TLS証明書のコモン ネームが空ではない。
各TLS証明書内の組織と組織単位の組み合わせは、レプリカセット ノードのTLS証明書内の組織と組織単位とは異なります。
CA証明書ファイルが必要で、それに
ca-pemという名前を付けます。TLS証明書の署名に使用したキーが必要です。
重要
Kubernetes演算子は kubernetes.io/tls を使用しますMongoDB Ops Manager とMongoDBリソースの TLS 証明書と秘密キーを保存するためのシークレット。Kubernetes Operator1 17バージョン..0 以降、 Kubernetes Operator は Opaque シークレットとして保存される連結 PEM ファイルをサポートしていません。
オブジェクトを使用してレプリカセットを配置するには、以下を行う必要があります。
MongoDB Ops Manager インスタンスまたはCloud Manager 組織を選択するか、または作成します。
Kubernetes Operator 用のMongoDB Controls を用意するか、インストールします。
注意
Kubernetes の単一クラスター配置でシークレットが保存されないようにするには、 すべてのシークレットをシークレットストレージツールに移行 します。複数のKubernetesクラスターでの配置では、HashiCorp Vault などのシークレットストレージツールへのシークレットの保存はサポートされていません。
手順
カスタム CA 証明書に追加の証明書を追加します。
If your MongoDB Ops Manager TLS 証明書がカスタム CA によって署名されている場合、CA 証明書には、 MongoDB Ops ManagerバックアップデーモンがインターネットからMongoDBバイナリをダウンロードできるようにする追加の証明書も含まれている必要があります。TLS 証明書を作成するには、CA 証明書を保持するための ConfigMap を作成します。
重要
Kubernetes Operator では、ConfigMap 内のMongoDB Ops Manager証明書の名前が mms-ca.crt である必要があります。
MongoDB Ops Manager のTLS証明書チェーン全体を
downloads.mongodb.comから取得します。 次の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 MongoDB Ops Managerの証明書ファイルと、前のステップで取得した からの TLS 証明書チェーン全体を連結します。
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 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 は証明書カスタム リソースの構成に従ってシークレットを再作成します。
証明書カスタム リソースの構成を変更します。 この場合、証明書マネージャーは、構成に対する変更を検出するときに、証明書を含むシークレットを再作成します。