我使用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/Access问题,但连接字符串是正确的。(使用MongoDB Cloud支持仔细检查)。每个人都有相关的网络访问权限
我还可以确认可以使用相同的连接URL通过MongoDB Compass访问MongoCloudDB
我的猜测是无法从mini kube中的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
使用尝试实现外部服务时收到的错误进行编辑
有什么想法吗??
以下步骤对我有用。来自另一个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
然后,我创建了一个部署,成功地拉取了映像并运行了容器,没有任何问题。
在您的配置中,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
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'```
我的节点应用程序向我发送了这样一条消息:“无法连接到MongoDB Atlas群集中的任何服务器。请确保您当前的IP地址在Atlas群集中的IP白名单上。”。 我已经添加了我当前的IP地址以及IP白名单上的0.0.0.0。 下面是错误消息的图片和我编写的连接它的代码。我是node.js和mongoDB的新手。我查看了这里的所有解决方案,但没有一个能够解决这个问题。 这是我在运行nodemon后收到
我有一个问题,我试图解决了很长一段时间。我正试图通过从连接到Mongo Atlas云。这不是我第一次,但我就是找不到答案。 猫鼬版本:5.9.22 这是我的代码: 我的白名单设置仅包括0.0.0.0/0我在数据库访问中的用户名和密码非常简单,没有任何特殊字符,但总是出现相同的错误: 谢谢。
我正在尝试在我的本地计算机上运行,并从 收到错误。 错误消息为:< code >无法连接到服务器:拨tcp 192.168.2.15:8443: connectex:无法建立连接,因为目标计算机主动拒绝连接。 请看下面的截图。 我已经尝试了无法在windows 10上运行Kubernetes (kubectl)和Minikube中的所有建议。无法连接到服务器:拨tcp [::1]:8080: co
这是mysql连接php脚本。它不断地显示出它的错误 警告:mysqli_connect():(HY000/1045):用户'user'@'localhost'(使用密码:YES)在第6行的C:\xampp\htdocs\index.php访问被拒绝 注意:尝试在第7行连接成功的C:\xampp\htdocs\index.php中获取非对象的属性 我听不懂,请帮帮我好吗?
首先,我知道有很多类似的问题,但我所看到的似乎都不能解决我的设置(我发现的任何解决方案都不管用)。所以请容忍我。。。 我的服务器主机名是IP地址,而不是域名(即URL看起来像:) 我的服务器有一个真正的证书(即,没有自签名) 我的应用程序的plist条目字典为空(没有任何例外-出厂设置ATS) 这是生产代码,我不能禁用ATS(我也不认为我可以,因为例外只适用于显式域名,而不是IP地址) (iOS9
我尝试从一个配置单元(配置单元n°1)读取数据,并将结果写入另一个配置单元(配置单元n°2)(它们来自两个不同的集群)。我不能使用单个spark会话连接到两个配置单元,因此我将使用jdbc读取数据,并使用spark配置单元上下文写入数据。 两个集群都使用kerberos,Knox,ranger。 THS批火花将在蜂巢n°2上运行 这是我的主要错误: GSSException:未提供有效凭据(机制级