首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongooseServerSelectionError:使用Minikube时无法连接到MongoDB Atlas集群中的任何服务器

MongooseServerSelectionError:使用Minikube时无法连接到MongoDB Atlas集群中的任何服务器
EN

Stack Overflow用户
提问于 2021-01-19 08:57:09
回答 2查看 1.4K关注 0票数 2

我使用节点创建了REST,并使用Kubernetes和Docker对其进行了封装。kubernetes吊舱是在一个小型环境中运行的,用于开发目的。

应用程序运行良好,现在它给出了下面的错误。

代码语言:javascript
复制
[distribution] Initial Distribution API Database connection error occured - MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist: https://docs.atlas.mongodb.com/security-whitelist/
[distribution]     at NativeConnection.Connection.openUri (/app/node_modules/mongoose/lib/connection.js:830:32)
[distribution]     at Mongoose.connect (/app/node_modules/mongoose/lib/index.js:335:15)
[distribution]     at /app/src/index.ts:60:8
[distribution]     at step (/app/src/index.ts:34:23)
[distribution]     at Object.next (/app/src/index.ts:15:53)
[distribution]     at fulfilled (/app/src/index.ts:6:58)
[distribution]     at processTicksAndRejections (node:internal/process/task_queues:93:5) {
[distribution]   reason: TopologyDescription {
[distribution]     type: 'ReplicaSetNoPrimary',
[distribution]     setName: null,
[distribution]     maxSetVersion: null,
[distribution]     maxElectionId: null,
[distribution]     servers: Map(3) {
[distribution]       'cluster0-shard-00-00.psdty.mongodb.net:27017' => [ServerDescription],
[distribution]       'cluster0-shard-00-01.psdty.mongodb.net:27017' => [ServerDescription],
[distribution]       'cluster0-shard-00-02.psdty.mongodb.net:27017' => [ServerDescription]
[distribution]     },
[distribution]     stale: false,
[distribution]     compatible: true,
[distribution]     compatibilityError: null,
[distribution]     logicalSessionTimeoutMinutes: null,
[distribution]     heartbeatFrequencyMS: 10000,
[distribution]     localThresholdMS: 15,
[distribution]     commonWireVersion: null
[distribution]   }
[distribution] }

这个问题看起来像是一个MongoDB连接URL/访问问题,但是连接字符串是正确的。(在MongoDB云支持下进行了双重检查)。每个人都有相关的网络访问。

我还可以确认可以使用相同的连接URL通过MongoCloudDB指南针访问MongoDB。

我的猜测是,MongoDB数据库无法从迷你库内部的吊舱建立连接。

你们中有谁知道如何克服这个问题吗?

kubernetes配置豆荚和外部服务

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: distribution-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: distribution
  template:
    metadata:
      labels:
        app: distribution
    spec:
      containers:
        - name: distribution
          image: ssomlk/distribution
          env:
            - name: MONGO_URI
              value: 'mongodb://ssomlk:<password>@cluster0-shard-00-00.yeu7t.mongodb.net:27017,cluster0-shard-00-01.yeu7t.mongodb.net:27017,cluster0-shard-00-02.yeu7t.mongodb.net:27017/<db_name>?ssl=true&replicaSet=atlas-fznj9q-shard-0&authSource=admin&retryWrites=true&w=majority'
            - name: JWT_ACCESS_TOKEN_KEY
              valueFrom:
                secretKeyRef:
                  name: jwt-secret
                  key: JWT_ACCESS_TOKEN_KEY
            - name: JWT_REFRESH_TOKEN_KEY
              valueFrom:
                secretKeyRef:
                  name: jwt-secret
                  key: JWT_REFRESH_TOKEN_KEY
            - name: JWT_ACCESS_TOKEN_EXPIRES_IN
              value: '15m'
            - name: JWT_REFRESH_TOKEN_EXPIRES_IN
              value: '60m'
            - name: NATS_CLIENT_ID
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NATS_URL
              value: 'http://nats-srv:4222'
            - name: NATS_CLUSTER_ID
              value: nats-distribution-mailing
            - name: MAIL_USER
              valueFrom:
                secretKeyRef:
                  name: mail-secret
                  key: MAIL_USER
            - name: MAIL_PWD
              valueFrom:
                secretKeyRef:
                  name: mail-secret
                  key: MAIL_PWD
            - name: POOL_SIZE
              value: '8'
---
apiVersion: v1
kind: Service
metadata:
  name: distribution-srv
spec:
  type: ClusterIP
  selector:
    app: distribution
  ports:
    - name: distribution
      protocol: TCP
      port: 3000
      targetPort: 3000

与尝试实现ExternalService时收到的错误一起编辑

服务“分发-数据库-srv”是invalid:

  • spec.externalName:无效值:"mongodb://ssomlk:@cluster0-shard-00-00.y8kuj.mongodb.net:27017,cluster0-shard-00-01.y8kuj.mongodb.net:27017,cluster0-shard-00-02.y8kuj.mongodb.net:27017/?ssl=true&replicaSet=atlas-fznj9q-shard-0&authSource=admin&retryWrites=true&w=majority":必须不超过253 characters

  • spec.externalName:无效值:"mongodb://ssomlk:@cluster0-shard-00-00.y8kuj.mongodb.net:27017,cluster0-shard-00-01.y8kuj.mongodb.net:27017,cluster0-shard-00-02.y8kuj.mongodb.net:27017/?ssl=true&replicaSet=atlas-fznj9q-shard-0&authSource=admin&retryWrites=true&w=majority":小写RFC 1123子域必须由小写字母数字字符'-‘或'.’组成,并且必须以字母数字字符开头和结尾(例如'example.com',用于验证的正则表达式是'a-z0-9?(.a-z0-9?)*')

有什么主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-20 12:52:07

下面的台阶对我有用。来自另一个Github用户的帮助。

代码语言:javascript
复制
I have stopped and deleted the existing minikube

Downloaded "https://github.com/kubernetes/minikube/releases/download/v1.8.2/minikube-windows-amd64.exe" and renamed it to minikube.exe

Placed the above exe in the same folder in which my kubectl.exe is existing. (C:\kube). This path is added to the environment variable "Path" of my user.

Created a hyperv switch, Open Hyper-V Manager, Click on Virtual Switch Manager, Create New Virtual Network Switch, Select external type, and OK.

Ran this command `minikube start driver="hyperv" --hyperv-virtual-switch="MY-SWITCH"`

minikube successfully started

然后,我创建了一个部署,它成功地提取了映像并运行容器,没有任何问题。

票数 0
EN

Stack Overflow用户

发布于 2021-01-20 12:34:48

在您的配置中,mongdb不能从集群内部解析,您必须创建一个外部服务来使uri可解析。请参阅下面的配置作为示例。

代码语言:javascript
复制
kind: Deployment
metadata:
  name: distribution-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: distribution
  template:
    metadata:
      labels:
        app: distribution
    spec:
      containers:
        - name: distribution
          image: ssomlk/distribution
          env:
            - name: MONGO_URI
              value: my-service
            - name: JWT_ACCESS_TOKEN_KEY
              valueFrom:
                secretKeyRef:
                  name: jwt-secret
                  key: JWT_ACCESS_TOKEN_KEY
            - name: JWT_REFRESH_TOKEN_KEY
              valueFrom:
                secretKeyRef:
                  name: jwt-secret
                  key: JWT_REFRESH_TOKEN_KEY
            - name: JWT_ACCESS_TOKEN_EXPIRES_IN
              value: '15m'
            - name: JWT_REFRESH_TOKEN_EXPIRES_IN
              value: '60m'
            - name: NATS_CLIENT_ID
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NATS_URL
              value: 'http://nats-srv:4222'
            - name: NATS_CLUSTER_ID
              value: nats-distribution-mailing
            - name: MAIL_USER
              valueFrom:
                secretKeyRef:
                  name: mail-secret
                  key: MAIL_USER
            - name: MAIL_PWD
              valueFrom:
                secretKeyRef:
                  name: mail-secret
                  key: MAIL_PWD
            - name: POOL_SIZE
              value: '8'
---
apiVersion: v1
kind: Service
metadata:
  name: distribution-srv
spec:
  type: ClusterIP
  selector:
    app: distribution
  ports:
    - name: distribution
      protocol: TCP
      port: 3000
      targetPort: 3000
代码语言:javascript
复制
kind: Service
metadata:
  name: my-service
  namespace: prod
spec:
  type: ExternalName
  externalName: 'mongodb://ssomlk:<password>@cluster0-shard-00-00.yeu7t.mongodb.net:27017,cluster0-shard-00-01.yeu7t.mongodb.net:27017,cluster0-shard-00-02.yeu7t.mongodb.net:27017/<db_name>?ssl=true&replicaSet=atlas-fznj9q-shard-0&authSource=admin&retryWrites=true&w=majority'```
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65788189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档