【发布时间】:2021-04-23 13:22:52
【问题描述】:
我使用节点创建了一个 REST API,并使用 Kubernetes 和 Docker 将其容器化。 kubernetes pod 在 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 Cloud 支持对其进行了双重检查)。给每个人相关的网络访问权限
我还可以确认可以通过 MongoDB Compass 使用相同的连接 URL 访问 MongoCloudDB
我的猜测是无法从 minikube 内的 pod 与 MongoDB 数据库建立连接。
你们中有人知道如何克服这个问题吗?
pod 和外部服务的 kubernetes 配置
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 时收到错误消息编辑
- 服务“distribution-database-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&replicaSet=atlas-fznj9q-shard-0&authSource=admin&retryWrites=true&w=majority":不得超过 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&replicaSet=atlas-fznj9q-shard-0&authSource=admin&retryWrites=true&w=majority":小写 RFC 1123 子域必须由小写字母数字组成字符、'-' 或 '.',并且必须以字母数字字符开头和结尾(例如,'example.com',用于验证的正则表达式是 'a-z0-9?(.a-z0-9?)*' )
有什么想法吗??
【问题讨论】:
-
你能分享你的 pod 的 kubernetes 配置以及外部服务吗!
-
@AbhinavKumar 更新了 pod 和外部服务的 kubernetes 配置。请检查