【发布时间】:2022-11-23 03:12:12
【问题描述】:
我在 kubernetes 集群中启动并运行了以下组件
- GoLang 应用程序将数据写入命名空间
app1中的 mongodb statefulset 副本集 - 在命名空间
ng-mongo中作为有状态集运行的 mongodb 副本集(1 个副本)
我需要做的是,我需要通过 golang 应用程序访问 mongodb 数据库以进行写/读操作,所以我所做的是;
- 在
ng-mongo命名空间中为mongodb创建无头服务,如下所示:# Source: mongo/templates/svc.yaml apiVersion: v1 kind: Service metadata: name: mongo namespace: ng-mongo labels: app: mongo spec: ports: - port: 27017 targetPort: 27017 name: mongo clusterIP: None selector: role: mongo- 然后我部署了
mongodbstatefulset 并初始化了副本集,如下所示:
kubectl exec -it mongo-0 -n ng-mongo mongosh rs.initiate({_id: "rs0",members: [{_id: 0, host: "mongo-0"}]}) // gives output { ok: 1 }- 然后我在
app1命名空间中创建了一个ExternalName服务,链接上面步骤 1 中的 mongo 服务,如下所示:
# Source: app/templates/svc.yaml kind: Service apiVersion: v1 metadata: name: app1 namespace: app1 spec: type: ExternalName externalName: mongo.ng-mongo.svc.cluster.local ports: - port: 27017- 最后,我按如下方式检测了我的
golang应用程序;
// Connection URI const mongo_uri = "mongodb://app1" <-- Here I used the app1, as the ExternalName service's name is `app1` <RETRACTED-CODE>然后我运行了应用程序,并检查了日志。这是我发现的:
2022/11/22 12:49:47 服务器选择错误:服务器选择超时,当前拓扑:{ 类型:ReplicaSetNoPrimary,服务器:[{ 地址:mongo-0:27017,类型:未知,最后一个错误:发生连接()错误在连接握手期间:拨打 tcp:在 10.96.0.10:53 上查找 mongo-0:没有这样的主机},]}
更新:我没有为 mongodb 设置任何用户名或密码
有人可以帮助我为什么会这样吗?
- 然后我部署了
【问题讨论】:
标签: mongodb go kubernetes