이 가이드에서는 다음을 구성하는 방법에 대해 설명합니다.
X.509 다중 Kubernetes 클러스터 MongoDB 배포 내 각 클러스터 의 MongoDB 노드 간 내부 인증 .
클라이언트에서 MongoDB 인스턴스로의 X.509 인증.
전제 조건
TLS 암호화 를 사용하여 멀티 Kubernetes 클러스터 MongoDB deployment 를 보호하기 전에 다음 작업을 완료하세요.
Kubernetes 연산자에 대한 자격 증명을 생성 합니다.
프로젝트 수준에서 X.509 인증을 활성화하면 모든 에이전트가 MongoDB 배포서버와 통신할 때 X.509 클라이언트 인증을 사용하도록 구성됩니다.
X.509 클라이언트 인증에는 다음 중 하나가 필요합니다.
클라우드 매니저
MongoDBMultiCluster 리소스에 대한 X.509 내부 인증 구성
노드 클러스터의 내부 X.509 인증서에 대한 시크릿을 생성합니다.
kubectl 명령을 실행하여 내부 cluster 멤버의 X.509 인증서를 저장하는 새 시크릿을 만듭니다. 멤버 cluster는 MongoDBMultiCluster 리소스에 정의되어 있습니다.
kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create secret tls <prefix>-<metadata.name>-clusterfile \ --cert=<resource-clusterfile-tls-cert> \ --key=<resource-clusterfile-tls-key>
리소스 를 업데이트하여 X 인증 을 활성화 합니다.MongoDBMultiCluster 509
Kubernetes 연산자MongoDBMultiCluster 리소스 사양 의 보안 설정으로 MongoDBMultiCluster 사용자 지정 리소스를 업데이트합니다. 아래에 internalCluster 설정을 spec.authentication 추가하고 "X509" 으로 설정합니다. 결과 구성은 다음 예시와 유사할 수 있습니다.
apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 8.0.0 type: ReplicaSet persistent: false duplicateServiceObjects: true credentials: my-credentials opsManager: configMapRef: name: my-project security: tls: a: custom-ca certsSecretPrefix: <prefix> authentication: enabled: true modes: ["X509"] agents: mode: "X509" internalCluster: "X509" clusterSpecList: - clusterName: ${MDB_CLUSTER_1_FULL_NAME} members: 3 - clusterName: ${MDB_CLUSTER_2_FULL_NAME} members: 2 - clusterName: ${MDB_CLUSTER_3_FULL_NAME} members: 3 The |k8s-op-short| copies the ConfigMap with the |certauth| created in the operator cluster to each member cluster, generates a concatenated |pem| secret, and distributes it to the member clusters.
MongoDBMultiCluster 리소스가 실행 중인지 확인합니다.
멤버 cluster의 경우 다음 명령을 실행하여 MongoDB 파드가 실행 중 상태인지 확인합니다.
kubectl get pods \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb 연산자 클러스터 에서 다음 명령을 실행
MongoDBMultiCluster리소스 실행 상태 인지 확인합니다.kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w
MongoDBMultiCluster 리소스에 대한 내부 인증 X.509 인증서 갱신
이미 인증서를 생성한 경우 다음 절차에 따라 주기적으로 인증서를 갱신합니다.
MongoDBMultiCluster 리소스 의 시크릿을 갱신합니다.
이 kubectl 명령을 실행하여 MongoDBMultiCluster 리소스 에 대한 인증서를 저장하는 기존 시크릿을 갱신합니다.
kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create secret tls <prefix>-<metadata.name>-cert \ --cert=<resource-tls-cert> \ --key=<resource-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
에이전트의 X.509 인증서에 대한 시크릿을 갱신합니다.
kubectl 명령을 실행하여 MongoDBMultiCluster 리소스 에이전트 인증서를 저장하는 기존 시크릿을 갱신합니다.
kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create secret tls <prefix>-<metadata.name>-agent-certs \ --cert=<agent-tls-cert> \ --key=<agent-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
리소스 의 내부 구성원의 X. 인증서에 대한509 MongoDBMultiCluster 시크릿을 갱신합니다.
kubectl 명령을 실행하여 MongoDBMultiCluster 리소스의 내부 멤버에 대한 X.509 인증서를 저장하는 기존 시크릿을 갱신합니다.
kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create secret tls <prefix>-<metadata.name>-clusterfile \ --cert=<resource-clusterfile-tls-cert> \ --key=<resource-clusterfile-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -