首页 > 解决方案 > 在云中为 Redis 创建连接字符串

问题描述

我有一个 Redis pod,我希望来自不同集群和未在云中运行的应用程序的连接请求。由于 Redis 不适用于 http 协议,因此我在下面完成的路由访问不适用于此连接字符串“ route-redis.local:6379”。

apiVersion: v1
kind: Route
metadata:
  name: redis
spec:
  host: route-redis.local
  to:
    kind: Service
    name: redis

你可能遇到过这种情况。简而言之,有没有办法通过路由访问redis pod?如果没有,你如何解决这个问题?

标签: dockerkubernetesrediscloudopenshift

解决方案


您已经发现 Redis 不能通过 HTTP 协议工作,据我所知这是正确的。路由通过检查每个请求的 HTTP Host 标头来工作,这对 Redis 不起作用。这意味着您将无法将 Routes 用于非 HTTP 工作负载

通常,此类非 HTTP 服务通过 aService和公开NodePorts。这意味着作为集群一部分的每个工作节点都将打开此端口并将流量转发到您的应用程序。

您可以在Kubernetes 文档中找到更多信息:

NodePort:在静态端口(NodePort)上公开每个节点 IP 上的服务。自动创建 NodePort 服务路由到的 ClusterIP 服务。您可以通过请求从集群外部联系 NodePort 服务:。

您可以像这样定义 NodePort(此示例适用于 MySQL,它也是非 HTTP 工作负载):

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    name: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      nodePort: 30036
      name: http
  selector:
    name: mysql

当然,您的管理员可能会限制对这些端口的访问,因此您可能会也可能不会在 OpenShift 集群上使用这些类型的服务。


推荐阅读