通过OpenShift Route暴露Bitnami Redis遇连接错误问题求助
问题原因
OpenShift 默认创建的 Route 是HTTP/HTTPS 协议的反向代理,而 Redis 使用的是专属的 TCP 二进制协议。直接用普通 Route 转发 Redis 流量时,代理会把连接请求当作 HTTP 请求处理,Redis 返回的原生响应被 HTTP 代理解析后,就会出现类似 "Unknown reply: H" 的错误——本质是 Redis 的响应不符合 HTTP 协议格式,被客户端误解。
解决方案
方案一:配置 OpenShift TCP Route(推荐生产/长期暴露)
OpenShift 支持通过 Ingress Controller 配置 TCP 端口映射来暴露 TCP 服务:
- 编辑默认 Ingress Controller 的配置:
oc edit ingresscontroller/default -n openshift-ingress-operator
- 在
spec段中添加 TCP 端口映射(示例中用 30001 作为外部暴露端口,可自行修改):
spec: # 保留原有配置,新增以下内容 tcp: - port: 30001 destination: service: redis-ms-master namespace: redis-ms port: tcp-redis
- 保存配置后,等待 Ingress Controller 重启更新。之后就可以通过
redis-ms.apps-crc.testing:30001连接 Redis。
方案二:用 NodePort 类型 Service 暴露(适合测试环境)
修改 Redis Service 为 NodePort 类型,直接通过集群节点 IP + 节点端口访问:
- 更新 Helm 部署参数,指定 Service 类型为 NodePort:
helm upgrade redis-ms my-repo/redis \ --set master.service.type=NodePort \ --set master.podSecurityContext.enabled=false \ --set master.containerSecurityContext.enabled=false \ --set auth.enabled=false \ --set image.debug=true \ --set architecture=standalone
- 获取分配的 NodePort 端口:
oc get svc redis-ms-master -n redis-ms
- 获取 CRC 节点 IP(执行
crc ip命令),然后用[节点IP]:[NodePort]连接 Redis,例如192.168.130.11:300123。
方案三:Port-Forward(临时调试用)
就是你当前正在使用的方法,适合临时测试:
oc port-forward --namespace redis-ms svc/redis-ms-master 6379:6379
之后通过 localhost:6379 正常连接即可。
内容的提问来源于stack exchange,提问作者Fabry
相关产品推荐
相关产品推荐

