【问题标题】:Unable to connect to MongoDB Atlas from GKE pod无法从 GKE pod 连接到 MongoDB Atlas
【发布时间】:2020-02-19 07:26:37
【问题描述】:

我有一个在 Google Cloud Kubernetes 上运行的 pod,我有一个在 Atlas 上运行的 MongoDB 集群。 问题很简单:

如果我允许来自 Atlas MongoDB 上任何地方的 IP,我可以连接。 如果我添加 pod 的 IP(所以不再来自 ANYWHERE),它不起作用。

我也在本地尝试过,并且也从本地运行的 docker 中进行了尝试,它可以工作。

我使用以下方法获得了我的 pod 的 IP (YY.YYY.YYY.YY):

MacBook-Pro-de-Emixam23:plop-service emixam23$ kubectl get services
NAME           TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                           AGE
polop-service  LoadBalancer   XX.XX.X.XXX   YY.YYY.YYY.YY   ZZZZZ:32633/TCP,ZZZZZ:32712/TCP   172m
kubernetes     ClusterIP      XX.X.X.X      <none>          443/TCP                           3h24m

但是根据我得到的行为..我觉得这个 EXTERNAL-IP 不是我的请求发送的 IP。

谁能向我解释可能是什么问题?

【问题讨论】:

  • 我遇到了类似的问题。与 Ingress 负载均衡器关联的一个 pod 正在工作,但在同一节点上运行的另一个 pod 无法访问它。无法访问 mongodb Atlas 的 pod 只是一个 cronjob pod。
  • 我猜是因为请求不是由 pod 本身发送的,不记得了,但是是的,请求可能是通过 Kubernetes 集群的另一个 IP 传递的
  • 感谢您的回复,添加了Kubernetes集群的每个ip范围,但仍然无法正常工作。不知道是不是因为也需要访问一些电子邮件发送协议:D

标签: mongodb kubernetes ip kubernetes-pod mongodb-atlas


【解决方案1】:

暴露给 Mongo Atlas 的 IP 应该是 Internet 可访问的 IP(或称为公共 IP)。

通常它应该是网络网关 IP(或代理服务器的 IP,如果您使用代理)。

一种通过在 pod 中运行以下命令来检查 IP 的快速方法

curl ifconfig.me

如果您的 pod 不支持此命令,您可以在其中 kubectl exec -ti &lt;pod_name&gt; -- sh 并安装此命令。

记住:通常IP不是只有一个,应该有3个或更多通过网络网关面向公众的IP,你需要找到它们并添加到Mongo Atlas白名单

【讨论】:

  • 我放的IP实际上是负载均衡器,请求是从pod本身发出的。它有另一个IP,所以我错了。但是,这意味着每次启动的每个 pod 都会有一个新的 IP,这肯定是不可管理的,不是吗?
  • 负载均衡器的 IP 是入口 IP,而不是出口 IP。您需要的是 pod 的出口 IP,它们将用于连接到 Mongo Atlas。
  • 我怎样才能得到它们? (入口 IP 列表)您是否需要有关我的 service.yaml 或与我的 pod 相关的任何内容的更多详细信息?
  • k8s 很可能会使用 pod 当前运行的节点的接口公共 ip,因此使用 kubectl get pod &lt;podname&gt; -owide 来识别 pod 被调度的节点,然后使用 kubectl get no &lt;node_name&gt; -owide 来识别节点的外部 ip。
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 2020-09-18
  • 2020-09-13
  • 2019-10-31
  • 2019-06-08
  • 2020-04-25
  • 2019-10-13
  • 2021-06-25
相关资源
最近更新 更多