基于Bitnami Helm Chart的K8s Redis Sentinel外部访问问题
解决Bitnami Redis Sentinel外部访问问题
一、Bitnami Chart支持创建独立服务
完全可以通过Bitnami的Redis Sentinel Helm Chart配置,为主节点、副本节点、哨兵分别创建独立的LoadBalancer或NodePort服务,无需自行拆分服务。核心是通过Chart内置的参数块分别定义各组件的服务类型。
配置示例(values.yaml)
# 主节点独立LoadBalancer服务,用于外部写入 master: service: type: LoadBalancer # 可选:添加云厂商LB注解,比如AWS NLB # annotations: # service.beta.kubernetes.io/aws-load-balancer-type: "nlb" # 副本节点独立LoadBalancer服务,用于外部读请求(可选) replica: service: type: LoadBalancer # 哨兵独立LoadBalancer服务,用于客户端发现主节点(可选) sentinel: service: type: LoadBalancer
部署时直接指定该values文件:
helm install redis-sentinel bitnami/redis-sentinel -f custom-values.yaml
二、解决哨兵返回内部IP的问题
即使给哨兵配置了LB,默认情况下哨兵返回的主节点地址仍是集群内部IP,外部客户端无法直接访问。需要通过extraFlags配置Redis主节点和哨兵的对外宣告IP:
master: extraFlags: - "--announce-ip=主节点LB的外部公网IP" - "--announce-port=6379" sentinel: extraFlags: - "--announce-ip=哨兵LB的外部公网IP" - "--announce-port=26379"
这样外部客户端连接哨兵后,会获取到主节点的外部IP,直接发起写入请求即可。
三、其他替代方案
NodePort模式:如果集群没有LoadBalancer组件,可将服务类型设为
NodePort,并指定固定端口:master: service: type: NodePort nodePort: 30001外部通过
集群节点IP:30001访问主节点。TCP Ingress转发:若已有支持TCP的Ingress Controller(如NGINX Ingress),可配置TCP转发规则指向Redis主节点服务,通过Ingress域名+指定端口访问。
内容的提问来源于stack exchange,提问作者sid802
相关产品推荐
相关产品推荐

