上下文
我正在使用 GCP ,更具体地说是 GKE 将我的应用程序部署在容器/吊舱中。我正在尝试部署的应用程序在node js(express js)中。该应用程序连接到 MongoDB Atlas (免费M0层)。
在本地运行项目时没有问题。它连接到数据库,我可以添加/删除文档而没有任何问题。
我允许MongoDB Atlas集群的任何人(0.0.0.0/0)访问,从而使调试变得更容易。
当我将我的项目与CI / CD一起部署到GKE时,一切都会顺利进行。
问题
部署项目后,事情开始变得棘手。我收到 CrashLoopBackOff 。检查日志后,它一直崩溃,这是我找到的:
error: Server selection timed out after 30000 ms {"name":"MongooseTimeoutError","reason":{"name":"MongoNetworkError"}}
铅
我相信问题是我的Pod无法通过其常规端口27017连接到MongoDB Atlas ,从而向我发送超时错误。
这是我尝试过的:
在GCP的VPC网络中添加新的防火墙规则:
gcloud compute firewall-rules create allow-mongodb --allow tcp:27017
在我的deployment.yml中添加以下键/值:dnsPolicy: Default
结论
花了几个小时解决这个问题之后,我仍然找不到任何解决方案,而且我的想法已经用完了。 仅供参考,我是GCP和Kubernetes的新手,所以我可能在这里错过了一些重要内容,但不确定是什么。
如果某个善良的人最终找到该职位,并且知道答案,我会很高兴他/她可以在这里帮助我。
有一个好的。
干杯
答案 0 :(得分:2)
如果您认为已使用GCP防火墙规则正确设置了网络策略,请逐步在kubernetes中进行研究。
kubectl exec <node_app_pod> --command -- curl <mongo_url>:27017
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress
如果仅要设置端口27017,则可以使用此文档进行调整:
https://kubernetes.io/docs/concepts/services-networking/network-policies/
让我知道现在是否更好。