在Kubernetes节点上重启后删除iptables规则

时间:2018-08-14 14:35:12

标签: kubernetes iptables weave kube-proxy

手动添加一些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的INPUTFORWARDOUTPUT规则和Weave插件网络动态生成?

1 个答案:

答案 0 :(得分:1)

任何系统上运行iptables不是持久性操作,在重新启动时会被遗忘,k8s节点也不例外。我怀疑k8s在启动时会清除IPTABLES规则,因此您可以尝试以下方法:

  • 创建您的规则(根据需要,使用iptables -A命令以空iptables开头)
  • 运行iptables-save >/etc/my-iptables-rules(注意,您也可以手动创建规则文件)。
  • 创建一个在引导(或使用/etc/rc.local)上运行的系统服务脚本,然后向其中添加iptables-restore -n </etc/my-iptables-rules。这将在重新启动时加载您的规则。注意,如果您使用rc.local,则在k8s启动之后,'iptables-restore'命令可能会很好地运行,请检查iptables -A命令对k8s之后的加载不敏感;如有需要,请用-I替换文件中的-A命令(将您的命令放在表的最前面)。

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