Isso pode ser uma falha do servidor ou uma questão de estouro de pilha, ainda não tenho certeza:
Configurei um sistema Redis simples de três nós com um mestre e dois nós de réplica, gerenciando o failover com o Redis Sentinel. O tráfego de rede Redis e Sentinel é protegido usando o suporte TLS integrado do Redis e certificados regulares emitidos pela CA.
Cada instância do Sentinel é configurada para anunciar seu nome de host e resolver o DNS:
sentinel resolve-hostnames yes
sentinel announce-hostnames yes
sentinel announce-ip "redistest2.mydomain.com"
Temos um serviço da Web usando Servicestack para conectar-se às instâncias do Sentinel. Contanto que não validemos certificados TLS e nomes de host, tudo funciona bem: o serviço da web pode ver os ouvintes do Redis Sentinel e, quando encerramos o mestre atual, o cluster Redis vota em um novo e o serviço da web muda para o novo nó Redis gravável.
No entanto, enquanto o nó mestre original se reporta com seu FQDN, os dois nós de backup apenas parecem se reportar ao ServiceStack com seus endereços IP.
Um trecho de log do Sentinel indica que os nós de backup parecem usar seus nomes de host:
28011:X 15 Feb 2023 15:23:10.817 * +sentinel sentinel <hex-string> redistest2.mydomain.com 26379 @ redistest redistest1.mydomain.com 6379
28011:X 15 Feb 2023 15:23:10.821 * Sentinel new configuration saved on disk
28011:X 15 Feb 2023 15:23:10.897 * +sentinel sentinel <other-hex-string> redistest3.mydomain.com 26379 @ redistest redistest1.mydomain.com 6379
28011:X 15 Feb 2023 15:23:10.901 * Sentinel new configuration saved on disk
No entanto, o ServiceStack insiste em receber apenas os endereços IP do servidor do grupo de servidores:
Starting with sentinel.
Sentinel hosts: redistest1.mydomain.com:26379?ssl=true, redistest2.mydomain.com:26379?ssl=true, redistest3.mydomain.com:26379?ssl=true
Sentinel created
Host filter set.
Hostfilter: redistest1.mydomain.com:6379
Hostfilter: 10.100.60.72:6379
Hostfilter: 10.100.60.73:6379
RedisManager started.
Redis sentinel info: redistest primary: redistest1.mydomain.com:6379, replicas: 10.100.60.72:6379, 10.100.60.73:6379
Hostfilter: 10.100.60.72:6379
Hostfilter: 10.100.60.73:6379
Ping error with read only client: ServiceStack.Redis.RedisException: [14:23:47.626] Unable to Connect: sPort: 0, Error: One or more errors occurred.
(...)
---> System.AggregateException: One or more errors occurred. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
Há mais alguma coisa que eu possa fazer no lado da configuração do Redis e/ou do Sentinel para garantir que o ServiceStack receba os nomes de host reais dos nós do Redis para que possamos validar corretamente os certificados usados?