Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
Kubernetes Operator용 MongoDB 컨트롤러
/

인증서 관리자 통합 설정

cert-manager Kubernetes의 보안 인증서 관리를 간소화하고 자동화합니다. 다음 절차에서는 cert-manager 를 구성하여 MongoDB Kubernetes Operator 리소스에 대한 인증서를 생성하는 방법을 설명합니다.

객체 를 사용하여 복제본 세트를 배포하려면 다음을 수행합니다. ,다음을 수행해야 합니다.

  • MongoDB Ops Manager 인스턴스 또는 Cloud Manager 조직을 보유하거나 생성합니다.

  • Kubernetes Operator용 MongoDB 컨트롤러가 있거나 설치되어 있어야 합니다.

  • Kubernetes Operator ConfigMap을 생성하거나 작성합니다.

  • Kubernetes Operator에 대한 자격 증명을 생성하거나 다른 시크릿 저장 도구를 구성합니다.

참고

단일 클러스터 Kubernetes 배포에 시크릿이 저장되지 않도록 하려면 모든 시크릿 을 마이그레이션할 수 있습니다. 비밀 저장 도구 에 저장합니다. 여러 Kubernetes 클러스터에 대한 배포는 HashiCorp Vault 와 같은 비밀 저장소 도구에 비밀을 저장하는 것을 지원하지 않습니다. .

  • 다음 구성 요소 각각에 대해 하나의 TLS 인증서를 생성합니다.

    • 복제본 세트입니다. 복제본 세트의 구성원을 인증서에 호스팅하는 각 Kubernetes Pod에 대해 SAN을 추가했는지 확인하세요.

      TLS 인증서에서 각 포드의 SAN은 다음 형식을 사용해야 합니다.

      <pod-name>.<metadata.name>-svc.<namespace>.svc.cluster.local

      중요

      Let's Encrypt 와 같은 ACME기반 서비스 제공자 를 사용하는 경우 TLS 인증서를 발급하기 위해 제공자 가 Pod의 기본값 FQDN (*.svc.cluster.local)을 인증서의 SAN에 추가하지 못하도록 할 수 있습니다.

      ACME 기반 인증서 를 사용하려면 복제본 세트 리소스에 대한 인증서를 구성해야 합니다. 자세히 학습 절차의 ACME 기반 TLS 인증서에 대한 단계를 참조하세요.

    • 프로젝트의 MongoDB Agent입니다. MongoDB Agent 인증서의 경우 다음 요구 사항을 충족하는지 확인하세요.

      • TLS 인증서의 일반 이름이 비어 있지 않습니다.

      • TLS 인증서의 결합된 조직 및 조직 구성 단위는 복제본 세트 멤버에 대한 TLS 인증서의 조직 및 조직 구성 단위와 다릅니다.

  • CA 인증서 파일 이 있어야 하며 이름이 ca-pem 이어야 합니다.

  • TLS 인증서에 서명할 때 사용한 키가 있어야 합니다.

중요

Kubernetes Operator는 다음을 사용합니다.kubernetes.io/tls 시크릿을 사용하여 MongoDB Ops Manager 및 리소스에 대한 TLS 인증서 및 비공개 키를 저장 MongoDB 합니다. Kubernetes Operator 버전 1 부터 시작됩니다.17.0, Kubernetes Operator는 Opaque 시크릿 으로 저장된 연결된 PEM 파일을 지원 하지 않습니다.

객체 를 사용하여 복제본 세트를 배포하려면 다음을 수행합니다. ,다음을 수행해야 합니다.

참고

단일 클러스터 Kubernetes 배포에 시크릿이 저장되지 않도록 하려면 모든 시크릿 을 마이그레이션할 수 있습니다. 비밀 저장 도구 에 저장합니다. 여러 Kubernetes 클러스터에 대한 배포는 HashiCorp Vault 와 같은 비밀 저장소 도구에 비밀을 저장하는 것을 지원하지 않습니다. .

1

참고

다음 단계에서는 해당 tls.key 비공개 키 및 tls.crt 서명된 인증서와 함께 사용자 지정 CA 를 이미 생성했다고 가정합니다.

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 연산자는 ConfigMap에서 Ops Manager 인증서의 이름이 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 <custom_ca_cert.pem> cert2.crt cert3.crt cert4.crt >> mms-ca.crt

    참고

    • 자리 표시자 <custom_ca_cert.pem> 를 사용자 지정 CA 인증서 PEM 파일 로 바꿉니다.

    • cert1.crt 파일 포함하지 않아야 하는 MongoDB 의 서버 인증서이므로 포함하지 마세요.

  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 인증서를 가리키는 두 개의 필드 ca-pemmms-ca.crt 이 있어야 합니다. <CA-certificate> 을(를) CA 인증서 경로로 바꿉니다.

kubectl create cm ca-issuer --from-file=ca-pem=<CA-certificate> \
--from-file=mms-ca.crt=<CA-certificate>
5

생성된 인증서로 MongoDB 리소스를 보호하려면 리소스 자체와 MongoDB Agent 모두에 대한 인증서를 생성해야 합니다.

  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 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
  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: 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
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: 8.0.0-ubi8
    replicas: 1
    security:
    certsSecretPrefix: mdb
    tls:
    ca: ca-issuer

cert-manager는 다음과 같은 상황에서 인증서를 갱신합니다.

  • 인증서는 spec.durationspec.renewBefore 필드에 따라 만료됩니다.

  • 인증서가 포함된 비밀을 삭제합니다. 이 경우 cert-manager는 인증서 사용자 지정 리소스의 구성에 따라 시크릿을 다시 생성합니다.

  • 인증서 사용자 지정 리소스의 구성을 변경합니다. 이 경우 cert-manager는 구성 변경을 감지하면 인증서가 포함된 시크릿을 다시 생성합니다.

돌아가기

파일 시스템 백업 구성

이 페이지의 내용