MongooseServerSelectionError:在使用Minikube时,无法连接到MongoDB Atlas群集中的任何服务器
我使用node创建了一个RESTAPI,并使用Kubernetes和Docker将其容器化。 出于开发目的,kubernetes吊舱在minikube环境中运行 应用程序运行正常,现在出现以下错误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
[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