对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

从外部 Kubernetes 连接 MongoDB 数据库资源

以下过程描述如何从 Kubernetes 集群外部连接到 Kubernetes 中部署的 MongoDB 资源。

为了支持在 Kubernetes 外部访问您的数据库,它们必须运行 MongoDB 4.2.3 或更高版本。

如果您创建的自定义服务需要从外部访问 Kubernetes Operator 部署的 MongoDB 自定义资源并在 Kubernetes 中使用就绪探针(readiness probe),请将 Kubernetes 中的 publishNotReadyAddresses 设置为 true。

publishNotReadyAddresses 设置指示与此服务的端点交互的代理应忽略该服务的就绪状态。将 publishNotReadyAddresses 设置为 true 会覆盖为托管服务的 Pod 配置的就绪探针的行为。

默认情况下,publishNotReadyAddresses 设置为false。在这种情况下,当 Kubernetes Operator 中托管 MongoDB 自定义资源的 Pod 失去与 Cloud Manager 或 Ops Manager 的连接时,为这些 Pod 配置的就绪探针将失败。但是,如果将 publishNotReadyAddresses 设置为 true:

  • Kubernetes 不会关闭就绪探针失效的服务。

  • Kubernetes会将所有端点视为已就绪,即使托管这些端点的服务的 Pod 的探测器显示这些端点尚未准备就绪。

  • MongoDB 自定义资源仍可用于读写操作。

提示

以下操作步骤将引导您使用 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: "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...
2

要从外部资源连接到独立资源,请配置 spec.externalAccess设置:

externalAccess: {}

此设置指示Kubernetes Operator 为独立运行资源中的MongoDB Pod 创建外部 LoadBalancer 服务。外部服务为外部连接提供入口点。添加此不带值的设置会创建具有以下默认值的外部服务:

字段
值
说明

Name

<pod-name>-svc-external

外部服务的名称。您无法更改此值。

Type

LoadBalancer

创建外部 LoadBalancer 服务。

Port

<Port Number>

mongod 的端口。

publishNotReadyAddress

true

指定即使 Pod 尚未准备就绪,也会创建 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文档中的注解和 ServiceSpec。

3

在独立资源中,运行以下命令以验证 Kubernetes Operator 是否为您的部署创建了外部服务。

$ kubectl get services

该命令返回类似于以下输出的服务列表。对于集群中的每个数据库 Pod,Kubernetes Operator 创建一个名为 <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 Pod 地址。

例子

如果您的外部 FQDN 为 <my-standalone>.<external-domain>,则可以使用以下命令从Kubernetes集群外部连接到此分片集群实例:

mongosh "mongodb://<my-standalone>.<external-domain>"
给本页内容打分