@@ -100,7 +100,11 @@ func (c *Controller) enqueueUpdateIptablesDnatRule(old, new interface{}) {
100
100
101
101
if oldDnat .Status .V4ip != newDnat .Status .V4ip ||
102
102
oldDnat .Spec .EIP != newDnat .Spec .EIP ||
103
- oldDnat .Status .Redo != newDnat .Status .Redo {
103
+ oldDnat .Status .Redo != newDnat .Status .Redo ||
104
+ oldDnat .Spec .Protocol != newDnat .Spec .Protocol ||
105
+ oldDnat .Spec .InternalIp != newDnat .Spec .InternalIp ||
106
+ oldDnat .Spec .InternalPort != newDnat .Spec .InternalPort ||
107
+ oldDnat .Spec .ExternalPort != newDnat .Spec .ExternalPort {
104
108
klog .V (3 ).Infof ("enqueue update dnat %s" , key )
105
109
c .updateIptablesDnatRuleQueue .Add (key )
106
110
return
@@ -781,24 +785,26 @@ func (c *Controller) handleUpdateIptablesDnatRule(key string) error {
781
785
if vpcNatEnabled != "true" {
782
786
return fmt .Errorf ("iptables nat gw not enable" )
783
787
}
788
+
789
+ if err = c .deleteDnatInPod (cachedDnat .Status .NatGwDp , cachedDnat .Status .Protocol ,
790
+ cachedDnat .Status .V4ip , cachedDnat .Status .InternalIp ,
791
+ cachedDnat .Status .ExternalPort , cachedDnat .Status .InternalPort ); err != nil {
792
+ klog .Errorf ("failed to delete old dnat, %v" , err )
793
+ return err
794
+ }
795
+ if err = c .createDnatInPod (eip .Spec .NatGwDp , cachedDnat .Spec .Protocol ,
796
+ eip .Status .IP , cachedDnat .Spec .InternalIp ,
797
+ cachedDnat .Spec .ExternalPort , cachedDnat .Spec .InternalPort ); err != nil {
798
+ klog .Errorf ("failed to create new dnat %s, %v" , key , err )
799
+ return err
800
+ }
801
+ if err = c .patchDnatStatus (key , eip .Status .IP , eip .Spec .V6ip , eip .Spec .NatGwDp , "" , true ); err != nil {
802
+ klog .Errorf ("failed to patch status for dnat %s , %v" , key , err )
803
+ return err
804
+ }
805
+
784
806
if c .dnatChangeEip (cachedDnat , eip ) {
785
807
klog .V (3 ).Infof ("dnat change ip, old ip '%s', new ip %s" , cachedDnat .Status .V4ip , eip .Status .IP )
786
- if err = c .deleteDnatInPod (cachedDnat .Status .NatGwDp , cachedDnat .Spec .Protocol ,
787
- cachedDnat .Status .V4ip , cachedDnat .Spec .InternalIp ,
788
- cachedDnat .Spec .ExternalPort , cachedDnat .Spec .InternalPort ); err != nil {
789
- klog .Errorf ("failed to delete old dnat, %v" , err )
790
- return err
791
- }
792
- if err = c .createDnatInPod (eip .Spec .NatGwDp , cachedDnat .Spec .Protocol ,
793
- eip .Status .IP , cachedDnat .Spec .InternalIp ,
794
- cachedDnat .Spec .ExternalPort , cachedDnat .Spec .InternalPort ); err != nil {
795
- klog .Errorf ("failed to create new dnat %s, %v" , key , err )
796
- return err
797
- }
798
- if err = c .patchDnatStatus (key , eip .Status .IP , eip .Spec .V6ip , eip .Spec .NatGwDp , "" , true ); err != nil {
799
- klog .Errorf ("failed to patch status for dnat %s , %v" , key , err )
800
- return err
801
- }
802
808
if err = c .patchEipNat (eipName , util .DnatUsingEip ); err != nil {
803
809
klog .Errorf ("failed to patch dnat use eip %s, %v" , key , err )
804
810
return err
@@ -1381,6 +1387,22 @@ func (c *Controller) patchDnatStatus(key, v4ip, v6ip, natGwDp, redo string, read
1381
1387
dnat .Status .NatGwDp = natGwDp
1382
1388
changed = true
1383
1389
}
1390
+ if ready && dnat .Status .Protocol != "" && dnat .Status .Protocol != dnat .Spec .Protocol {
1391
+ dnat .Status .Protocol = dnat .Spec .Protocol
1392
+ changed = true
1393
+ }
1394
+ if ready && dnat .Status .InternalIp != "" && dnat .Status .InternalIp != dnat .Spec .InternalIp {
1395
+ dnat .Status .InternalIp = dnat .Spec .InternalIp
1396
+ changed = true
1397
+ }
1398
+ if ready && dnat .Status .InternalPort != "" && dnat .Status .InternalPort != dnat .Spec .InternalPort {
1399
+ dnat .Status .InternalPort = dnat .Spec .InternalPort
1400
+ changed = true
1401
+ }
1402
+ if ready && dnat .Status .ExternalPort != "" && dnat .Status .ExternalPort != dnat .Spec .ExternalPort {
1403
+ dnat .Status .ExternalPort = dnat .Spec .ExternalPort
1404
+ changed = true
1405
+ }
1384
1406
1385
1407
if changed {
1386
1408
bytes , err := dnat .Status .Bytes ()
0 commit comments