Skip to content

Commit 193065b

Browse files
authored
Merge pull request #103 from jtherin/pick-0.21-acl
fix(loadbalancers): make sure to split huge ACLs
2 parents 06f06b6 + 44ab3fd commit 193065b

File tree

5 files changed

+50
-42
lines changed

5 files changed

+50
-42
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/scaleway/scaleway-cloud-controller-manager
33
go 1.15
44

55
require (
6-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20210817142252-2836d8ffcc09
6+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9
77
github.com/spf13/pflag v1.0.5
88
k8s.io/api v0.21.0
99
k8s.io/apimachinery v0.21.0

go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm
9494
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
9595
github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY=
9696
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
97+
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
9798
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
9899
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
99100
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
@@ -286,6 +287,7 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
286287
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
287288
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
288289
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
290+
github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
289291
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
290292
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
291293
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
@@ -339,8 +341,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
339341
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
340342
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
341343
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
342-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20210817142252-2836d8ffcc09 h1:yhJDl3IfiMEtenYzmBE8txehmXD9jztfUTtpdLb/WYU=
343-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20210817142252-2836d8ffcc09/go.mod h1:CJJ5VAbozOl0yEw7nHB9+7BXTJbIn6h7W+f6Gau5IP8=
344+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9 h1:0roa6gXKgyta64uqh52AQG3wzZXH21unn+ltzQSXML0=
345+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
344346
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
345347
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
346348
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=

scaleway/baremetal.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package scaleway
1919
import (
2020
"context"
2121

22-
scwbaremetal "github.com/scaleway/scaleway-sdk-go/api/baremetal/v1alpha1"
22+
scwbaremetal "github.com/scaleway/scaleway-sdk-go/api/baremetal/v1"
2323
"github.com/scaleway/scaleway-sdk-go/scw"
2424
v1 "k8s.io/api/core/v1"
2525
"k8s.io/apimachinery/pkg/types"

scaleway/baremetal_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"strings"
2323
"testing"
2424

25-
scwbaremetal "github.com/scaleway/scaleway-sdk-go/api/baremetal/v1alpha1"
25+
scwbaremetal "github.com/scaleway/scaleway-sdk-go/api/baremetal/v1"
2626
"github.com/scaleway/scaleway-sdk-go/scw"
2727
v1 "k8s.io/api/core/v1"
2828
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

scaleway/loadbalancers.go

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package scaleway
1919
import (
2020
"context"
2121
"fmt"
22+
"math"
2223
"os"
2324
"strconv"
2425
"strings"
@@ -153,6 +154,8 @@ const (
153154
serviceAnnotationLoadBalancerCertificateIDs = "service.beta.kubernetes.io/scw-loadbalancer-certificate-ids"
154155
)
155156

157+
const MaxEntriesPerACL = 60
158+
156159
type loadbalancers struct {
157160
api LoadBalancerAPI
158161
client *client // for patcher
@@ -180,6 +183,7 @@ type LoadBalancerAPI interface {
180183
CreateACL(req *scwlb.ZonedAPICreateACLRequest, opts ...scw.RequestOption) (*scwlb.ACL, error)
181184
DeleteACL(req *scwlb.ZonedAPIDeleteACLRequest, opts ...scw.RequestOption) error
182185
UpdateACL(req *scwlb.ZonedAPIUpdateACLRequest, opts ...scw.RequestOption) (*scwlb.ACL, error)
186+
SetACLs(req *scwlb.ZonedAPISetACLsRequest, opts ...scw.RequestOption) (*scwlb.SetACLsResponse, error)
183187
}
184188

185189
func newLoadbalancers(client *client, defaultLBType string) *loadbalancers {
@@ -771,48 +775,50 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
771775
aclIPs := extractNodesInternalIps(nodes)
772776
aclIPs = append(aclIPs, extractNodesExternalIps(nodes)...)
773777
aclIPs = append(aclIPs, service.Spec.LoadBalancerSourceRanges...)
774-
aclIPsPtr := make([]*string, len(aclIPs))
778+
aclIPsPtr := []*string{}
779+
newAcls := []*scwlb.ACLSpec{}
780+
781+
// Loop through all addresses and make sure to split ACLs every MaxEntriesPerACL.
775782
for i := range aclIPs {
776-
aclIPsPtr[i] = &aclIPs[i]
783+
if i != 0 && i%MaxEntriesPerACL == 0 {
784+
aclIndex := int32((i / MaxEntriesPerACL) - 1)
785+
newAcls = append(newAcls, &scwlb.ACLSpec{
786+
Name: fmt.Sprintf("%v-%d", aclName, aclIndex),
787+
Action: &scwlb.ACLAction{
788+
Type: scwlb.ACLActionTypeAllow,
789+
},
790+
Index: aclIndex,
791+
Match: &scwlb.ACLMatch{
792+
IPSubnet: aclIPsPtr,
793+
},
794+
})
795+
796+
aclIPsPtr = []*string{}
797+
}
798+
aclIPsPtr = append(aclIPsPtr, &aclIPs[i])
777799
}
778800

779-
if len(acls.ACLs) != 1 {
780-
_, err := l.api.CreateACL(&scwlb.ZonedAPICreateACLRequest{
781-
Zone: loadbalancer.Zone,
782-
FrontendID: frontendID,
783-
Name: aclName,
784-
Action: &scwlb.ACLAction{
785-
Type: scwlb.ACLActionTypeDeny,
786-
},
787-
Index: 0,
788-
Match: &scwlb.ACLMatch{
789-
IPSubnet: aclIPsPtr,
790-
Invert: true,
791-
},
792-
})
793-
if err != nil {
794-
return err
795-
}
796-
} else if len(acls.ACLs) == 1 {
797-
_, err := l.api.UpdateACL(&scwlb.ZonedAPIUpdateACLRequest{
798-
Zone: loadbalancer.Zone,
799-
ACLID: acls.ACLs[0].ID,
800-
Action: &scwlb.ACLAction{
801-
Type: scwlb.ACLActionTypeDeny,
802-
},
803-
Index: 0,
804-
Match: &scwlb.ACLMatch{
805-
Invert: true,
806-
IPSubnet: aclIPsPtr,
807-
},
808-
Name: aclName,
809-
})
810-
if err != nil {
811-
return err
812-
}
801+
// Add last ACL with remaining addresses.
802+
newAcls = append(newAcls, &scwlb.ACLSpec{
803+
Name: aclName + "-end",
804+
Action: &scwlb.ACLAction{
805+
Type: scwlb.ACLActionTypeDeny,
806+
},
807+
Index: math.MaxInt32,
808+
Match: &scwlb.ACLMatch{
809+
IPSubnet: aclIPsPtr,
810+
Invert: true,
811+
},
812+
})
813813

814+
_, err := l.api.SetACLs(&scwlb.ZonedAPISetACLsRequest{
815+
Zone: loadbalancer.Zone,
816+
FrontendID: frontendID,
817+
ACLs: newAcls,
818+
})
819+
if err != nil {
820+
return err
814821
}
815-
816822
}
817823
}
818824

0 commit comments

Comments
 (0)