문서 메뉴
문서 홈
/
MongoDB Enterprise Kubernetes 연산자
/ /

Kubernetes 외부에서 MongoDB 데이터베이스 리소스에 연결하기

이 페이지의 내용

  • 전제 조건
  • 고려 사항
  • 절차

다음 절차에서는 Kubernetes 클러스터 외부에서 Kubernetes에 배포된 MongoDB 리소스에 연결하는 방법을 설명합니다.

Kubernetes 외부에서 데이터베이스에 액세스하려면 MongoDB 4.2.3 이상을 실행해야 합니다.

Kubernetes 연산자가 배포한 MongoDB 사용자 지정 리소스에 대한 외부 액세스가 필요한 사용자 지정 서비스를 생성하고 Kubernetes에서 준비 프로브를 사용하는 경우, Kubernetes의 publishNotReadyAddresses 설정을 true로 설정합니다.

publishNotReadyAddresses 설정은 이 서비스의 엔드포인트와 상호 작용하는 에이전트가 서비스의 준비 됨을 무시해야 함을 나타냅니다. 상태. publishNotReadyAddressestrue 로 설정하면 서비스를 호스팅하는 파드에 대해 구성된 준비성 프로브의 동작이 재정의됩니다.

기본적으로 publishNotReadyAddresses 설정은 false로 설정되어 있습니다. 이 경우, Kubernetes 오퍼레이터에서 MongoDB 커스텀 리소스를 호스팅하는 Pods가 Cloud Manager 또는 Ops Manager에 대한 연결을 잃을 경우 해당 Pods에 대해 구성된 준비성 프로브가 실패합니다. 그러나 publishNotReadyAddresses 설정을 true으로 설정하면 다음과 같은 상황이 발생합니다:

  • Kubernetes는 준비성 프로브가 실패한 서비스를 종료하지 않습니다.

  • Kubernetes는 이러한 엔드포인트에 대한 서비스를 호스팅하는 파드에 대한 프로브가 준비되지 않았다고 표시하더라도 모든 엔드포인트를 준비된 것으로 간주합니다.

  • MongoDB 사용자 지정 리소스는 읽기 및 쓰기 작업에 계속 사용할 수 있습니다.

다음도 참조하세요.

다음 절차는 Kubernetes 연산자에 내장된 구성 옵션을 사용하여 배포를 위한 외부 연결을 구성하는 프로세스를 안내합니다.

Kubernetes Operator가 Kubernetes cluster 외부에서 배포한 MongoDB 리소스에 연결하는 방법은 리소스에 따라 다릅니다.

Kubernetes 클러스터 외부에서 Kubernetes 연산자가 배포한 MongoDB 독립형 리소스에 연결하려면 다음 안내를 따르세요.

1

독립형 리소스를 배포하지 않은 경우 지침에 따라 리소스를 배포합니다.

이 절차에서는 다음 예제를 사용합니다.

20---
21apiVersion: mongodb.com/v1
22kind: MongoDB
23metadata:
24 name: <my-standalone>
25spec:
26 version: "4.2.2-ent"
27 opsManager:
28 configMapRef:
29 name: <configMap.metadata.name>
30 # Must match metadata.name in ConfigMap file
31 credentials: <mycredentials>
32 type: Standalone
33...
2

외부 리소스에서 독립형 리소스에 연결하려면 spec.externalAccess를 구성하세요. 설정:

externalAccess: {}

이 설정은 Kubernetes 연산자가 독립형 리소스에서 MongoDB Pod에 대한 외부 LoadBalancer 서비스를 생성하도록 지시합니다. 외부 서비스는 외부 연결을 위한 진입점을 제공합니다. 값 없이 이 설정을 추가하면 다음 기본값을 사용하여 외부 서비스가 생성됩니다.

필드
설명
Name
<pod-name>-svc-external
외부 서비스의 이름입니다. 이 값은 변경할 수 없습니다.
Type
LoadBalancer
외부 LoadBalancer 서비스를 생성합니다.
Port
<Port Number>
mongod 에 대한 포트입니다.
publishNotReadyAddress
true
DNS 레코드 가 파드가 준비되지 않은 경우에도 생성됩니다. 데이터베이스 Pod에 대해 false 로 설정하지 마세요.

선택적으로 서비스에 값을 추가하거나 기본값을 재정의해야 하는 경우 다음을 지정합니다.

예를 들어, 다음 설정은 외부 서비스의 기본값을 재정의하여 독립형 리소스를 구성하여 MongoDB Pod를 노출하는 NodePort 서비스를 생성하도록 합니다.

externalAccess:
externalService:
annotations:
# cloud-specific annotations for the service
spec:
type: NodePort # default is LoadBalancer
port: 27017
# you can specify other spec overrides if necessary

자세한 내용은 Kubernetes 문서에서 주석서비스스펙을 참조하세요.

3

독립형 리소스에서 다음 명령을 실행하여 Kubernetes Operator가 배포서버용 외부 서비스를 생성했는지 확인합니다.

$ kubectl get services

이 명령은 다음 출력과 유사한 서비스 목록을 반환합니다. 크럴스터의 각 데이터베이스 Pod에 대해 Kubernetes 연산자는 <pod-name>-0-svc-external이라는 외부 서비스를 만듭니다. 이 서비스는 외부 서비스 사양에서 제공하는 값 및 재정의에 따라 구성됩니다.

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
<my-standalone>-0-svc-external LoadBalancer 10.102.27.116 <lb-ip-or-fqdn> 27017:27017/TCP 8m30s

클러스터 구성 또는 클라우드 제공자에 따라 LoadBalancer 서비스의 IP 주소는 외부에서 액세스할 수 있는 IP 주소 또는 FQDN 입니다. IP 주소 또는 FQDN 을 사용하여 외부 도메인의 트래픽을 라우팅할 수 있습니다.

4

Kubernetes 클러스터 외부에서 배포서버에 연결하려면 MongoDB 셸(mongosh)을 사용하고 외부 도메인을 통해 노출한 MongoDB Pod 주소를 지정합니다.

예제

외부 FQDN<my-standalone>.<external-domain> 인 경우 다음 명령을 사용하여 Kubernetes 클러스터 외부에서 이 샤드 클러스터 인스턴스에 연결할 수 있습니다.

mongosh "mongodb://<my-standalone>.<external-domain>"

중요

이 절차에서는 외부 연결을 활성화하는 가장 간단한 방법을 설명합니다. 프로덕션 환경에서 다른 유틸리티를 사용할 수 있습니다.

Kubernetes 클러스터 외부에서 Kubernetes Operator가 배포한 MongoDB 복제본 세트 리소스에 연결하려면 다음 안내를 따르세요.

1

복제본 세트를 배포하지 않은 경우 지침에 따라 배포하세요.

설정에 값을 제공하여 복제본 세트에 대해 TLS spec.security.certsSecretPrefix 를 활성화해야 합니다. 복제본 세트는 에 저장된 사용자 지정 CA 인증서를 spec.security.tls.ca 사용해야 합니다.

2

외부 리소스에서 복제본 세트에 연결하려면 spec.externalAccess 설정을 구성합니다.

externalAccess: {}

이 설정은 Kubernetes Operator가 외부 LoadBalancer 를 생성하도록 지시합니다. 복제본 세트의 MongoDB Pods에 대한 서비스입니다. 외부 서비스는 외부 연결을 위한 진입점을 제공합니다. 값 없이 이 설정을 추가하면 다음 기본값을 사용하여 외부 서비스가 생성됩니다.

필드
설명
Name
<pod-name>-svc-external
외부 서비스의 이름입니다. 이 값은 변경할 수 없습니다.
Type
LoadBalancer
외부 LoadBalancer 서비스를 생성합니다.
Port
<Port Number>
mongod 에 대한 포트입니다.
publishNotReadyAddress
true
DNS 레코드 가 파드가 준비되지 않은 경우에도 생성됩니다. 데이터베이스 Pod에 대해 false 로 설정하지 마세요.

선택적으로 서비스에 값을 추가하거나 기본값을 재정의해야 하는 경우 다음을 지정합니다.

예를 들어 다음 설정은 외부 서비스의 기본값을 재정의하여 NodePort 서비스 를 생성하도록 복제본 세트를 구성합니다. MongoDB Pods를 노출합니다.

externalAccess:
externalService:
annotations:
# cloud-specific annotations for the service
spec:
type: NodePort # default is LoadBalancer
port: 27017
# you can specify other spec overrides if necessary

자세한 내용은 Kubernetes 문서에서 주석서비스스펙을 참조하세요.

3

각 외부 DNS 이름을 인증서 SAN 에 추가합니다.

4

복제본 세트에서 다음 명령을 실행하여 Kubernetes Operator가 배포를 위한 외부 서비스를 생성했는지 확인합니다.

$ kubectl get services

이 명령은 다음 출력과 유사한 서비스 목록을 반환합니다. 클러스터의 각 데이터베이스 Pod에 대해 Kubernetes Operator는 <pod-name>-<pod-idx>-svc-external라는 외부 서비스를 생성합니다. 이 서비스는 외부 서비스 사양에서 제공하는 값 및 재정의에 따라 구성됩니다.

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
<my-replica-set>-0-svc-external LoadBalancer 10.102.27.116 <lb-ip-or-fqdn> 27017:27017/TCP 8m30s

cluster 구성 또는 클라우드 공급자에 따라 LoadBalancer 서비스의 IP 주소는 외부에서 액세스할 수 있는 IP 주소 또는 FQDN 입니다. IP 주소 또는 FQDN 을 사용하여 외부 도메인의 트래픽을 라우팅할 수 있습니다.

5
6

원하는 복제본 세트 구성과 일치하도록 이 YAML파일의 설정을 변경합니다.

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-replica-set>
6spec:
7 members: 3
8 version: "4.2.2-ent"
9 type: ReplicaSet
10 opsManager:
11 configMapRef:
12 name: <configMap.metadata.name>
13 credentials: <mycredentials>
14 persistent: true
15 security:
16 tls:
17 enabled: true
18 connectivity:
19 replicaSetHorizons:
20 - "example-website": "web1.example.com:30907"
21 - "example-website": "web2.example.com:32350"
22 - "example-website": "web3.example.com:31185"
23...
7

원하는 텍스트 편집기를 열고 객체spec 붙여넣습니다. 섹션의 리소스 파일 끝에 있습니다.

8
유형
필요성
설명
예제
spec.connectivity
컬렉션
조건부

Kubernetes 외부에서 데이터베이스에 액세스해야 하는 경우 이 매개변수와 값을 추가하세요. 이 설정을 사용하면 Kubernetes 클러스터 내와 Kubernetes 클러스터에 다양한 DNS 설정을 제공할 수 있습니다. Kubernetes Operator는 복제본 세트 멤버에 대해 분할 수평 DNS를 사용합니다. 이 기능을 사용하면 Kubernetes 클러스터 내부와 Kubernetes 외부 모두에서 통신할 수 있습니다.

호스트당 여러 개의 외부 매핑을 추가할 수 있습니다.

참고

스플릿 호라이즌(Split Horizon) 요구 사항

spec.security
문자열
필수 사항
MongoDB deployment의 TLS 인증서가 포함된 시크릿 이름의 <prefix>을(를) 추가합니다.
devDb
9

spec.connectivity.replicaSetHorizons 설정의 외부 호스트 이름이 올바른지 확인하세요.

외부 호스트 이름은 Kubernetes 작업자 노드의 DNS 이름과 일치해야 합니다. 이는 Kubernetes 클러스터의 모든 노드가 될 수 있습니다. Kubernetes 노드는 파드가 다른 노드에서 실행되는 경우 내부 라우팅을 사용합니다.

spec.connectivity.replicaSetHorizons 의 포트를 외부 서비스 값으로 설정합니다.

예제

15 security:
16 tls:
17 enabled: true
18 connectivity:
19 replicaSetHorizons:
20 - "example-website": "web1.example.com:30907"
21 - "example-website": "web2.example.com:32350"
22 - "example-website": "web3.example.com:31185"
23...
10
11

디렉토리에서 다음 Kubernetes 명령을 호출하여 복제본 세트를 업데이트하고 다시 시작합니다.

kubectl apply -f <replica-set-conf>.yaml
12

개발 환경에서 복제본 세트의 각 호스트에 대해 다음 명령을 실행합니다.

mongosh --host <my-replica-set>/web1.example.com \
--port 30907
--ssl \
--sslAllowInvalidCertificates

참고

프로덕션 환경에서는 --sslAllowInvalidCertificates 플래그를 사용하지 마세요.

프로덕션 환경에서는 복제본 세트의 각 호스트에 대해 클라이언트 도구 또는 애플리케이션에 안전하게 연결할 수 있도록 TLS 인증서와 CA 를 지정합니다.

mongosh --host <my-replica-set>/web1.example.com \
--port 30907 \
--tls \
--tlsCertificateKeyFile server.pem \
--tlsCAFile ca-pem

연결에 성공하면 다음과 같은 내용이 표시됩니다.

Enterprise <my-replica-set> [primary]

Kubernetes 클러스터 외부에서 Kubernetes 연산자가 배포한 MongoDB 샤드 클러스터 리소스에 연결하려면 다음을 수행합니다.

1

샤드 클러스터를 배포하지 않은 경우 지침에 따라 샤드 클러스터를 배포합니다.

다음 설정을 구성하여 샤드 클러스터에 대해 TLS 를 활성화해야 합니다.

유형
필요성
설명
예제
spec.security
문자열
필수 사항
MongoDB deployment의 TLS 인증서가 포함된 시크릿 이름의 <prefix>을(를) 추가합니다.
devDb
컬렉션
옵션
이 배포의 각 포드에 대한 TLS 인증서에 추가해야 하는 모든 도메인의 목록입니다. 이 매개 변수를 설정하면 Kubernetes Operator가 TLS 인증서로 변환하는 모든 CSR<pod name>.<additional cert domain> 형식의 SAN이 포함됩니다.
example.com
2

외부 리소스에서 샤드 클러스터에 연결하려면 spec.externalAccess 설정을 구성합니다.

externalAccess: {}

이 설정은 Kubernetes Operator가 외부 LoadBalancer 를 생성하도록 지시합니다. 샤드 클러스터의 파드에 mongos 대한 서비스입니다. 외부 서비스는 외부 연결을 위한 진입점을 제공합니다. 값 없이 이 설정을 추가하면 다음 기본값을 사용하여 외부 서비스가 생성됩니다.

필드
설명
Name
<pod-name>-svc-external
외부 서비스의 이름입니다. 이 값은 변경할 수 없습니다.
Type
LoadBalancer
외부 LoadBalancer 서비스를 생성합니다.
Port
<Port Number>
mongod 에 대한 포트입니다.
publishNotReadyAddress
true
DNS 레코드 가 파드가 준비되지 않은 경우에도 생성됩니다. 데이터베이스 Pod에 대해 false 로 설정하지 마세요.

선택적으로 서비스에 값을 추가하거나 기본값을 재정의해야 하는 경우 다음을 지정합니다.

예를 들어, 다음 설정은 외부 서비스의 기본값을 재정의하여 NodePort 서비스 를 생성하도록 샤드 클러스터를 구성합니다.mongos 파드를 노출합니다.

externalAccess:
externalService:
annotations:
# cloud-specific annotations for the service
spec:
type: NodePort # default is LoadBalancer
port: 27017
# you can specify other spec overrides if necessary

자세한 내용은 Kubernetes 문서에서 주석서비스스펙을 참조하세요.

3

각 외부 DNS 이름을 인증서 SAN 에 추가합니다.

각 MongoDB 호스트는 다음 SAN을 사용합니다.

<my-sharded-cluster>-<shard>-<pod-index>.<external-domain>
<my-sharded-cluster>-config-<pod-index>.<external-domain>
<my-sharded-cluster>-mongos-<pod-index>.<external-domain>

mongos 인스턴스는 다음 SAN 을 사용합니다.

<my-sharded-cluster>-mongos-<pod-index>-svc-external.<external-domain>

다음 예제와 유사한 spec.security.tls.additionalCertificateDomains 설정을 구성합니다. 사용하는 각 TLS 인증서에는 샤드, config 서버 또는 mongos 인스턴스에 해당하는 SAN 이 포함되어야 합니다. Kubernetes Operator가 구성의 유효성을 검사합니다.

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-sharded-cluster>
6spec:
7 version: "4.2.2-ent"
8 opsManager:
9 configMapRef:
10 name: <configMap.metadata.name>
11 # Must match metadata.name in ConfigMap file
12 shardCount: 2
13 mongodsPerShardCount: 3
14 mongosCount: 2
15 configServerCount: 3
16 credentials: my-secret
17 type: ShardedCluster
18 externalAccess: {}
19 security:
20 tls:
21 certsSecretPrefix: <prefix>
22 additionalCertificateDomains:
23 - "<external-domain>"
24...
4

샤드 클러스터에서 다음 명령을 실행하여 Kubernetes Operator가 배포를 위한 외부 서비스를 생성했는지 확인합니다.

$ kubectl get services

이 명령은 다음 출력과 유사한 서비스 목록을 반환합니다. 클러스터의 각 mongos 인스턴스에 대해 Kubernetes Operator는 <pod-name>-<pod-idx>-svc-external 이라는 외부 서비스를 생성합니다. 이 서비스는 외부 서비스 사양에서 제공하는 값 및 재정의에 따라 구성됩니다.

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
<my-sharded-cluster>-mongos-0-svc-external LoadBalancer 10.102.27.116 <lb-ip-or-fqdn> 27017:27017/TCP 8m30s
<my-sharded-cluster>-mongos-1-svc-external LoadBalancer 10.102.27.116 <lb-ip-or-fqdn> 27017:27017/TCP 8m30s

클러스터 구성 또는 클라우드 제공자에 따라 LoadBalancer 서비스의 IP 주소는 외부에서 액세스할 수 있는 IP 주소 또는 FQDN 입니다. IP 주소 또는 FQDN 을 사용하여 외부 도메인의 트래픽을 라우팅할 수 있습니다. 이 예제에는 두 개의 mongos 인스턴스가 있으므로 Kubernetes Operator는 두 개의 외부 서비스를 생성합니다.

5

Kubernetes 클러스터 외부에서 배포서버에 연결하려면 MongoDB Shell(mongosh)을 사용하고 외부 도메인을 통해 노출한 mongos 인스턴스의 주소를 지정합니다.

예제

및 의 외부 FQDN<my-sharded-cluster>-mongos-0-svc-external.<external-domain> <my-sharded-cluster>-mongos-1-svc-external.<external-domain> <my-sharded-cluster><external-domain>있는 경우<my-sharded-cluster>1<external-domain>-mongos-0-svc-external. 에서 다음 명령을 사용하여 Kubernetes 클러스터 외부에서 이 샤드 클러스터 인스턴스에 연결할 수 있습니다.

mongosh ""

돌아가기

Kubernetes 내부에서 MongoDB 데이터베이스 리소스에 연결하기

다음

여러 Kubernetes 클러스터에 MongoDB 리소스 배포하기

이 페이지의 내용