Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongooseServerSelectionError:在使用Minikube时,无法连接到MongoDB Atlas群集中的任何服务器_Mongodb_Mongoose_Minikube - Fatal编程技术网

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

MongooseServerSelectionError:在使用Minikube时,无法连接到MongoDB Atlas群集中的任何服务器,mongodb,mongoose,minikube,Mongodb,Mongoose,Minikube,我使用node创建了一个RESTAPI,并使用Kubernetes和Docker将其容器化。 出于开发目的,kubernetes吊舱在minikube环境中运行 应用程序运行正常,现在出现以下错误 [distribution] Initial Distribution API Database connection error occured - MongooseServerSelectionError: Could not connect to any servers in your Mong

我使用node创建了一个RESTAPI,并使用Kubernetes和Docker将其容器化。 出于开发目的,kubernetes吊舱在minikube环境中运行

应用程序运行正常,现在出现以下错误

[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通过MongoDB Compass访问MongoCloudDB

我的猜测是minikube内部的POD无法与MongoDB数据库建立连接

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

pod和外部服务的kubernetes配置

已编辑,但在尝试实现ExternalService时收到错误

服务分发数据库srv无效: 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&replicset=atlas-fznj9q-shard-0&authSource=admin&retryWrites=true&w=多数:不得超过253个字符 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&replicset=atlas-fznj9q-shard-0&authSource=admin&retryWrites=true&w=maist:RFC1123子域必须由小写字母数字字符“-”或“.”组成,并且必须以字母数字字符开头和结尾,例如“example.com”,用于验证的正则表达式为“a-z0-9”
有什么想法吗???

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

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

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

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

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

您能否共享pod的kubernetes配置以及外部服务@AbhinavKumar更新了pod和外部服务的kubernetes配置。请检查我贴出了对我有帮助的答案。我没有创建外部服务。但是我想知道ExternalName配置会发生什么。很有意思,我想这只适用于当地环境。哦,很高兴知道。阿比纳夫的一大堆感谢。感谢您的帮助,请查看更新的解决方案
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'```
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