0

我从默认图像目录创建了一个 redis 3.2 应用程序。

我正在尝试将在同一项目中运行的 python 应用程序与 redis db 连接起来。

这是 Python 应用程序用来连接 redis 的方法:

REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_PASSWORD = os.environ.get('REDIS_PASSWORD') or 'test'


redis = aioredis.create_redis_pool(
    (REDIS_HOST, int(REDIS_PORT)),
    password=REDIS_PASSWORD,
    minsize=5,
    maxsize=10,
    loop=loop,
)

部署失败并显示ConnectionRefusedError: [Errno 111] Connection refused.

我的猜测是我需要为 REDIS_HOST 使用另一个值,但我不知道该使用什么。

有谁知道如何解决这一问题?

4

2 回答 2

1

从映像目录部署后,将为您创建许多对象。其中一个对象是服务,它用于将请求负载平衡到它前面的 Pod。可以使用客户端工具通过oc get svc.

此服务名称应用于连接到您的 redis 实例。如果您在 Python 应用程序之前部署 redis,则应该已经填充了一些可以使用的环境变量,例如REDIS_SERVICE_HOSTREDIS_SERVICE_PORT.

因此,从您的应用程序中,您可以通过服务 ip 或服务名称进行连接,redis然后是服务名称redis.StrictRedis(host='redis', port=6379, password='secret')

redis 密码可能已为您生成。在这种情况下,它可以从 redis 秘密中检索,也可以从你的 python 应用程序中安装

于 2018-01-11T09:24:17.883 回答
0

数据库一般不使用标准 HTTP,而是自定义 TCP 协议。这就是为什么在 Openshift 中我们需要使用 Openshift 的服务主机名或 IP 地址直接连接到服务(注意:只有服务主机名是可预测的),而不是通常的 Route,这也适用于 Redis。在 Openshift 中绕过 Routes 就像绕过 nginx 等反向代理,直接连接到 db 后端。

需要使用环境变量,因为服务主机名是由 Openshift 使用这种可预测的模式自动生成的: container_name.project_name.svc,例如: redis.db.svc

  • 更多信息 “当 Web 应用程序在 OpenShift 集群之外可见时,会创建一个路由。这使用户能够使用 URL 从 Web 浏览器访问 Web 应用程序。路由通常用于使用 HTTP 的 Web 应用程序协议。路由不能用于公开数据库,因为它们通常会使用自己不同的协议,并且路由将无法与数据库协议一起使用。[ https://blog.openshift.com/openshift-connecting-database-using-port-forwarding/ ]
于 2019-07-06T09:18:37.267 回答