@@ -1671,15 +1671,17 @@ func (proxier *Proxier) syncEndpoint(svcPortName proxy.ServicePortName, onlyNode
1671
1671
func (proxier * Proxier ) cleanLegacyService (activeServices map [string ]bool , currentServices map [string ]* utilipvs.VirtualServer , legacyBindAddrs map [string ]bool ) {
1672
1672
for cs := range currentServices {
1673
1673
svc := currentServices [cs ]
1674
+ if proxier .isIPInExcludeCIDRs (svc .Address ) {
1675
+ continue
1676
+ }
1674
1677
if _ , ok := activeServices [cs ]; ! ok {
1675
- // This service was not processed in the latest sync loop so before deleting it,
1676
- okayToDelete := true
1677
1678
rsList , _ := proxier .ipvs .GetRealServers (svc )
1678
1679
1679
1680
// If we still have real servers graceful termination is not done
1680
1681
if len (rsList ) > 0 {
1681
- okayToDelete = false
1682
+ continue
1682
1683
}
1684
+
1683
1685
// Applying graceful termination to all real servers
1684
1686
for _ , rs := range rsList {
1685
1687
uniqueRS := GetUniqueRSName (svc , rs )
@@ -1692,35 +1694,36 @@ func (proxier *Proxier) cleanLegacyService(activeServices map[string]bool, curre
1692
1694
klog .Errorf ("Failed to delete destination: %v, error: %v" , uniqueRS , err )
1693
1695
}
1694
1696
}
1695
- // make sure it does not fall within an excluded CIDR range.
1696
- for _ , excludedCIDR := range proxier .excludeCIDRs {
1697
- // Any validation of this CIDR already should have occurred.
1698
- _ , n , _ := net .ParseCIDR (excludedCIDR )
1699
- if n .Contains (svc .Address ) {
1700
- okayToDelete = false
1701
- break
1702
- }
1697
+ klog .V (4 ).Infof ("Delete service %s" , svc .String ())
1698
+ if err := proxier .ipvs .DeleteVirtualServer (svc ); err != nil {
1699
+ klog .Errorf ("Failed to delete service %s, error: %v" , svc .String (), err )
1703
1700
}
1704
- if okayToDelete {
1705
- klog .V (4 ).Infof ("Delete service %s" , svc .String ())
1706
- if err := proxier .ipvs .DeleteVirtualServer (svc ); err != nil {
1707
- klog .Errorf ("Failed to delete service %s, error: %v" , svc .String (), err )
1708
- }
1709
- addr := svc .Address .String ()
1710
- if _ , ok := legacyBindAddrs [addr ]; ok {
1711
- klog .V (4 ).Infof ("Unbinding address %s" , addr )
1712
- if err := proxier .netlinkHandle .UnbindAddress (addr , DefaultDummyDevice ); err != nil {
1713
- klog .Errorf ("Failed to unbind service addr %s from dummy interface %s: %v" , addr , DefaultDummyDevice , err )
1714
- } else {
1715
- // In case we delete a multi-port service, avoid trying to unbind multiple times
1716
- delete (legacyBindAddrs , addr )
1717
- }
1701
+ addr := svc .Address .String ()
1702
+ if _ , ok := legacyBindAddrs [addr ]; ok {
1703
+ klog .V (4 ).Infof ("Unbinding address %s" , addr )
1704
+ if err := proxier .netlinkHandle .UnbindAddress (addr , DefaultDummyDevice ); err != nil {
1705
+ klog .Errorf ("Failed to unbind service addr %s from dummy interface %s: %v" , addr , DefaultDummyDevice , err )
1706
+ } else {
1707
+ // In case we delete a multi-port service, avoid trying to unbind multiple times
1708
+ delete (legacyBindAddrs , addr )
1718
1709
}
1719
1710
}
1720
1711
}
1721
1712
}
1722
1713
}
1723
1714
1715
+ func (proxier * Proxier ) isIPInExcludeCIDRs (ip net.IP ) bool {
1716
+ // make sure it does not fall within an excluded CIDR range.
1717
+ for _ , excludedCIDR := range proxier .excludeCIDRs {
1718
+ // Any validation of this CIDR already should have occurred.
1719
+ _ , n , _ := net .ParseCIDR (excludedCIDR )
1720
+ if n .Contains (ip ) {
1721
+ return true
1722
+ }
1723
+ }
1724
+ return false
1725
+ }
1726
+
1724
1727
func (proxier * Proxier ) getLegacyBindAddr (activeBindAddrs map [string ]bool , currentBindAddrs []string ) map [string ]bool {
1725
1728
legacyAddrs := make (map [string ]bool )
1726
1729
isIpv6 := utilnet .IsIPv6 (proxier .nodeIP )
0 commit comments