如何在 Kubernetes 中公开和访问 MongoDb 端口?

如何在 Kubernetes 中公开和访问 MongoDb 端口?

我在 Kubernetes 上部署了 mongoDB。数据库已正确设置,可以使用其内部 DNS 名称进行访问。

我需要将其暴露给外界。我已使用节点端口/负载均衡器暴露端口 27017,但无法使用 IP:port 连接到该端口。使用 IP:Port 的 Web 应用程序没有遇到问题,不确定如何对数据库执行此操作。

如果尝试浏览,http://Kubernetes_Public_IP:NodePort给我以下错误消息 - 看起来您正在尝试通过本机驱动程序端口上的 HTTP 访问 MongoDB。

我正在使用 robomongo 连接数据库。使用 RoboMongo,将地址设置为 Kubernetes 公共 IP,将端口设置为 NodePort,我收到以下错误 - 无法连接到 Kubernetes_Public_IP:NodePort

需要帮助公开端口并使用任何类型的代理连接到它(不需要 robomongo)。

答案1

在 Kubernetes 中,如果要向外界暴露某个端口,可以使用类型为 NodePort 的 Service 或者 LoadBalancer。

类型 LoadBalancer 通常在云提供商上使用,因为它们为 Kubernetes 提供外部负载均衡器。

因此,对于您来说,NodePort 是公开端口的最简单方法。以下是服务 YAML 的示例:

kind: Service
apiVersion: v1
metadata:
  name: mongodb-service
spec:
  type: NodePort
  selector:
    app: mongodb
  ports:
    - port: 27017
      nodePort: 32463 
      name: MongoPort

在行中port: 27017,我们指定了您的 MongoDB 端口,它通常也在 MongoDB 的部署中指定。

在行中nodePort: 32463,我们指定了外部端口。在那里,可以发布 30000-32767 范围内的任何端口。或者可以在创建过程中跳过它,在这种情况下,Kubernetes 会自动分配端口号,您可以使用kubectl describe service mongodb-servicekubectl get service mongodb-service -o yaml命令找到它。

之后,您可以使用任何客户端(例如 RoboMongo)访问 MongoDB。您需要使用任何节点的 IP 地址和线路上的端口nodePort,而不是线路上的端口port

例如,如果您有一个包含三个节点的集群,其外部 IP 地址分别为 12.13.14.151、12.13.14.152、12.13.14.153,那么您可以在 RoboMongo 连接设置中使用12.13.14.151:3246312.13.14.152:32463、中的任意一个。12.13.14.153:32463

有关服务的更多信息,您可以查看以下链接:

发布服务 - 服务类型

相关内容