gpt4 book ai didi

node.js - 从AWS lambdas访问kubernetes集群中的Mongo副本

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:54 25 4
gpt4 key购买 nike

我的一些数据位于 Mongo 副本中,这些副本托管在 kubernetes 集群中运行的 docker 容器中。我需要从在同一 VPC 和子网中运行的 AWS lambda 访问此数据(作为带有 mongo db 的 kubernetes minion)。 lambda 以及 kubernetes minion(托管 mongo 容器)在同一安全组下运行。我尝试使用 url“mongodb://mongo-rs-1-svc,mongo-rs-2-svc,mongo-rs-3-svc/res?replicaSet=mongo_rs”进行连接,其中 mongo-rs-x-svc 是三个 kubernetes 服务,可以访问适当的副本。当我尝试使用此 URL 进行连接时,它无法解析 mongo 副本 URL(例如 mongo-rs-2-svc)。对于在同一 kubernetes 集群中自己的 docker 容器中运行的 Web 服务,相同的 URL 可以正常工作。

这是我从我使用的 mongo 客户端得到的错误...{\"name\":\"MongoError\",\"message\":\"第一次连接时无法连接到服务器 [mongo-rs-1-svc:27017] [MongoError: getaddrinfo ENOTFOUND mongo-rs-1-svc mongo-rs-1-svc:27017]\"}"。我尝试将 mongo-rs-x-svc 替换为 url 中的内部 ip 地址。在这种情况下,上述名称解析错误消失了,但出现了另一个错误 - {\"name\":\"MongoError\",\"message\":\"第一次连接时无法连接到服务器 [10.0.170.237:27017] [MongoError: 连接 5 到 10.0.170.237:27017 超时]\"}

我应该做什么才能成功启用此访问?

我知道我可以使用 Web 服务作为中介来访问此数据,但由于我的 lambda 位于 VPC 中,因此我必须部署 NAT 网关,这会增加成本。有没有办法使用内部端点而不是公共(public) url 来访问 Web 服务?可能这是获取数据的另一种方式。

如果你们有针对这种情况的解决方案,请分享。我浏览了许多显示为类似问题或搜索结果的线程,但都没有针对这种情况的解决方案。

最佳答案

这是 Kubernetes 的一个常见混淆。默认情况下,Kubernetes 中的 Service 对象只能从 Kubernetes 内部访问(即当设置 type: ClusterIP 时)。如果您希望能够从集群外部访问它,则需要编辑服务,使其类型为 type: NodePorttype: LoadBalancer

我不太确定,但听起来您的网络设置允许您在 Kubernetes 中为您的 Service 使用 type: NodePort 。这将在集群中的每个 Node 上打开一个高编号端口(例如 32XXX),转发到您的 Mongo Pod。服务名称的 DNS 解析(例如 mongo-rs-1-svc)只能在 Kubernetes 集群内部工作,但通过使用 NodePort,我认为您应该能够将它们寻址为 mongodb://ec2-instance-1-ip:32XXX,ec2-instance-2-ip:32XXX,...

关于node.js - 从AWS lambdas访问kubernetes集群中的Mongo副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com