Skip to content

Commit 5a9d057

Browse files
committed
underlay: sync NetworkManager IP config to OVS bridge
1 parent f52b150 commit 5a9d057

8 files changed

+419
-61
lines changed

pkg/daemon/controller.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ func (c *Controller) initProviderNetwork(pn *kubeovnv1.ProviderNetwork, node *v1
277277
var mtu int
278278
var err error
279279
klog.V(3).Infof("ovs init provider network %s", pn.Name)
280-
if mtu, err = ovsInitProviderNetwork(pn.Name, nic, pn.Spec.ExchangeLinkName, c.config.MacLearningFallback); err != nil {
280+
if mtu, err = c.ovsInitProviderNetwork(pn.Name, nic, pn.Spec.ExchangeLinkName, c.config.MacLearningFallback); err != nil {
281281
if oldLen := len(node.Labels); oldLen != 0 {
282282
delete(node.Labels, fmt.Sprintf(util.ProviderNetworkReadyTemplate, pn.Name))
283283
delete(node.Labels, fmt.Sprintf(util.ProviderNetworkInterfaceTemplate, pn.Name))
@@ -391,15 +391,15 @@ func (c *Controller) cleanProviderNetwork(pn *kubeovnv1.ProviderNetwork, node *v
391391
return err
392392
}
393393

394-
if err = ovsCleanProviderNetwork(pn.Name); err != nil {
394+
if err = c.ovsCleanProviderNetwork(pn.Name); err != nil {
395395
return err
396396
}
397397

398398
return nil
399399
}
400400

401401
func (c *Controller) handleDeleteProviderNetwork(pn *kubeovnv1.ProviderNetwork) error {
402-
if err := ovsCleanProviderNetwork(pn.Name); err != nil {
402+
if err := c.ovsCleanProviderNetwork(pn.Name); err != nil {
403403
return err
404404
}
405405

pkg/daemon/controller_linux.go

+5
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ type ControllerRuntime struct {
3838
k8sipsets k8sipset.Interface
3939
ipsets map[string]*ipsets.IPSets
4040
gwCounters map[string]*util.GwIPtableCounters
41+
42+
nmSyncer *networkManagerSyncer
4143
}
4244

4345
func evalCommandSymlinks(cmd string) (string, error) {
@@ -113,6 +115,9 @@ func (c *Controller) initRuntime() error {
113115
c.k8siptables[kubeovnv1.ProtocolIPv6] = k8siptables.New(c.k8sExec, k8siptables.ProtocolIPv6)
114116
}
115117

118+
c.nmSyncer = newNetworkManagerSyncer()
119+
c.nmSyncer.Run()
120+
116121
return nil
117122
}
118123

pkg/daemon/init.go

+5-9
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ func InitOVSBridges() (map[string]string, error) {
4040
return nil, fmt.Errorf("failed to check vendor of port %s: %v", port, err)
4141
}
4242
if ok {
43-
klog.Infof("config provider nic %s on bridge %s", port, brName)
44-
if _, err = configProviderNic(port, brName); err != nil {
45-
return nil, err
46-
}
4743
mappings[port] = brName
4844
}
4945
}
@@ -97,11 +93,11 @@ func InitMirror(config *Configuration) error {
9793
return configureEmptyMirror(config.MirrorNic, config.MTU)
9894
}
9995

100-
func ovsInitProviderNetwork(provider, nic string, exchangeLinkName, macLearningFallback bool) (int, error) {
96+
func (c *Controller) ovsInitProviderNetwork(provider, nic string, exchangeLinkName, macLearningFallback bool) (int, error) {
10197
// create and configure external bridge
10298
brName := util.ExternalBridgeName(provider)
10399
if exchangeLinkName {
104-
exchanged, err := changeProvideNicName(nic, brName)
100+
exchanged, err := c.changeProvideNicName(nic, brName)
105101
if err != nil {
106102
klog.Errorf("failed to change provider nic name from %s to %s: %v", nic, brName, err)
107103
return 0, err
@@ -127,7 +123,7 @@ func ovsInitProviderNetwork(provider, nic string, exchangeLinkName, macLearningF
127123

128124
// add host nic to the external bridge
129125
klog.Infof("config provider nic %s on bridge %s", nic, brName)
130-
mtu, err := configProviderNic(nic, brName)
126+
mtu, err := c.configProviderNic(nic, brName)
131127
if err != nil {
132128
errMsg := fmt.Errorf("failed to add nic %s to external bridge %s: %v", nic, brName, err)
133129
klog.Error(errMsg)
@@ -137,7 +133,7 @@ func ovsInitProviderNetwork(provider, nic string, exchangeLinkName, macLearningF
137133
return mtu, nil
138134
}
139135

140-
func ovsCleanProviderNetwork(provider string) error {
136+
func (c *Controller) ovsCleanProviderNetwork(provider string) error {
141137
mappings, err := getOvnMappings("ovn-bridge-mappings")
142138
if err != nil {
143139
return err
@@ -191,7 +187,7 @@ func ovsCleanProviderNetwork(provider string) error {
191187
klog.V(3).Infof("ovs bridge %s has been deleted", brName)
192188

193189
if br := util.ExternalBridgeName(provider); br != brName {
194-
if _, err = changeProvideNicName(br, brName); err != nil {
190+
if _, err = c.changeProvideNicName(br, brName); err != nil {
195191
klog.Errorf("failed to change provider nic name from %s to %s: %v", br, brName, err)
196192
return err
197193
}

pkg/daemon/init_linux.go

+3-44
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package daemon
33
import (
44
"time"
55

6-
"github.com/kubeovn/gonetworkmanager/v2"
76
"github.com/vishvananda/netlink"
87
"k8s.io/klog/v2"
98

@@ -17,46 +16,6 @@ var routeScopeOrders = [...]netlink.Scope{
1716
netlink.SCOPE_UNIVERSE,
1817
}
1918

20-
func nmSetManaged(device string, managed bool) error {
21-
nm, err := gonetworkmanager.NewNetworkManager()
22-
if err != nil {
23-
klog.V(5).Infof("failed to connect to NetworkManager: %v", err)
24-
return nil
25-
}
26-
27-
running, err := nm.Running()
28-
if err != nil {
29-
klog.Warningf("failed to check NetworkManager running state: %v", err)
30-
return nil
31-
}
32-
if !running {
33-
klog.V(5).Info("NetworkManager is not running, ignore")
34-
return nil
35-
}
36-
37-
d, err := nm.GetDeviceByIpIface(device)
38-
if err != nil {
39-
klog.Errorf("failed to get device by IP iface %s: %v", device, err)
40-
return err
41-
}
42-
current, err := d.GetPropertyManaged()
43-
if err != nil {
44-
klog.Errorf("failed to get device property managed: %v", err)
45-
return err
46-
}
47-
if current == managed {
48-
return nil
49-
}
50-
51-
klog.Infof(`setting device %s NetworkManager property "managed" to %v`, device, managed)
52-
if err = d.SetPropertyManaged(managed); err != nil {
53-
klog.Errorf("failed to set device property managed to %v: %v", managed, err)
54-
return err
55-
}
56-
57-
return nil
58-
}
59-
6019
// wait systemd-networkd to finish interface configuration
6120
func waitNetworkdConfiguration(linkIndex int) {
6221
done := make(chan struct{})
@@ -90,7 +49,7 @@ func waitNetworkdConfiguration(linkIndex int) {
9049
}
9150
}
9251

93-
func changeProvideNicName(current, target string) (bool, error) {
52+
func (c *Controller) changeProvideNicName(current, target string) (bool, error) {
9453
link, err := netlink.LinkByName(current)
9554
if err != nil {
9655
if _, ok := err.(netlink.LinkNotFoundError); ok {
@@ -117,8 +76,8 @@ func changeProvideNicName(current, target string) (bool, error) {
11776
}
11877

11978
// set link unmanaged by NetworkManager
120-
if err = nmSetManaged(current, false); err != nil {
121-
klog.Errorf("failed set device %s unmanaged by NetworkManager: %v", current, err)
79+
if err = c.nmSyncer.SetManaged(current, false); err != nil {
80+
klog.Errorf("failed to set device %s unmanaged by NetworkManager: %v", current, err)
12281
return false, err
12382
}
12483

pkg/daemon/init_windows.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package daemon
22

3-
func changeProvideNicName(nic, br string) (bool, error) {
3+
func (c *Controller) changeProvideNicName(nic, br string) (bool, error) {
44
// not supported on windows
55
return false, nil
66
}

0 commit comments

Comments
 (0)