Mongoose 带远程数据库的GKE

Mongoose 带远程数据库的GKE,mongoose,kubernetes,google-cloud-platform,google-kubernetes-engine,Mongoose,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,首先,关于我的问题,我需要谈谈我的环境: Google基本设置:1个f1微实例,包含3个节点 Kubernetes设置:nginx入口控制器、证书管理器、1-带部署的后端服务、1-带部署的前端服务 Mongo Atlas设置:3套 设置不应该是一个开场白,但它可能会给一些场景的感觉 好的,让我们来讨论这个问题,我的Nodejs后端使用以下url连接到MonglAtlas数据库: MONGODB_URI=mongodb+srv://username:pwd@mongotoken-66gqa.gcp

首先,关于我的问题,我需要谈谈我的环境:

  • Google基本设置:1个f1微实例,包含3个节点

  • Kubernetes设置:nginx入口控制器、证书管理器、1-带部署的后端服务、1-带部署的前端服务

  • Mongo Atlas设置:3套

  • 设置不应该是一个开场白,但它可能会给一些场景的感觉

    好的,让我们来讨论这个问题,我的Nodejs后端使用以下url连接到MonglAtlas数据库

    MONGODB_URI=mongodb+srv://username:pwd@mongotoken-66gqa.gcp.mongodb.net/test?retryWrites=true
    
    IP白名单是我的静态公共IP,它使用nginx入口进行路由。让我将
    my.domain
    定义到前端网页,将
    my.domain/api/
    定义到后端api

    当IP白名单允许从任何地方访问时,一切正常,后端可以毫无疑问地连接到MongoAtlas DB

    但是,当我删除该选项并添加与
    my.domain
    匹配的IP(仔细检查,I ping
    my.domain
    是绝对相同的IP)时,后端无法找到数据库,出现以下错误:

    MongoNetworkError: connection 4 to closed https....
    
    如果信息缺失,请告诉我。任何建议都将不胜感激


    另一个怀疑是我在VPC网络中得到了1个静态IP和3个临时IP。我猜这意味着3节点与负载均衡器IP。如果后端使用临时IP连接到MongoAtlas后端,我必须检查pod中的节点,并使该节点保持静态,但这对Kubernetes没有意义。我希望有另一种解决方案:(

    进出流量的方式不同

    当您连接到ingress时,您的流量通过带有静态IP的负载平衡器(我希望您使用带有服务类型“负载平衡器”的ingress)

    当您从集群连接到任何外部资源时,当您的容器工作时,您直接从节点连接,因此您需要在Atlas上列出节点的白名单地址,以允许从它们进行连接。

    我使用的解决方案是。 其概念是将1-Google计算引擎实例建立为NAT网关,并将所有出口映射到静态ip。哦,最重要的是上述所有步骤都不需要手动配置,只需按照文档进行操作,一切都应按预期进行


    如果存在静态\u地址配额问题,您可以将您的区域更改为任何保留配额的区域。对于我的情况,us central作为NAT,us west作为原始服务。

    这是类似的问题,但没有更多响应,NAT方式。如我所述,将所有节点设置为静态IP(GCP)或从任何位置访问(MongoAtlas)。我只是不满意这两种方式,但如果这是唯一的解决方案,我会选择MongoAtlas方式。