我在我的 EKS Kubernetes 设置中使用 HAProxy 入口控制器。
最近我尝试在我的 k8s 上设置一个 Redis 实例。
当我尝试从集群外部连接并运行任何命令时,出现以下错误:
❱❱❱ redis-cli -h redis-ingress.local -p 80 info
Error: Protocol error, got "H" as reply type byte
在进一步调试中,我发现了问题,HAProxy 需要在 中运行TCP mode
,并且由于默认模式设置为HTTP
.
为了解决这个问题,我在我的 Redis 服务中添加了以下注释,这应该可以解决问题,但它没有。我仍然不断收到同样的错误。
annotations:
haproxy.org/backend-config-snippet: |
mode tcp
我登录到其中一个 HAProxy 容器以检查正在使用的配置,并找到以下块:
backend redis-service-redis
mode http
balance roundrobin
option forwardfor
###_config-snippet_### BEGIN
mode tcp
###_config-snippet_### END
server SRV_1 172.19.51.245:6379 check weight 128
server SRV_2 127.0.0.1:6379 disabled check weight 128
正如我所看到的,注释中的配置正在应用,但它没有覆盖mode
.
我有几个问题
- 如何覆盖
HTTP
为特定后端/服务设置的全局模式或任何全局模式? - 如果两者
mode
都在backend
(如上述情况)中指定,那么哪一个优先?