@@ -238,14 +238,15 @@ func (c *Controller) handleAddVirtualIP(key string) error {
238
238
klog .Error (err )
239
239
return err
240
240
}
241
+ var macPointer * string
241
242
ipStr := util .GetStringIP (sourceV4Ip , sourceV6Ip )
242
- if ipStr != "" {
243
- v4ip , v6ip , mac , err = c .acquireStaticIPAddress (subnet .Name , vip .Name , portName , ipStr )
243
+ if ipStr != "" || vip .Spec .MacAddress != "" {
244
+ macPointer = & vip .Spec .MacAddress
245
+ v4ip , v6ip , mac , err = c .acquireStaticIPAddress (subnet .Name , vip .Name , portName , ipStr , macPointer )
244
246
} else {
245
247
// Random allocate
246
248
v4ip , v6ip , mac , err = c .acquireIPAddress (subnet .Name , vip .Name , portName )
247
249
}
248
-
249
250
if err != nil {
250
251
klog .Error (err )
251
252
return err
@@ -288,10 +289,25 @@ func (c *Controller) handleAddVirtualIP(key string) error {
288
289
parentV6ip = vip .Spec .ParentV6ip
289
290
parentMac = vip .Spec .ParentMac
290
291
}
292
+ if vip .Spec .Type == util .KubeHostVMVip {
293
+ // k8s host network pod vm use vip for its nic ip
294
+ klog .Infof ("create lsp for host network pod vm nic ip %s" , vip .Name )
295
+ ipStr := util .GetStringIP (v4ip , v6ip )
296
+ if err := c .OVNNbClient .CreateLogicalSwitchPort (subnet .Name , portName , ipStr , mac , vip .Name , vip .Spec .Namespace , false , "" , "" , false , nil , subnet .Spec .Vpc ); err != nil {
297
+ err = fmt .Errorf ("failed to create lsp %s: %w" , portName , err )
298
+ klog .Error (err )
299
+ return err
300
+ }
301
+ }
291
302
if err = c .createOrUpdateVipCR (key , vip .Spec .Namespace , subnet .Name , v4ip , v6ip , mac , parentV4ip , parentV6ip , parentMac ); err != nil {
292
303
klog .Errorf ("failed to create or update vip '%s', %v" , vip .Name , err )
293
304
return err
294
305
}
306
+ if vip .Spec .Type == util .KubeHostVMVip {
307
+ // vm use the vip as its real ip
308
+ klog .Infof ("created host network pod vm ip %s" , key )
309
+ return nil
310
+ }
295
311
if err := c .handleUpdateVirtualParents (key ); err != nil {
296
312
err := fmt .Errorf ("error syncing virtual parents for vip '%s': %s" , key , err .Error ())
297
313
klog .Error (err )
@@ -365,14 +381,14 @@ func (c *Controller) handleUpdateVirtualIP(key string) error {
365
381
func (c * Controller ) handleDelVirtualIP (vip * kubeovnv1.Vip ) error {
366
382
klog .Infof ("handle delete vip %s" , vip .Name )
367
383
// TODO:// clean vip in its parent port aap list
368
- if vip .Spec .Type == util . SwitchLBRuleVip {
384
+ if vip .Spec .Type != "" {
369
385
subnet , err := c .subnetsLister .Get (vip .Spec .Subnet )
370
386
if err != nil {
371
387
klog .Errorf ("failed to get subnet %s: %v" , vip .Spec .Subnet , err )
372
388
return err
373
389
}
374
390
portName := ovs .PodNameToPortName (vip .Name , vip .Spec .Namespace , subnet .Spec .Provider )
375
- klog .Infof ("delete vip arp proxy lsp %s" , portName )
391
+ klog .Infof ("delete vip lsp %s" , portName )
376
392
if err := c .OVNNbClient .DeleteLogicalSwitchPort (portName ); err != nil {
377
393
err = fmt .Errorf ("failed to delete lsp %s: %w" , vip .Name , err )
378
394
klog .Error (err )
@@ -398,6 +414,11 @@ func (c *Controller) handleUpdateVirtualParents(key string) error {
398
414
klog .Error (err )
399
415
return err
400
416
}
417
+ if cachedVip .Spec .Type == util .KubeHostVMVip {
418
+ // vm use the vip as its real ip
419
+ klog .Infof ("created host network pod vm ip %s" , key )
420
+ return nil
421
+ }
401
422
// only pods in the same namespace as vip are allowed to use aap
402
423
if (cachedVip .Status .V4ip == "" && cachedVip .Status .V6ip == "" ) || cachedVip .Spec .Namespace == "" {
403
424
return nil
0 commit comments