1

我在我的 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(如上述情况)中指定,那么哪一个优先?
4

0 回答 0