次の手順では、Kubernetes クラスターの外部から Kubernetes に配置された MongoDB リソースに接続する方法について説明します。
前提条件
互換性のある MongoDB バージョン
Kubernetes 外からデータベースにアクセスするには、MongoDB 4.2.3 以降を実行する必要があります。
Considerations
Readness Probe の上書きの設定
Kubernetes Operator によって配置された MongoDB カスタム リソースへの外部アクセスを必要とするカスタム サービスを作成し、Kubernetes で準備状況検証を使用する場合は、Kubernetes のpublishNotReadyAddresses設定をtrueに設定します。
publishNotReadyAddresses 設定は、このサービスのエンドポイントを操作するエージェントが、サービスの準備完了状態を無視する必要があることを示しています。publishNotReadyAddresses を true に設定すると、サービスをホストしているポッド用に構成された準備状況の動作が上書きされます。
デフォルトでは、 publishNotReadyAddresses設定はfalseに設定されています。 この場合、MongoDB KubernetesOperator で カスタム リソースをホストするポッドがCloud Manager またはMongoDB Ops Manager への接続を失うと、これらのポッドに構成された準備状況は失敗します。ただし、 publishNotReadyAddressesの設定をtrueに設定すると、次の効果が生じます。
Kubernetes は、準備状況調査に失敗したサービスをシャットダウンしません。
Kubernetes、これらのエンドポイントのサービスをホストしているポッドの検証で準備ができていることが示されている場合でも、すべてのエンドポイントが準備ができていると見なされます。
MongoDB のカスタム リソースは、読み取りおよび書込み操作で引き続き使用できます。
Tip
Kubernetes API参照 して
publishNotReadyAddressesを検索
手順
次の手順では、 Kubernetes Operator に組み込まれている構成オプションを使用して、配置の外部接続を構成するプロセスについて説明します。
Kubernetes Operator が Kubernetes クラスターの外部から配置した MongoDB リソースにどのように接続するかは、リソースによって異なります。
Kubernetes クラスターの外部から Kubernetes Operator が配置した MongoDB スタンドアロン リソースに接続するには:
Kubernetes Operator を使用してスタンドアロン リソースを配置します。
スタンドアロン リソースを配置していない場合は、手順に従ってスタンドアロン リソースを配置します。
この手順では、次の例を使用します。
20 21 apiVersion: mongodb.com/v1 22 kind: MongoDB 23 metadata: 24 name: <my-standalone> 25 spec: 26 version: "8.0.0" 27 opsManager: 28 configMapRef: 29 name: <configMap.metadata.name> 30 # Must match metadata.name in ConfigMap file 31 credentials: <mycredentials> 32 type: Standalone 33 ...
MongoDB ポッドの外部サービスを作成します。
外部リソースからスタンドアロン リソースに接続するには、 spec.externalAccessを構成します 設定:
externalAccess: {}
この設定は、 Kubernetes Operator に対して、スタンドアロンリソース内のMongoDBポッド用の外部 LoadBalancer サービスを作成することを指示します。外部サービスは、外部接続のエントリ点を提供します。値なしでこの設定を追加すると、次のデフォルト値を持つ外部サービスが作成されます。
フィールド | 値 | 説明 |
|---|---|---|
|
| 外部サービスの名前。 この値は変更できません。 |
|
| 外部 LoadBalancer サービスを作成します。 |
|
| A port for |
|
| ポッドが準備ができていない場合でも DNS レコードが作成されることを指定します。どのデータベースポッドでも |
オプションとして、サービスに値を追加したり、デフォルト値を上書きしたりする必要がある場合は、次を指定します。
クラウドプロバイダーに固有の注釈( )
spec.externalAccess.externalService.annotationsサービス仕様のオーバーライド(
spec.externalAccess.externalService.spec。
例、次の設定は外部サービスのデフォルト値を上書きし、 MongoDBポッドを公開する 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
Tip
詳細については、 Kubernetesドキュメントの 注釈 と ServiceSpec を参照してください。
外部サービスを確認します。
スタンドアロン リソースで次のコマンドを実行して、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を使用して、外部ドメインからのトラフィックをルーティングできます。
重要
この手順では、外部接続を有効にする最も簡単な方法について説明します。 本番環境では他のユーティリティを使用できます。
Kubernetes クラスターの外部から Kubernetes Operator が配置した MongoDB レプリカセット リソースに接続するには、次の手順に従います。
Kubernetes Operator を使用してレプリカセットを配置します。
レプリカセットを配置していない場合は、手順に従ってレプリカセットを配置します。
レプリカセットのTLSを有効にするには、spec.security.certsSecretPrefix設定の値を指定する必要があります。レプリカセットは、 とともに保存されているカスタムの CAspec.security.tls.ca 証明書を使用する必要があります。
MongoDB ポッドの外部サービスを作成します。
外部リソースからレプリカセットに接続するには、 spec.externalAccessを構成します 設定:
externalAccess: {}
この設定は、 Kubernetes Operator に対して、 レプリカセット内のMongoDBポッド用の外部 LoadBalancer サービスを作成するように指示します。外部サービスは、外部接続のエントリ点を提供します。値なしでこの設定を追加すると、次のデフォルト値を持つ外部サービスが作成されます。
フィールド | 値 | 説明 |
|---|---|---|
|
| 外部サービスの名前。 この値は変更できません。 |
|
| 外部 LoadBalancer サービスを作成します。 |
|
| A port for |
|
| ポッドが準備ができていない場合でも DNS レコードが作成されることを指定します。どのデータベースポッドでも |
オプションとして、サービスに値を追加したり、デフォルト値を上書きしたりする必要がある場合は、次を指定します。
クラウドプロバイダーに固有の注釈( )
spec.externalAccess.externalService.annotationsサービス仕様のオーバーライド(
spec.externalAccess.externalService.spec。
例、次の設定は外部サービスのデフォルト値を上書きし、 MongoDBポッドを公開する 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
Tip
詳細については、 Kubernetesドキュメントの 注釈 と ServiceSpec を参照してください。
外部サービスを確認します。
レプリカセットで次のコマンドを実行して、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を使用して、外部ドメインからのトラフィックをルーティングできます。
Copy the sample replica set resource.
Change the settings of this YAML file to match your desired replica set configuration.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-replica-set> 6 spec: 7 members: 3 8 version: "8.0.0" 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 ...
コピーした例セクションを既存のレプリカセットリソースに貼り付けます。
強調表示された設定を希望する値に変更します。
キー | タイプ | 必要性 | 説明 | 例 |
|---|---|---|---|---|
| コレクション | 条件付き | Kubernetes 外でデータベースにアクセスする必要がある場合は、このパラメータと値を追加します。 この設定により、Kubernetes クラスター内と Kubernetes クラスターに対して異なるDNS設定を提供できます。 Kubernetes Operator は、レプリカセット ノードに スプリット ホライゾンDNSを使用します。 この機能により、Kubernetes クラスター内と Kubernetes 外部からの両方で通信が可能になります。 ホストごとに複数の外部マッピングを追加できます。 スプリットホライゾンの要件
| |
| string | 必須 | MongoDB 配置のTLS証明書を含むシークレット名の |
|
レプリカセット リソースで外部ホスト名と外部サービス値を確認します。
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 ...
Save your replica set config file.
Update and restart your replica set deployment.
In any directory, invoke the following Kubernetes command to update and restart your replica set:
kubectl apply -f <replica-set-conf>.yaml
レプリカセットへの接続をテストします。
開発環境では、レプリカセット内の各ホストに対して、次のコマンドを実行します。
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 のシャーディングされたクラスター リソースに接続するには、次の手順に従います。
Kubernetes Operator を使用してシャーディングされたクラスターを配置します。
シャーディングされたクラスターを配置していない場合は、手順に従ってシャーディングします。
次の設定を構成して、シャーディングされたクラスターのTLSを有効にする必要があります。
キー | タイプ | 必要性 | 説明 | 例 |
|---|---|---|---|---|
| string | 必須 | MongoDB 配置のTLS証明書を含むシークレット名の |
|
| コレクション | 任意 | この配置の各ポッドの TLS 証明書に追加すべきすべてのドメインのリスト。このパラメータを設定すると、Kubernetes 演算子が TLS 証明書に変換するすべての CSR には、 の形式の SAN |
|
mongos ポッドの外部サービスを作成します。
外部リソースからシャーディングされたクラスターに接続するには、 spec.externalAccessを設定します 設定:
externalAccess: {}
この設定は、 Kubernetes Operator に対して、シャーディングされたクラスター内の mongos ポッド用の外部 LoadBalancer サービスを作成するように指示します。外部サービスは、外部接続のエントリ点を提供します。値なしでこの設定を追加すると、次のデフォルト値を持つ外部サービスが作成されます。
フィールド | 値 | 説明 |
|---|---|---|
|
| 外部サービスの名前。 この値は変更できません。 |
|
| 外部 LoadBalancer サービスを作成します。 |
|
| A port for |
|
| ポッドが準備ができていない場合でも DNS レコードが作成されることを指定します。どのデータベースポッドでも |
オプションとして、サービスに値を追加したり、デフォルト値を上書きしたりする必要がある場合は、次を指定します。
クラウドプロバイダーに固有の注釈( )
spec.externalAccess.externalService.annotationsサービス仕様のオーバーライド(
spec.externalAccess.externalService.spec。
例、次の設定は外部サービスのデフォルト値を上書きし、 ポッドを公開する 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
詳細については、 Kubernetesドキュメントの 注釈 と ServiceSpec を参照してください。
TLS 証明書にサブジェクト代替名を追加します。
各外部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>
The mongos instance uses the following SAN:
<my-sharded-cluster>-mongos-<pod-index>-svc-external.<external-domain>
以下の例と同様に、spec.security.tls.additionalCertificateDomains の設定を行ってください。使用する各 TLS 証明書には、シャード、コンフィギュレーションサーバー、または mongos インスタンスの対応する SAN が含まれている必要があります。Kubernetes 演算子 は構成を検証します。
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-sharded-cluster> 6 spec: 7 version: "8.0.0" 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 ...
外部サービスを確認します。
シャーディングされたクラスターで次のコマンドを実行して、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 演算子は 2 つの外部サービスを作成します。
シャーディングされたクラスターへの接続をテストします。
Kubernetes クラスターの外部から配置に接続するには、MongoDB Shell( mongosh )を使用し、外部ドメインを通じて公開したmongosインスタンスのアドレスを指定します。
例
<my-sharded-cluster>-mongos-0-svc-external.<external-domain> と <my-sharded-cluster>-mongos-1-svc-external.<external-domain> のアドレスの外部 FQDN がある場合、コマンド: mongodb://<my-sharded-cluster>-mongos-0-svc-external.<external-domain>,<my-sharded-cluster>-mongos-1-svc-external.<external-domain>,次のコマンドを使用すると、Kubernetes クラスターの外からこのシャーディングされたクラスター インスタンスに接続できます。
mongosh ""