我使用K8s示例在Kubernetes上创建可靠,可扩展的Redis . https://github.com/kubernetes/kubernetes/tree/master/examples/redis
Redis主站需要获取原始IP的slave,并注册到sentinel . 当master失败时,Sentinel将用于切换master .
但我的docker在没有标志iptables = false的情况下启动(它将创建一个像SNAT一样的iptables),因此redis slave源IP将是SNAT,而master将获得flannel0的IP,如172.16.103.0 .
我还将法兰绒网络添加到节点之间的容器连接 .
所以问题是“有没有办法在不删除iptables标志的情况下获取源IP,或者以其他方式创建可靠的redis集群 . ”
2 回答
编辑:我已经找到了标志的神奇组合,以使其工作 .
1)运行停止docker和bootstrap docker进程
2)删除iptables规则:
3)使用ip-masq = false选项运行docker-daemon
4)使用ip-masq = true选项运行你的flanneld
对我来说,这使得所有三个pod-> pod,pod-> ext,&ext-> service-> pod都能完美运行 .
希望这对你们其他人有用!
(保留描述症状的初始反应)
我和指南有同样的问题 . 从机复制得很好,但主机无法正确检查从机状态,因为连接来自点零ip .
从主透视图显示slave-> master连接示例(显示从站的错误IP):
示例slave->从slave透视的主连接(显示master的右侧ip):
以下是ps的redis服务器命令 .
主:
奴隶:
我们设法通过在我们的redis pod中设置
hostNetworking: true
来解决这个问题 . 这意味着redis服务器不会获得容器IP(172 ..),这绝对可以解决问题 .