Docs 菜单
Docs 主页
/
MongoDB Enterprise Kubernetes Operator
/ /

从外部 Kubernetes 连接到多集群资源

在此页面上

  • 先决条件
  • 注意事项
  • 步骤

以下过程介绍如何从 Kubernetes 集群外部连接到 Kubernetes 中部署的 MongoDBMultiCluster资源。

运行 MongoDB 4.2.3 或更高版本的数据库允许您在 Kubernetes 集群外部访问这些数据库。

如果您创建的自定义服务需要从外部访问 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 集群外部的MongoDBMultiCluster资源连接到由 Kubernetes 操作符部署的副本集:

1
2

为以下内容提供值:

  • spec.security.certsSecretPrefix 中的 TLS密钥

  • 中的自定义 CA spec.security.tls.ca证书。

3

要从外部资源连接到多 Kubernetes 集群部署,请配置spec.externalAccess 设置:

externalAccess: {}

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

字段
说明
Name
<pod-name>-svc-external
外部服务的名称。您无法更改此值。
Type
LoadBalancer
创建外部 LoadBalancer 服务。
Port
<Port Number>
mongod的端口。
publishNotReadyAddress
true
指定 DNS 记录 即使 Pod 尚未准备就绪,也会创建。对于任何数据库 Pod,请勿设置为false

(可选)如果您需要向服务添加值或覆盖默认值,请指定:

例如,以下设置覆盖外部服务的默认值,以配置多 Kubernetes 集群部署以创建 NodePort 服务 公开 MongoDB Pod:

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

4

如果您需要为特定集群成员配置设置,例如当您在不同的云提供商上托管成员时,您可以覆盖全局spec.externalAccess 特定成员的设置,方法是使用spec.clusterSpecList.externalAccess.externalService 设置。

要向服务添加值或覆盖集群成员的默认值,请指定:

例如,以下文件将配置多Kubernetes 集群MongoDB 部署,以创建负载均衡器服务,从而为Kubernetes MongoDBGKE (GoogleKubernetes Engine) 中部署的集群成员公开多 集群 部署 和Amazon Web Services EKS。

注意

以下示例未配置覆盖项,因此外部服务使用默认值从spec.externalAccess设置。

clusterSpecList:
- clusterName: gke-cluster-0.mongokubernetes.com
members: 2
externalAccess:
externalService:
annotations:
"cloud.google.com/l4-rbs": "enabled"
- clusterName: eks-cluster-1.mongokubernetes.com
members: 2
externalAccess:
externalService:
annotations:
"service.beta.kubernetes.io/aws-load-balancer-type": "external",
"service.beta.kubernetes.io/aws-load-balancer-nlb-target-type": "instance",
"service.beta.kubernetes.io/aws-load-balancer-scheme": "internet-facing"
5

将每个外部DNS名称添加到证书SAN

6

在每个集群中,运行以下命令,验证 Kubernetes 操作符是否为您的部署创建了外部服务。

$ kubectl get services

该命令将返回类似于以下输出的服务列表。 对于集群中的每个数据库 Pod,Kubernetes 操作符都会创建一个名为 <pod-name>-<cluster-idx>-<pod-idx>-svc-external 的外部服务。此服务是根据您在外部服务规范中提供的值和覆盖项进行配置的。

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

根据您的集群配置或云提供商,LoadBalancer 服务的 IP 地址是外部可访问的 IP 地址或 FQDN。您可以使用 IP 地址或 FQDN 路由来自外部域的流量。

7

spec.connectivity.replicaSetHorizons中的主机名和端口设置为您在上一步中创建的外部服务值。

确认您指定了正确的外部主机名。 外部主机名应与 Kubernetes Worker 节点的DNS名称匹配。 这些节点可以是 Kubernetes 集群中的任何节点。 如果 Pod 在其他节点上运行,Kubernetes 节点将使用内部路由。

apiVersion: mongodb.com/v1
kind: MongoDBMultiCluster
metadata:
name: multi-cluster-replica-set
namespace: mongodb
spec:
clusterSpecList:
- clusterName: e2e.cluster1.example.com
members: 1
- clusterName: e2e.cluster2.example.com
members: 1
- clusterName: e2e.cluster3.example.com
members: 1
connectivity:
replicaSetHorizons:
- sample-horizon: web1.example.com:30907
- sample-horizon: web2.example.com:30907
- sample-horizon: web3.example.com:30907
credentials: my-credentials
duplicateServiceObjects: false
opsManager:
configMapRef:
name: my-project
persistent: true
security:
certsSecretPrefix: clustercert
tls:
ca: ca-issuer
type: ReplicaSet
version: 6.0.0-ent"
8

在每个集群中,运行以下命令以应用更新的副本集文件:

$ Kubectl apply -f <file_name.yaml>
9

在开发环境中,对于副本集中的每个主机,运行以下命令:

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]

后退

访问资源