4

K8s の例を使用して、信頼性が高くスケーラブルな Redis を Kubernetes 上に作成します。 https://github.com/kubernetes/kubernetes/tree/master/examples/redis

Redis マスターはスレーブに元の IP を取得し、センチネルに登録する必要があります。Sentinel は、マスターに障害が発生したときにマスターを切り替えるために使用します。

しかし、私の docker はフラグ iptables=false (SNAT のような iptables を作成します) なしで起動するため、redis スレーブ ソース IP は SNAT になり、マスターは 172.16.103.0 のような flannel0 の IP を取得します。

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

したがって、問題は、「iptables フラグを削除せずにソース IP を取得する方法、または信頼できる redis クラスターを作成する別の方法はありますか」ということです。

4

3 に答える 3

2

編集:これを機能させるためのフラグの魔法の組み合わせを見つけました。

1) docker の停止とブートストラップ docker プロセスの実行

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

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

iptables -F && iptables -t nat -F  

3) ip-masq=false オプション
を指定して docker-daemon を実行します 4) ip-masq=true オプションを指定して flanneld を実行します

私にとっては、これにより、3 つのすべての pod->pod、pod->ext、および ext->service->pod が完全に機能します。

これがあなたの残りのためにうまくいくことを願っています!


(症状を説明した初期対応を維持する)

ガイドにも同じ問題があります。スレーブは正常に複製されますが、接続がドット ゼロ IP から来ているため、マスターはスレーブのステータスを適切に確認できません。

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

マスターの観点から見たスレーブ -> マスター接続の例 (スレーブの間違った IP を示しています):

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

スレーブの観点から見たスレーブ -> マスター接続の例 (マスターの正しい IP を表示):

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

ps からの redis サーバー コマンドは次のとおりです。

主人:

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

スレーブ:

root   18  0.1  0.2  26876  2300 ?   Sl   10:48   0:00 redis-server 10.1.37.3:6379
于 2016-05-24T11:15:22.880 に答える
0

hostNetworking: trueこれは、redis ポッドを設定することで回避できました。これは、redis サーバーがコンテナー IP (172..) を取得しないことを意味し、間違いなく回避策ですが、問題は修正されます。

于 2016-05-31T13:28:07.600 に答える