2016-05-10 18 views
3

私はK8sの例でKubernetesの信頼できるスケーラブルなRedisを作成します。 https://github.com/kubernetes/kubernetes/tree/master/examples/redisKubernetesで赤いセンチネルクラスタを作成すると、赤いマスターはスレーブの元を取得できません。

Redisマスタは、スレーブに送信元IPを取得し、送信元に登録する必要があります。マスターが失敗した場合、Sentinelはマスターの切り替えに使用します。

しかし、私のドッカーはフラグiptables = false(これはSNATのようなiptablesを作成します)を開始しないので、redisスレーブソースIPはSNATになり、マスターは172.16.103.0のようなflannel0のIPを取得します。

また、ノード間のコンテナ接続にフランネルネットワークを追加します。

質問は「iptablesフラグを削除せずに送信元IPを取得する方法はありますか、または信頼できるredisクラスタを作成する他の方法」です。

答えて

2

編集:私はこの功績を得るためにフラグの魔法の組み合わせを考え出しました。

1)ラン停止ドッキングウィンドウ&ブートストラップドッキングウィンドウは

systemctl stop docker && pkill -f "docker-bootstrap" && sleep 10 

2を処理)iptablesのルールを削除します。

iptables -F && iptables -t nat -F 

3)IP-MASQ = falseオプションを使用してドッキングウィンドウ・デーモンを実行し
4)ip-masq = trueオプションでflanneldを実行してください

私にとって、これは3つのpod-> pod、pod-> ext、& ext-> service-> podが完璧に動作します。

これはあなたの残りの人にとってはうまくいきますように!


私はガイドと同じ問題を抱えています(初期症状を説明し、応答を保存)。スレーブは正常にレプリケートしますが、スレーブのステータスをマスターが正しくチェックすることはできません。

Proto Recv-Q Send-Q Local Address   Foreign Address   State  

例slave->マスタ接続マスターの観点から(スレーブの間違ったIPを示す):スレーブ・パースペクティブ(マスタの右IPを示す)から

tcp 0  0 redis-master:6379  10.1.37.0:51674   ESTABLISHED 

例slave->マスタ接続

tcp 0  0 redis-03fdy:51674  10.1.90.2:6379   ESTABLISHED 

以下は、psのredis serverコマンドです。

マスター:

root 12 0.1 0.2 26876 2352 ? Sl 10:42 0:02 redis-server 10.1.90.2:6379 

スレーブ:私たちは私たちのRedisのポッドでhostNetworking: trueを設定することにより、この問題を回避するために管理

root 18 0.1 0.2 26876 2300 ? Sl 10:48 0:00 redis-server 10.1.37.3:6379 
+0

私たちは同じことを見ています、あなたは進歩しましたか? –

+0

https://github.com/antirez/redis/issues/2527 –

+0

@AndySmithはい、私の調整された答えを見てください:) P.S.すべてのノードでflannel ip-masqが実行されていることを確認してください – ssjcory

0

。これは、RedisサーバーがコンテナIP(172 ..)を取得しないことを意味し、間違いなく回避できますが、問題を修正します。

+0

このように修正します。どうもありがとう。 – zhulinhong

関連する問題