【问题标题】:Google Compute Engine timeout when attempting connection over VPC to MongoDB Atlas尝试通过 VPC 连接到 MongoDB Atlas 时,Google Compute Engine 超时
【发布时间】:2021-01-10 18:22:14
【问题描述】:

我正在执行 mongoexport,然后执行 BigQuery 加载 5000 万条记录集合 我所有的云功能和应用程序引擎实例都通过 VPC 对等连接设置通过无服务器 VPC 很好地连接到 Mongo Atlas 访问我们在 GCP 中托管的 Atlas

但是,我无法让 Compute Engine 实例通过我们的 VPC 进行连接。当我添加 Compute Engine 实例外部 IP 时,它可以正常连接。当我删除它并添加 Compute Engine 实例的内部 IP 时,我得到了超时,但它确实显示:

2021-01-10T18:09:44.531+0000    could not connect to server: server selection error: server selection timeout, curr
ent topology: { Type: ReplicaSetNoPrimary, Servers: [{ Addr: ***.mongodb.net:27017, Type: Unkn
own, State: Connected, Average RTT: 0, Last error: connection() : dial tcp *.*.*.*:27017: i/o timeout }, { Ad
dr: ***.mongodb.net:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connec
tion() : dial tcp *.*.*.*:27017: i/o timeout }, { Addr: ***.mongodb.net:27017, Type: Unkn
own, State: Connected, Average RTT: 0, Last error: connection() : dial tcp *.*.*.*:27017: i/o timeout }, ] }

所以我最好的猜测是我没有输入正确的 IP 范围或正确的特定 IP 以允许计算引擎实例在内部连接,这似乎是 Mongo Atlas 防火墙阻止了。

在 VPC 上设置计算引擎和 mongo atlas 之间的连接的正确步骤是什么,以便没有入口/出口并且连接是直接的。

【问题讨论】:

    标签: mongodb google-cloud-platform google-compute-engine google-vpc


    【解决方案1】:

    我猜这个问题的原因也是防火墙设置。

    按照以下 2 个步骤操作。

    第 1 步:检查 VPC 对等状态

    当“状态”处于活动状态时,您可以使用 VPC 对等互连的内部访问。

    检查它是否处于活动状态。

    第 2 步:检查防火墙规则

    如果你没有在防火墙规则上碰任何东西,添加一个规则,允许双方的 CIDR 范围。

    【讨论】:

      【解决方案2】:

      我建议您在 GCP 上使用Intelligence tool 来丢弃任何防火墙问题,请记住该工具模拟数据包而不是真实数据包。在 GCP 级别放弃防火墙规则后,请确保内部防火墙允许流量。

      【讨论】:

        【解决方案3】:

        您的问题如下:您正在尝试访问此 DNS 以连接您的 MongoDB atlas 集群 ***.mongodb.net。此 DNS 是公共的,您的 VM 需要访问 Internet 才能解析此 DNS。而且因为没有公网IP,所以不能上网。

        解决方案是使用Cloud NAT 让您的虚拟机访问互联网。

        【讨论】:

        • 我不希望虚拟机访问互联网,我希望它通过 VPC 连接路由到 mongodb,以便所有网络传输都留在 Google Cloud 内
        • 您可以添加防火墙规则以允许它们仅访问 DNS 服务(端口 53)。您只需要 DNS 解析。 DNS 的答案会告诉您要访问您的 VPC 中的哪个私有 IP,而其余流量永远不会进入 Internet
        • @FaultyJuggler 您可以为该特定 DNS 名称创建一个 GCP Cloud DNS 专用区域,这样它将在内部解析(无需互联网连接),或者您可以编辑您的客户端 /etc/hosts 文件以手动包含此内容,那么您将不需要此特定 DNS 名称的 DNS 服务器
        • 鉴于上面返回集群分片详细信息的错误日志,它似乎可以很好地解析 DNS,但被其中一个防火墙阻止
        • 或许最好联系官方support,以便全面了解您的连接去往/来自何处
        猜你喜欢
        • 1970-01-01
        • 2019-01-27
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-01
        相关资源
        最近更新 更多