在 Kubernetes 节点上重启后删除 iptables 规则
iptables rules deleted after reboot on Kubernetes nodes
手动添加一些 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 插件网络动态生成?
运行 iptables
on any 系统不是持久性操作,重启时会被遗忘,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(将您的命令放在表中的第一位)。
(请注意,某些 OS 安装可能包括加载 iptables 的启动时服务;有一些安装此类服务的防火墙包 - 如果您的服务器上有一个,最好方法是将您的规则添加到该防火墙的配置中,而不是编写和加载您自己的自定义配置。
手动添加一些 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 插件网络动态生成?
运行 iptables
on any 系统不是持久性操作,重启时会被遗忘,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(将您的命令放在表中的第一位)。
(请注意,某些 OS 安装可能包括加载 iptables 的启动时服务;有一些安装此类服务的防火墙包 - 如果您的服务器上有一个,最好方法是将您的规则添加到该防火墙的配置中,而不是编写和加载您自己的自定义配置。