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

在Kubernetes节点上重新启动后删除iptables规则,kubernetes,iptables,weave,kube-proxy,Kubernetes,Iptables,Weave,Kube Proxy,手动添加一些iptables规则并重新启动计算机后,所有规则都将消失(无论规则类型如何) 前 重新启动后: $ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination KUBE-EXTERNAL-SERVICES all -- anywhere anywhere ctstate NEW /* kubernetes

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

重新启动后:

$ 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代理
正在动态修改
iptables
。如果这是正确的,我如何添加永久性的规则,但仍然使kubernetes/kube代理发挥神奇的作用,而不是删除所有的
输入
FORWARD
OUTPUT
Kubernetes和Weave plugin network动态生成的规则?

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

  • 创建规则(从空iptables开始,根据需要使用
    iptables-A
    命令)
  • 运行
    iptables save>/etc/my iptables rules
    (注意,您也可以手动创建规则文件)

  • 创建一个在启动时运行的系统服务脚本(或使用
    /etc/rc.local
    ),并添加
    iptables restore-n这是在启动时运行服务/启动脚本的好方法,可以解决部分问题,但因为k8s动态创建规则,所以每当我重新启动时,静态规则集的顺序都会改变(即使我使用
    -I
    )设置了规则。我不知道何时启动脚本并确保某些k8s规则已经应用。这可能与kube proxy有关。我已经发布了指向上述评论的内容,因为最初的问题已经得到了回答。
    $ 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