@@ -20,6 +20,7 @@ import (
2020 "context"
2121 "errors"
2222 "fmt"
23+ "net"
2324 "os"
2425 "reflect"
2526 "strconv"
@@ -1858,10 +1859,26 @@ func makeACLSpecs(service *v1.Service, nodes []*v1.Node, frontend *scwlb.Fronten
18581859 return []* scwlb.ACLSpec {}
18591860 }
18601861
1862+ sourceRanges := make ([]string , 0 , len (service .Spec .LoadBalancerSourceRanges ))
1863+ for _ , sourceRange := range service .Spec .LoadBalancerSourceRanges {
1864+ if _ , _ , err := net .ParseCIDR (sourceRange ); err != nil {
1865+ klog .Warningf ("ignoring invalid CIDR %s in LoadBalancerSourceRanges for service %s/%s: %v" , sourceRange , service .Namespace , service .Name , err )
1866+ continue
1867+ }
1868+
1869+ if strings .Contains (sourceRange , ":" ) {
1870+ sourceRange = strings .TrimSuffix (sourceRange , "/128" )
1871+ } else {
1872+ sourceRange = strings .TrimSuffix (sourceRange , "/32" )
1873+ }
1874+
1875+ sourceRanges = append (sourceRanges , sourceRange )
1876+ }
1877+
18611878 aclPrefix := makeACLPrefix (frontend )
18621879 whitelist := extractNodesInternalIps (nodes )
18631880 whitelist = append (whitelist , extractNodesExternalIps (nodes )... )
1864- whitelist = append (whitelist , strip32SubnetMasks ( service . Spec . LoadBalancerSourceRanges ) ... )
1881+ whitelist = append (whitelist , sourceRanges ... )
18651882
18661883 slices .Sort (whitelist )
18671884
@@ -1895,14 +1912,6 @@ func makeACLSpecs(service *v1.Service, nodes []*v1.Node, frontend *scwlb.Fronten
18951912 return acls
18961913}
18971914
1898- func strip32SubnetMasks (subnets []string ) []string {
1899- stripped := make ([]string , len (subnets ))
1900- for idx , subnet := range subnets {
1901- stripped [idx ] = strings .TrimSuffix (subnet , "/32" )
1902- }
1903- return stripped
1904- }
1905-
19061915func ptrInt32ToString (i * int32 ) string {
19071916 if i == nil {
19081917 return "<nil>"
0 commit comments