GKE无法到达MongoDB Atlas

时间:2020-05-30 15:21:15

标签: docker go kubernetes google-kubernetes-engine mongodb-atlas

我在尝试将容器化的应用程序部署到GKE时遇到问题。它无法访问我的MongoDB Atlas集群。在本地运行Docker容器不会产生任何问题,并且运行良好。我绝不是Docker或Kubernetes的专家,但我认为这与DNS名称解析有关。

我已按照本教程Deploying a containerized web application进行操作,另外还添加了LoadBalancer的EXTERNAL-IP到MongoDB Atlas控制台中的“网络访问” IP白名单中,并自从使用端口映射443-> 8443正在使用HTTPS。

仅记录我的应用在失败之前能够产生的日志:

(mongodb): 2020/05/30 15:07:39 logger.go:96: 2020-05-30T15:07:39Z 
[error] Failed to connect to mongodb. Check if mongo is running...
(mongodb): 2020/05/30 15:07:39 logger.go:132: 2020-05-30T15:07:39Z 
[fatal] server selection error: server selection timeout, current 
topology: { Type: ReplicaSetNoPrimary, Servers: [{ Addr: biomas- 
cluster-shard-<removed>.azure.mongodb.net:27017, Type: Unknown, 
State: Connected, Average RTT: 0, Last error: connection() : 
connection(biomas-cluster-shard-<removed>.azure.mongodb.net:27017[-180]) incomplete read of message 
header: EOF }, { Addr: biomas-cluster-shard-<removed>.azure.mongodb.net:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : connection(biomas-cluster-shard-<removed>.azure.mongodb.net:27017[-181]) incomplete read of message header: EOF }, { Addr: biomas-cluster-shard-<removed>.azure.mongodb.net:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : connection(biomas-cluster-shard-<removed>.azure.mongodb.net:27017[-179]) incomplete read of message header: EOF }, ] }

如果对此有一个简单的解决方法,那将是首选,因为该应用程序仍处于开发阶段,所以我只需要一个使用上述技术的基本可用的应用程序。

完整的工作流程:

Android应用->在Docker上运行的Golang API-> MongoDB Atlas

谢谢

1 个答案:

答案 0 :(得分:3)

正如@Marc所指出的,您的流量是通过工作节点的EXTERNAL-IP而不是负载均衡器发出的。

要查找EXTERNAL-IP IP的节点,请使用:

kubectl get nodes -owide

更准确地说,仅输出IP使用(摘自kubectl Cheat Sheet):

kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'

接下来将这些IP列入白名单,您应该会很好,但是请记住,在Kubernetes升级或集群扩展之后,这些IP可能会改变,因此我建议使用Cloud NAT始终为您的传出流量使用相同的IP。 / p>