手动添加一些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的INPUT
,FORWARD
和OUTPUT
规则和Weave插件网络动态生成?
答案 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的启动时服务;有些防火墙软件包会安装此类服务-如果您的服务器上有一个,最好的方法是添加规则到该防火墙的配置,而不是编写并加载您自己的自定义配置。)