@@ -87,14 +87,15 @@ func (c *Controller) handleAddVirtualIP(key string) error {
87
87
klog .Error (err )
88
88
return err
89
89
}
90
+ var macPointer * string
90
91
ipStr := util .GetStringIP (sourceV4Ip , sourceV6Ip )
91
- if ipStr != "" {
92
- v4ip , v6ip , mac , err = c .acquireStaticIPAddress (subnet .Name , vip .Name , portName , ipStr )
92
+ if ipStr != "" && vip .Spec .MacAddress != "" {
93
+ macPointer = & vip .Spec .MacAddress
94
+ v4ip , v6ip , mac , err = c .acquireStaticIPAddress (subnet .Name , vip .Name , portName , ipStr , macPointer )
93
95
} else {
94
96
// Random allocate
95
97
v4ip , v6ip , mac , err = c .acquireIPAddress (subnet .Name , vip .Name , portName )
96
98
}
97
-
98
99
if err != nil {
99
100
klog .Error (err )
100
101
return err
@@ -137,10 +138,25 @@ func (c *Controller) handleAddVirtualIP(key string) error {
137
138
parentV6ip = vip .Spec .ParentV6ip
138
139
parentMac = vip .Spec .ParentMac
139
140
}
141
+ if vip .Spec .Type == util .KubeHostVMVip {
142
+ // k8s host network pod vm use vip for its nic ip
143
+ klog .Infof ("create lsp for host network pod vm nic ip %s" , vip .Name )
144
+ ipStr := util .GetStringIP (v4ip , v6ip )
145
+ if err := c .OVNNbClient .CreateLogicalSwitchPort (subnet .Name , portName , ipStr , mac , vip .Name , vip .Spec .Namespace , false , "" , "" , false , nil , subnet .Spec .Vpc ); err != nil {
146
+ err = fmt .Errorf ("failed to create lsp %s: %w" , portName , err )
147
+ klog .Error (err )
148
+ return err
149
+ }
150
+ }
140
151
if err = c .createOrUpdateVipCR (key , vip .Spec .Namespace , subnet .Name , v4ip , v6ip , mac , parentV4ip , parentV6ip , parentMac ); err != nil {
141
152
klog .Errorf ("failed to create or update vip '%s', %v" , vip .Name , err )
142
153
return err
143
154
}
155
+ if vip .Spec .Type == util .KubeHostVMVip {
156
+ // vm use the vip as its real ip
157
+ klog .Infof ("created host network pod vm ip %s" , key )
158
+ return nil
159
+ }
144
160
if err := c .handleUpdateVirtualParents (key ); err != nil {
145
161
err := fmt .Errorf ("error syncing virtual parents for vip '%s': %s" , key , err .Error ())
146
162
klog .Error (err )
@@ -214,14 +230,14 @@ func (c *Controller) handleUpdateVirtualIP(key string) error {
214
230
func (c * Controller ) handleDelVirtualIP (vip * kubeovnv1.Vip ) error {
215
231
klog .Infof ("handle delete vip %s" , vip .Name )
216
232
// TODO:// clean vip in its parent port aap list
217
- if vip .Spec .Type == util . SwitchLBRuleVip {
233
+ if vip .Spec .Type != "" {
218
234
subnet , err := c .subnetsLister .Get (vip .Spec .Subnet )
219
235
if err != nil {
220
236
klog .Errorf ("failed to get subnet %s: %v" , vip .Spec .Subnet , err )
221
237
return err
222
238
}
223
239
portName := ovs .PodNameToPortName (vip .Name , vip .Spec .Namespace , subnet .Spec .Provider )
224
- klog .Infof ("delete vip arp proxy lsp %s" , portName )
240
+ klog .Infof ("delete vip lsp %s" , portName )
225
241
if err := c .OVNNbClient .DeleteLogicalSwitchPort (portName ); err != nil {
226
242
err = fmt .Errorf ("failed to delete lsp %s: %w" , vip .Name , err )
227
243
klog .Error (err )
@@ -247,6 +263,11 @@ func (c *Controller) handleUpdateVirtualParents(key string) error {
247
263
klog .Error (err )
248
264
return err
249
265
}
266
+ if cachedVip .Spec .Type == util .KubeHostVMVip {
267
+ // vm use the vip as its real ip
268
+ klog .Infof ("created host network pod vm ip %s" , key )
269
+ return nil
270
+ }
250
271
// only pods in the same namespace as vip are allowed to use aap
251
272
if (cachedVip .Status .V4ip == "" && cachedVip .Status .V6ip == "" ) || cachedVip .Spec .Namespace == "" {
252
273
return nil
0 commit comments