Skip to content

Commit 2cc515e

Browse files
zhangzujianoilbeater
authored andcommitted
clean up legacy iptables rules only when iptables/ip6_tables is loaded (#4855)
Signed-off-by: zhangzujian <zhangzujian.7@gmail.com>
1 parent d53efc6 commit 2cc515e

File tree

1 file changed

+41
-8
lines changed

1 file changed

+41
-8
lines changed

pkg/daemon/controller_linux.go

+41-8
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ import (
3030
"github.com/kubeovn/kube-ovn/pkg/util"
3131
)
3232

33+
const (
34+
kernelModuleIPTables = "ip_tables"
35+
kernelModuleIP6Tables = "ip6_tables"
36+
)
37+
3338
// ControllerRuntime represents runtime specific controller members
3439
type ControllerRuntime struct {
3540
iptables map[string]*iptables.IPTables
@@ -92,11 +97,17 @@ func (c *Controller) initRuntime() error {
9297
}
9398
c.iptables[kubeovnv1.ProtocolIPv4] = ipt
9499
if c.iptablesObsolete != nil {
95-
if ipt, err = iptables.NewWithProtocolAndMode(iptables.ProtocolIPv4, "legacy"); err != nil {
96-
klog.Error(err)
97-
return err
100+
ok, err := kernelModuleLoaded(kernelModuleIPTables)
101+
if err != nil {
102+
klog.Errorf("failed to check kernel module %s: %v", kernelModuleIPTables, err)
103+
}
104+
if ok {
105+
if ipt, err = iptables.NewWithProtocolAndMode(iptables.ProtocolIPv4, "legacy"); err != nil {
106+
klog.Error(err)
107+
return err
108+
}
109+
c.iptablesObsolete[kubeovnv1.ProtocolIPv4] = ipt
98110
}
99-
c.iptablesObsolete[kubeovnv1.ProtocolIPv4] = ipt
100111
}
101112
c.ipsets[kubeovnv1.ProtocolIPv4] = ipsets.NewIPSets(ipsets.NewIPVersionConfig(ipsets.IPFamilyV4, IPSetPrefix, nil, nil))
102113
c.k8siptables[kubeovnv1.ProtocolIPv4] = k8siptables.New(c.k8sExec, k8siptables.ProtocolIPv4)
@@ -109,11 +120,17 @@ func (c *Controller) initRuntime() error {
109120
}
110121
c.iptables[kubeovnv1.ProtocolIPv6] = ipt
111122
if c.iptablesObsolete != nil {
112-
if ipt, err = iptables.NewWithProtocolAndMode(iptables.ProtocolIPv6, "legacy"); err != nil {
113-
klog.Error(err)
114-
return err
123+
ok, err := kernelModuleLoaded(kernelModuleIP6Tables)
124+
if err != nil {
125+
klog.Errorf("failed to check kernel module %s: %v", kernelModuleIP6Tables, err)
126+
}
127+
if ok {
128+
if ipt, err = iptables.NewWithProtocolAndMode(iptables.ProtocolIPv6, "legacy"); err != nil {
129+
klog.Error(err)
130+
return err
131+
}
132+
c.iptablesObsolete[kubeovnv1.ProtocolIPv6] = ipt
115133
}
116-
c.iptablesObsolete[kubeovnv1.ProtocolIPv6] = ipt
117134
}
118135
c.ipsets[kubeovnv1.ProtocolIPv6] = ipsets.NewIPSets(ipsets.NewIPVersionConfig(ipsets.IPFamilyV6, IPSetPrefix, nil, nil))
119136
c.k8siptables[kubeovnv1.ProtocolIPv6] = k8siptables.New(c.k8sExec, k8siptables.ProtocolIPv6)
@@ -695,3 +712,19 @@ func rotateLog() {
695712
klog.Errorf("failed to rotate kube-ovn log %q", output)
696713
}
697714
}
715+
716+
func kernelModuleLoaded(module string) (bool, error) {
717+
data, err := os.ReadFile("/proc/modules")
718+
if err != nil {
719+
klog.Errorf("failed to read /proc/modules: %v", err)
720+
return false, err
721+
}
722+
723+
for _, line := range strings.Split(string(data), "\n") {
724+
if fields := strings.Fields(line); len(fields) != 0 && fields[0] == module {
725+
return true, nil
726+
}
727+
}
728+
729+
return false, nil
730+
}

0 commit comments

Comments
 (0)