1

手动添加一些 iptables 规则并重新启动机器后,所有规则都消失了(无论规则类型如何)。

前任。

$ iptables -A FUGA-INPUT -p tcp --dport 23 -j DROP
$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
KUBE-EXTERNAL-SERVICES  all  --  anywhere             anywhere             ctstate NEW /* kubernetes externally-visible service portals */
KUBE-FIREWALL  all  --  anywhere             anywhere
DROP       tcp  --  anywhere             anywhere             tcp dpt:telnet

重启后:

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
KUBE-EXTERNAL-SERVICES  all  --  anywhere             anywhere             ctstate NEW /* kubernetes externally-visible service portals */
KUBE-FIREWALL  all  --  anywhere             anywhere

如果我没记错的话,kube-proxy在每个节点上运行都是动态修改iptables. 如果这是正确的,我如何添加永久的规则但仍然使 kubernetes/kube-proxy 能够做到这一点,而不是删除Kubernetes 和 Weave 插件网络动态生成的所有INPUT,FORWARD和规则?OUTPUT

4

1 回答 1

1

iptables任何系统上运行都不是持久性操作,并且在重新启动时会被遗忘,k8s 节点也不例外。我怀疑 k8s 在启动时会删除 IPTABLES 规则,所以你可以试试这个:

  • 创建你的规则(从空的 iptables 开始iptables -A,根据需要使用命令)
  • 运行iptables-save >/etc/my-iptables-rules(注意您也可以手动创建规则文件)。
  • 创建一个在启动(或使用)时运行的系统服务脚本/etc/rc.local并添加iptables-restore -n </etc/my-iptables-rules到它。这将在重新启动时加载您的规则。注意如果你使用rc.local,你的 'iptables-restore' 命令可能会在 k8s 启动后运行,检查你的iptables -A命令是否对在 k8s 之后加载不敏感;如果需要,将文件中的 -A 命令替换为 -I(将您的命令首先放在表中)。

(请注意,某些操作系统安装可能还包括加载 iptables 的启动时服务;有一些防火墙软件包会安装此类服务 - 如果您的服务器上有一个,最好的方法是将您的规则添加到该防火墙的配置,而不是编写和加载您自己的自定义配置)。

于 2018-08-14T14:47:43.980 回答