Skip to content

Commit 8ecbae8

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

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
@@ -31,6 +31,11 @@ import (
3131
"github.com/kubeovn/kube-ovn/pkg/util"
3232
)
3333

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

0 commit comments

Comments
 (0)