#kubernetes #kubernetes-ingress #haproxy #kubernetes-networking #haproxy-ingress
Вопрос:
Я использую контроллер входа HAProxy в своей настройке EKS Kubernetes.
Недавно я попытался настроить экземпляр Redis на своем k8s.
Когда я попытался подключиться и выполнить любую команду из-за пределов кластера, я получил следующую ошибку:
❱❱❱ 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
(как в приведенном выше случае), какой из них отдает предпочтение?