네트워킹, 로드 밸런싱, 서비스 메시
여러 Kubernetes 클러스터에 MongoDB Ops Manager 애플리케이션을 배포할 때는 다음과 같은 추가 요구 사항을 고려하세요.
네트워킹 개요
다음 표에서는 다음을 설명합니다.
MongoDB Ops Manager 애플리케이션 인스턴스에 대한 연결의 출처
MongoDB Ops Manager 애플리케이션이 연결 후 수행하는 작업
각 연결 유형에서 사용하는 MongoDB Ops Manager의 URL 과 구성 방법입니다.
연결의 출처 | 목적 또는 조치 | MongoDB Ops Manager URL |
---|---|---|
Kubernetes 연산자 | 애플리케이션 데이터베이스가 실행 상태가 된 후 MongoDB Ops Manager 인스턴스를 구성하고 모니터링을 활성화합니다. | 다음 형식의 기본값 MongoDB Ops Manager FQDN 을 통해 <om_resource_name>-svc.<namespace>.svc.cluster.local 또는 spec.opsManagerURL 값 |
Kubernetes 연산자 | 특정 MongoDB 리소스 또는 MongoDBMultiCluster 리소스 배포를 구성합니다. | 프로젝트 생성시 구성된 프로젝트의 ConfigMap을 통해 |
애플리케이션 데이터베이스 파드의 MongoDB Agent | 자동화 구성 수신 | MongoDB Ops Manager 인스턴스에 연결할 필요 없이 MongoDB Agent가 헤드리스 모드로 실행 중입니다. |
애플리케이션 데이터베이스 파드의 모니터링 에이전트 | 모니터링 데이터 전송 | <om_resource_name>-svc.<namespace>.svc.cluster.local 또는 spec.opsManagerURL 값 형식의 기본 MongoDB Ops Manager FQDN 을 통해 |
MongoDB 또는 MongoDBMultiCluster 리소스 파드의 MongoDB Agent | 자동화 구성, 백업 및 복원 프로세스 수신 | 프로젝트 생성시 구성된 프로젝트의 ConfigMap을 통해 |
MongoDB 또는 MongoDBMultiCluster 리소스 파드의 모니터링 에이전트 | 모니터링 데이터 전송 | 프로젝트 생성시 구성된 프로젝트의 ConfigMap을 통해 |
사용자 | MongoDB Ops Manager UI 또는 API | 외부에 노출된 MongoDB Ops Manager 인스턴스의 공개 외부 도메인을 통해 다음과 같이 구성됩니다. spec.externalConnectivity |
서비스 메시
애플리케이션 데이터베이스 인스턴스와 MongoDB Ops Manager 애플리케이션 인스턴스를 호스팅하는 노드를 동일한 서비스 메시에 추가하여 다음을 허용합니다.
배포된 구성 요소 간의 네트워크 연결입니다.
클러스터 간 DNS 확인.
Kubernetes Operator와 MongoDB Ops Manager 인스턴스 간의 네트워킹 구성을 간소화하려면 동일한 서비스 메시에 Kubernetes Operator를 설치하는 Kubernetes 클러스터인 연산자 클러스터를 추가하는 것이 좋지만, 엄격한 요구 사항은 아닙니다. 연산자 클러스터를 동일한 서비스 메시에 포함하면 이를 MongoDB Ops Manager 애플리케이션 및 애플리케이션 데이터베이스 인스턴스의 호스트로 사용할 수 있습니다.
다음 Kubernetes 클러스터에 대한 서비스 메시를 구성하고 이를 메시 구성에 포함합니다.
Kubernetes Operator 자체를 배포하는 '운영자 클러스터'입니다.
MongoDB Ops Manager 애플리케이션 인스턴스를 호스팅할 "멤버 Kubernetes 클러스터"입니다.
애플리케이션 데이터베이스 인스턴스를 호스팅할 추가 멤버 Kubernetes 클러스터 또는 MongoDB Ops Manager에 사용되는 것과 동일한 멤버 클러스터.
모든 Kubernetes 클러스터에 대해 동일한 서비스 메시를 구성하면 각 MongoDB Ops Manager 인스턴스가 여러 Kubernetes 클러스터에 배포된 모든 애플리케이션 데이터베이스 인스턴스에 보안 연결을 설정할 수 있습니다.
멤버 클러스터에 애플리케이션 데이터베이스 Kubernetes 인스턴스를 배포한 후에는 멤버 클러스터에 배포하는 각 API MongoDB Ops Manager 인스턴스의 Kubernetes 엔드포인트가 각 애플리케이션 데이터베이스 인스턴스에 직접 연결할 수 있어야 합니다. 이를 통해 Kubernetes Operator는 관리 사용자 생성, 백업 구성 등 멤버 클러스터에 MongoDB Ops Manager 인스턴스를 배포하는 데 필요한 단계를 완료할 수 있습니다.
부하 분산
대부분의 경우 사용자가 MongoDB Ops Manager UI에 액세스할 수 있도록 하려면 MongoDB Ops Manager 애플리케이션에 대한 외부 액세스를 제공해야 합니다.
Ops Manager 애플리케이션 의 멀티 클러스터 배포의 경우, 각 클러스터 는 서비스 를 사용하여 Ops Manager 애플리케이션 을 호스팅하는 해당 파드를 개별적으로 노출할 수 LoadBalancer
있습니다. 유형입니다.
spec.externalConnectivity
를 사용하여 LoadBalancer
서비스를 생성하고 외부 도메인이 해당 서비스의 외부 IP 주소를 가리키도록 합니다. MongoDB Ops Manager 애플리케이션의 인스턴스를 두 개 이상 구성하더라도 Kubernetes 서비스는 MongoDB Ops Manager 애플리케이션을 호스팅하는 사용 가능한 모든 파드에 라운드 로빈 방식으로 트래픽을 전송합니다.
Kubernetes Operator는 모든 Kubernetes 클러스터의 모든 파드에 대한 트래픽의 로드 밸런싱을 지원하지 않으므로, Kubernetes Operator 구성 외부에서 로드 밸런싱을 구성해야 합니다.
다음 예시와 다이어그램은 여러 Kubernetes 클러스터에 걸쳐 로드 밸런싱을 구성할 수 있는 다양한 방법 중 몇 가지를 보여줍니다.
다이어그램 예시 1: 외부 로드 밸런서
MongoDB Ops Manager 애플리케이션 및 애플리케이션 데이터베이스를 호스팅하는 모든 Kubernetes 클러스터에 대해 외부 네트워크 로드 밸런서(패스스루 프록시)를 구성합니다. MongoDB Ops Manager 애플리케이션은 상태를 저장하지 않습니다. 로드 밸런서는 각 클러스터의 LoadBalancer
서비스에 라운드 로빈 방식으로 트래픽을 전달할 수 있으며, 한 클러스터가 활성 상태인 동안 다른 클러스터는 패시브 상태가 되는 방식으로 로드 밸런서를 구성하는 경우 한 번에 한 클러스터로 트래픽을 전달할 수 있습니다. 다음 다이어그램은 이러한 접근 방식을 보여줍니다.
이 다이어그램에서는 다음을 수행합니다.
Kubernetes Operator는 각 멤버 클러스터에 할당된 외부 IP 주소를 사용하여
<om_resource_name>-svc-ext
이라는 이름의LoadBalancer
유형의 외부 서비스를 생성합니다.spec.externalConnectivity
를 사용하여 모든 멤버 클러스터에 대해 이 서비스를 전역적으로 구성할 수 있습니다. 또는 이 서비스가 각 멤버 클러스터에만 적용되는 경우spec.clusterSpecList.externalConnectivity
을(를) 사용하여 구성할 수 있습니다.Kubernetes Operator가 MongoDB Ops Manager 애플리케이션을 위해 생성하는 각 서비스에는 항상 현재 클러스터에서 MongoDB Ops Manager 애플리케이션을 호스팅하는 모든 파드가 포함되어 있습니다.
다이어그램 예시 2: 프록시를 사용하는 서비스 메시에 의한 로드 밸런싱
서비스 메시에서 제공하는 클러스터 간 로드 밸런싱 기능을 사용합니다.
각 Kubernetes 클러스터에서 Kubernetes Operator는 다음 서비스 를 <om_resource_name>-svc
생성합니다. 모든 멤버 클러스터에서 MongoDB Ops Manager 애플리케이션 인스턴스를 호스팅하는 사용 가능한 모든 파드에 트래픽을 분산하는 데 사용할 수 있습니다.
Nginx 또는 HAProxy와 같은 프록시 구성 요소를 클러스터 중 하나에 배포하고 공용 FQDN 을 통해 인터넷을 통해 외부에 노출하고 TCP 패스스루를 통해 모든 네트워크 트래픽을 <om_resource_name>-svc.<namespace>.svc.cluster.local
라는 서비스로 전달하도록 프록시를 구성할 수 있습니다. .
다음 다이어그램은 이러한 접근 방식을 보여줍니다.
이 다이어그램에서는 다음을 수행합니다.
각 멤버 클러스터에서 Kubernetes Operator는 서비스
ClusterIP
를<om_resource_name>-svc.<namespace>.svc.cluster.local
생성합니다. 를 사용하여 액세스할 수 있는 유형의 이 멤버 클러스터에 배포된 모든 파드를 엔드포인트에 포함하는 서비스입니다.Kubernetes 클러스터 간의 트래픽은 서비스 메시에 의해 처리됩니다. Kubernetes Operator가 MongoDB Ops Manager 애플리케이션의 각 멤버 클러스터에 서비스를 생성할 때, Kubernetes Operator는 이러한 서비스 이름에 클러스터 인덱스 접미사를 할당하지 않습니다. 따라서 서비스 메시는 모든 클러스터에서 MongoDB Ops Manager 애플리케이션을 호스팅하는 모든 파드에 트래픽 로드 밸런싱을 수행할 수 있습니다.
각 멤버 클러스터에서 Kubernetes Operator는
<om_resource_name>-<cluster-index>
이라는 StatefulSet를 배포합니다. 예를 들어om-0
은 인덱스가 0 인 멤버 클러스터에 대한 StatefulSet 의 이름입니다.각 클러스터에
<om_resource_name>-svc
ClusterIP
서비스가 배포되어 있더라도 이 서비스는 사용자 트래픽을 처리하지 않습니다. 사용자가Member Cluster 1
에서 서비스에 액세스하면 서비스 메시가 트래픽을 처리합니다.MongoDB Ops Manager 애플리케이션을 호스팅하는 각 Pod는 StatefulSet 이름을 따서 명명됩니다. 예를 들어
om-1-2
은 인덱스가 1 인 클러스터에 있는 파드 번호 2 의 이름입니다.