Docs Menu
Docs Home
/
MongoDB Enterprise Kubernetes 演算子
/ /

Kubernetes の外部から MongoDB Database リソースへの接続

項目一覧

  • 前提条件
  • Considerations
  • 手順

次の手順では、Kubernetes クラスターの外部から Kubernetes に配置された MongoDB リソースに接続する方法について説明します。

Kubernetes 外からデータベースにアクセスするには、MongoDB 4.2.3 以降を実行する必要があります。

Kubernetes Operator によって配置された MongoDB カスタム リソースへの外部アクセスを必要とするカスタム サービスを作成し、Kubernetes で準備状況検証を使用する場合は、Kubernetes の publishNotReadyAddresses設定をtrueに設定します。

publishNotReadyAddresses設定は、このサービスのエンドポイントを操作するエージェントが、サービスの ready 状態を無視する必要があることを示します。publishNotReadyAddressestrue に設定すると、サービスをホストしているポッド用に構成された準備状況の動作が上書きされます。

デフォルトでは、 publishNotReadyAddresses設定はfalseに設定されています。 この場合、MongoDB KubernetesOperator で カスタム リソースをホストするポッドがCloud Manager またはMongoDB Ops Manager への接続を失うと、これらのポッドに構成された準備状況は失敗します。ただし、 publishNotReadyAddressesの設定をtrueに設定すると、次の効果が生じます。

  • Kubernetes は、準備状況調査に失敗したサービスをシャットダウンしません。

  • Kubernetes はすべてのエンドポイントを 準備完了 と見なします これらのエンドポイントのサービスをホストしているポッドの検証が、準備ができていないことを示していても。

  • MongoDB のカスタム リソースは、読み取りおよび書込み操作で引き続き使用できます。

Tip

以下も参照してください。

次の手順では、 Kubernetes Operator に組み込まれている構成オプションを使用して、配置の外部接続を構成するプロセスについて説明します。

Kubernetes Operator が Kubernetes クラスターの外部から配置した MongoDB リソースにどのように接続するかは、リソースによって異なります。

Kubernetes クラスターの外部から Kubernetes Operator が配置した 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 Operator に外部 LoadBalancer を作成するように指示します スタンドアロン リソース内の MongoDB ポッドのサービス。外部サービスは、外部接続のエントリポイントを提供します。 値なしでこの設定を追加すると、次のデフォルト値を持つ外部サービスが作成されます。

フィールド
説明
Name
<pod-name>-svc-external
外部サービスの名前。 この値は変更できません。
Type
LoadBalancer
Port
<Port Number>
mongodのポート。
publishNotReadyAddress
true
DNS レコード を指定する は、Ped が準備ができていない場合でも作成されます。どのデータベース ポッドでもfalseに設定しないでください。

オプションとして、サービスに値を追加したり、デフォルト値を上書きしたりする必要がある場合は、次を指定します。

たとえば、次の設定は外部サービスのデフォルト値を上書きし、スタンドアロン リソースを構成して NodePort サービス を作成します。 MongoDB ポッドを公開する:

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

Tip

詳細については、 注釈 を参照してください および ServiceSpec (Kubernetes ドキュメント)。

3

スタンドアロン リソースで次のコマンドを実行して、Kubernetes Operator が配置用の外部サービスを作成したことを確認します。

$ kubectl get services

このコマンドは、次の出力のようなサービスのリストを返します。 Kubernetes Operator は、クラスター内の各データベース<pod-name> ポッドに対して、"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 Shell( mongosh )を使用し、外部ドメインを通じて公開した MongoDB ポッド アドレスを指定します。

外部FQDN<my-standalone>.<external-domain>の場合は、次のコマンドを使用して、Kubernetes クラスターの外部からこのシャーディングされたクラスターのインスタンスに接続できます。

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

重要

この手順では、外部接続を有効にする最も簡単な方法について説明します。 本番環境では他のユーティリティを使用できます。

Kubernetes クラスターの外部から Kubernetes Operator が配置した MongoDB レプリカセット リソースに接続するには、次の手順に従います。

1

レプリカセットを配置していない場合は、手順に従ってレプリカセットを配置します。

設定の値を指定して、レプリカセットでspec.security.certsSecretPrefix TLS を有効にする必要があります。レプリカセットでは、 に保存されているカスタム CA spec.security.tls.ca証明書を使用する必要があります。

2

外部リソースからレプリカセットに接続するには、 spec.externalAccessを構成します 設定:

externalAccess: {}

この設定は、Kubernetes Operator に外部 LoadBalancer を作成するように指示します サービスを使用して、レプリカセット内の MongoDB ポッドに接続します。外部サービスは、外部接続のエントリポイントを提供します。 値なしでこの設定を追加すると、次のデフォルト値を持つ外部サービスが作成されます。

フィールド
説明
Name
<pod-name>-svc-external
外部サービスの名前。 この値は変更できません。
Type
LoadBalancer
Port
<Port Number>
mongodのポート。
publishNotReadyAddress
true
DNS レコード を指定する は、Ped が準備ができていない場合でも作成されます。どのデータベース ポッドでもfalseに設定しないでください。

オプションとして、サービスに値を追加したり、デフォルト値を上書きしたりする必要がある場合は、次を指定します。

たとえば、次の設定は外部サービスのデフォルト値を上書きし、 NodePort サービス を作成するようにレプリカセットを構成します。 MongoDB ポッドを公開する:

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

Tip

詳細については、 注釈 を参照してください および ServiceSpec (Kubernetes ドキュメント)。

3

各外部DNS名を証明書SANに追加します。

4

レプリカセットで次のコマンドを実行して、Kubernetes Operator が配置用の外部サービスを作成したことを確認します。

$ kubectl get services

このコマンドは、次の出力のようなサービスのリストを返します。 Kubernetes Operator は、クラスター内の各データベース<pod-name> <pod-idx>ポッドに対して、[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

クラスター構成またはクラウドプロバイダーによっては、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 外部からの両方で通信が可能になります。

ホストごとに複数の外部マッピングを追加できます。

スプリットホライゾンの要件

spec.security
string
必須
MongoDB 配置の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 Operator が配置した MongoDB のシャーディングされたクラスター リソースに接続するには、次の手順に従います。

1

シャーディングされたクラスターを配置していない場合は、手順に従ってシャーディングします

次の設定を構成して、シャーディングされたクラスターのTLSを有効にする必要があります。

キー
タイプ
必要性
説明
spec.security
string
必須
MongoDB 配置のTLS証明書を含むシークレット名の<prefix>を追加します。
devDb
コレクション
任意
この配置内の各ポッドへのTLS証明書に追加する必要があるすべてのドメインのリスト。 このパラメーターを設定すると、Kubernetes Operator が TLS 証明書に変換するすべての CSR に、形式 の SAN が含まれ<pod name>.<additional cert domain>
example.com
2

外部リソースからシャーディングされたクラスターに接続するには、 spec.externalAccessを設定します 設定:

externalAccess: {}

この設定は、Kubernetes Operator に外部 LoadBalancer を作成するように指示しますmongos シャーディングされたクラスター内の ポッドのサービス外部サービスは、外部接続のエントリポイントを提供します。 値なしでこの設定を追加すると、次のデフォルト値を持つ外部サービスが作成されます。

フィールド
説明
Name
<pod-name>-svc-external
外部サービスの名前。 この値は変更できません。
Type
LoadBalancer
Port
<Port Number>
mongodのポート。
publishNotReadyAddress
true
DNS レコード を指定する は、Ped が準備ができていない場合でも作成されます。どのデータベース ポッドでも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

Tip

詳細については、 注釈 を参照してください および ServiceSpec (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証明書には、シャード、コンフィギュレーションサーバー、または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

このコマンドは、次の出力のようなサービスのリストを返します。 Kubernetes Operator は、クラスター内の各mongosインスタンスに対して、 <pod-name>-<pod-idx>-svc-externalという名前の外部サービスを作成します。 This service is configured according to the values and overrides you provide in the external service specification.

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を使用して、外部ドメインからのトラフィックをルーティングできます。 この例には 2 つのmongosインスタンスがあるため、Kubernetes Operator は 2 つの外部サービスを作成しています。

5

Kubernetes クラスターの外部から配置に接続するには、MongoDB Shell( mongosh )を使用し、外部ドメインを通じて公開したmongosインスタンスのアドレスを指定します。

<my-sharded-cluster>-mongos-0-svc-external.<external-domain><my-sharded-cluster>-mongos-1-svc-external.<external-domain> addressCommand の外部 FQDN がある場合:MongoDB ://[my-sharded-cluster]>-mongos-<my-sharded-cluster> -svc-external.{external-domain>、[my-sharded-cluster] -mongos-0<external-domain> <my-sharded-cluster>1-svc-external.<external-domain> ,次のコマンドを使用して、Kubernetes クラスターの外部からこのシャーディングされたクラスターのインスタンスに接続できます。

mongosh ""

戻る

Inside Kubernetes