python - mongodb 连接字符串 uri 在 Kubernetes 中不起作用
问题描述
我已经在 K8S 上部署了 mongodb 作为 StatefulSets。当我尝试使用连接字符串 URI(例如:mongodb://mongo-0.mongo:27017,mongo-1.mongo:27017/cool_db)连接数据库时,它没有连接,但它正在连接并获得结果当我使用端点 IP 地址时。
# kubectl get sts
NAME READY AGE
mongo 2/2 7h33m
#kubectl get pods
NAME READY STATUS RESTARTS AGE
mongo-0 2/2 Running 0 7h48m
mongo-1 2/2 Running 2 7h47m
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10h
mongo ClusterIP None <none> 27017/TCP 7h48m
我正在尝试使用以下过程在 python 中使用连接字符串 URI 测试连接,但它失败了。
>>> import pymongo
>>> client = pymongo.MongoClient("mongodb://mongo-0.mongo:27017,mongo-1.mongo:27017/cool_db")
>>> db = client.cool_db
>>> print db.cool_collection.count()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/pymongo/collection.py", line 1800, in count
return self._count(cmd, collation, session)
File "/usr/lib64/python2.7/site-packages/pymongo/collection.py", line 1600, in _count
_cmd, self._read_preference_for(session), session)
File "/usr/lib64/python2.7/site-packages/pymongo/mongo_client.py", line 1454, in _retryable_read
read_pref, session, address=address)
File "/usr/lib64/python2.7/site-packages/pymongo/mongo_client.py", line 1253, in _select_server
server = topology.select_server(server_selector)
File "/usr/lib64/python2.7/site-packages/pymongo/topology.py", line 235, in select_server
address))
File "/usr/lib64/python2.7/site-packages/pymongo/topology.py", line 193, in select_servers
selector, server_timeout, address)
File "/usr/lib64/python2.7/site-packages/pymongo/topology.py", line 209, in _select_servers_loop
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: mongo-0.mongo:27017: [Errno -2] Name or service not known,mongo-1.mongo:27017: [Errno -2] Name or service not known
如果我们使用端点 IP 地址,那么我们将得到来自 DB 的响应。
>>> import pymongo
>>> client = pymongo.MongoClient("mongodb://10.244.1.8,10.244.2.9:27017/cool_db")
>>> db = client.cool_db
>>> print db.cool_collection.count()
0
>>>
我尝试过使用不同的 URI,例如 (client = pymongo.MongoClient("mongodb://mongo-0.mongo:27017/cool_db") ) 但无法正常工作。有人可以帮我吗?
解决方案
从我之前的类似答案:
在集群中,您应该使用<service-name>.<namespace-name>.svc.cluster.local
.
推荐阅读
- android - 从 android 中的 SevenZip 库的选定文件路径中获取 archiveFile 名称
- python - 用平均值替换每行的最大值
- node.js - 跨服务器的 TestCafe 负载平衡命令
- nestjs - NestJs 一个具有关系的 Post 请求
- python - 如何在python中映射另一列的值
- batch-file - 批处理文件 IF 命令未正确评估
- snowflake-cloud-data-platform - 是否可以创建数据交换并与读者帐户共享?
- javascript - 通过循环键数组创建两个或多个 S3 预签名 URL?
- python - 在 ROS 模拟中使用 OpenCV 尝试 KLT 时的问题
- r - 用于分析重复、转移和丢失 (DTL) 对账的 R 包?