Skip to content

Commit 0024c83

Browse files
authored
Merge pull request kubernetes#88392 from skmatti/global-access-ga
Promote GlobalAccess for GCE Internal Loadbalancers to GA
2 parents 3b02433 + aa6e589 commit 0024c83

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+112913
-56804
lines changed

LICENSES/vendor/github.com/googleapis/gax-go/v2/LICENSE

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ require (
110110
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72
111111
gonum.org/v1/gonum v0.6.2
112112
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect
113-
google.golang.org/api v0.6.1-0.20190607001116-5213b8090861
113+
google.golang.org/api v0.15.1
114114
google.golang.org/grpc v1.26.0
115115
gopkg.in/gcfg.v1 v1.2.0
116116
gopkg.in/square/go-jose.v2 v2.2.2
@@ -269,7 +269,7 @@ replace (
269269
github.com/google/martian => github.com/google/martian v2.1.0+incompatible
270270
github.com/google/pprof => github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57
271271
github.com/google/uuid => github.com/google/uuid v1.1.1
272-
github.com/googleapis/gax-go/v2 => github.com/googleapis/gax-go/v2 v2.0.4
272+
github.com/googleapis/gax-go/v2 => github.com/googleapis/gax-go/v2 v2.0.5
273273
github.com/googleapis/gnostic => github.com/googleapis/gnostic v0.4.1
274274
github.com/gophercloud/gophercloud => github.com/gophercloud/gophercloud v0.1.0
275275
github.com/gopherjs/gopherjs => github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1
@@ -418,7 +418,7 @@ replace (
418418
gonum.org/v1/gonum => gonum.org/v1/gonum v0.6.2
419419
gonum.org/v1/netlib => gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e
420420
gonum.org/v1/plot => gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b
421-
google.golang.org/api => google.golang.org/api v0.6.1-0.20190607001116-5213b8090861
421+
google.golang.org/api => google.golang.org/api v0.15.1
422422
google.golang.org/appengine => google.golang.org/appengine v1.5.0
423423
google.golang.org/genproto => google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb
424424
google.golang.org/grpc => google.golang.org/grpc v1.26.0

go.sum

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,8 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi
215215
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
216216
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
217217
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
218-
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
218+
github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
219+
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
219220
github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
220221
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
221222
github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o=
@@ -481,8 +482,8 @@ gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
481482
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts=
482483
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
483484
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
484-
google.golang.org/api v0.6.1-0.20190607001116-5213b8090861 h1:ppLucX0K/60T3t6LPZQzTOkt5PytkEbQLIaSteq+TpE=
485-
google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4=
485+
google.golang.org/api v0.15.1 h1:5mMS6mYvK5LVB8+ujVBC33Y8gltBo/kT6HBm6kU80G4=
486+
google.golang.org/api v0.15.1/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
486487
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
487488
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
488489
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb h1:ADPHZzpzM4tk4V4S5cnCrr5SwzvlrPRmqqCuJDB8UTs=
@@ -515,6 +516,7 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
515516
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
516517
gotest.tools/v3 v3.0.2 h1:kG1BFyqVHuQoVQiR1bWGnfz/fmHvvuiSPIV7rvl360E=
517518
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
519+
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a h1:LJwr7TCTghdatWv40WobzlKXc9c4s8oGa7QKJUtHhWA=
518520
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
519521
k8s.io/gengo v0.0.0-20200205140755-e0e292d8aa12 h1:pZzawYyz6VRNPVYpqGv61LWCimQv1BihyeqFrp50/G4=
520522
k8s.io/gengo v0.0.0-20200205140755-e0e292d8aa12/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=

staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal.go

Lines changed: 35 additions & 167 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828

2929
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
3030
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
31-
computebeta "google.golang.org/api/compute/v0.beta"
3231
compute "google.golang.org/api/compute/v1"
3332
"k8s.io/api/core/v1"
3433
"k8s.io/apimachinery/pkg/types"
@@ -169,24 +168,28 @@ func (g *Cloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v
169168
return nil, err
170169
}
171170

172-
newFRC := &forwardingRuleComposite{
173-
name: loadBalancerName,
174-
description: &forwardingRuleDescription{ServiceName: nm.String()},
175-
ipAddress: ipToUse,
176-
backendService: backendServiceLink,
177-
ports: ports,
178-
ipProtocol: string(protocol),
179-
lbScheme: string(scheme),
171+
fwdRuleDescription := &forwardingRuleDescription{ServiceName: nm.String()}
172+
fwdRuleDescriptionString, err := fwdRuleDescription.marshal()
173+
if err != nil {
174+
return nil, err
175+
}
176+
newFwdRule := &compute.ForwardingRule{
177+
Name: loadBalancerName,
178+
Description: fwdRuleDescriptionString,
179+
IPAddress: ipToUse,
180+
BackendService: backendServiceLink,
181+
Ports: ports,
182+
IPProtocol: string(protocol),
183+
LoadBalancingScheme: string(scheme),
180184
// Given that CreateGCECloud will attempt to determine the subnet based off the network,
181185
// the subnetwork should rarely be unknown.
182-
subnetwork: subnetworkURL,
183-
network: g.networkURL,
186+
Subnetwork: subnetworkURL,
187+
Network: g.networkURL,
184188
}
185189
if options.AllowGlobalAccess {
186-
newFRC.allowGlobalAccess = options.AllowGlobalAccess
187-
newFRC.description.APIVersion = meta.VersionBeta
190+
newFwdRule.AllowGlobalAccess = options.AllowGlobalAccess
188191
}
189-
if err := g.ensureInternalForwardingRule(existingFwdRule, newFRC); err != nil {
192+
if err := g.ensureInternalForwardingRule(existingFwdRule, newFwdRule); err != nil {
190193
return nil, err
191194
}
192195

@@ -878,116 +881,6 @@ func getILBOptions(svc *v1.Service) ILBOptions {
878881
}
879882
}
880883

881-
// forwardingRuleComposite is a composite type encapsulating both the GA and Beta ForwardingRules.
882-
// It exposes methods to compute the ForwardingRule object based on the given parameters and to compare 2 composite types
883-
// based on the version string.
884-
type forwardingRuleComposite struct {
885-
allowGlobalAccess bool
886-
name string
887-
description *forwardingRuleDescription
888-
ipAddress string
889-
backendService string
890-
ports []string
891-
ipProtocol string
892-
lbScheme string
893-
subnetwork string
894-
network string
895-
}
896-
897-
func (f *forwardingRuleComposite) Version() meta.Version {
898-
return f.description.APIVersion
899-
}
900-
901-
func (f *forwardingRuleComposite) Equal(other *forwardingRuleComposite) bool {
902-
return (f.ipAddress == "" || other.ipAddress == "" || f.ipAddress == other.ipAddress) &&
903-
f.ipProtocol == other.ipProtocol &&
904-
f.lbScheme == other.lbScheme &&
905-
equalStringSets(f.ports, other.ports) &&
906-
f.backendService == other.backendService &&
907-
f.allowGlobalAccess == other.allowGlobalAccess &&
908-
f.subnetwork == other.subnetwork
909-
}
910-
911-
// toForwardingRuleComposite converts a compute beta or GA ForwardingRule into the composite type
912-
func toForwardingRuleComposite(rule interface{}) (frc *forwardingRuleComposite, err error) {
913-
switch fr := rule.(type) {
914-
case *compute.ForwardingRule:
915-
frc = &forwardingRuleComposite{
916-
name: fr.Name,
917-
ipAddress: fr.IPAddress,
918-
description: &forwardingRuleDescription{APIVersion: meta.VersionGA},
919-
backendService: fr.BackendService,
920-
ports: fr.Ports,
921-
ipProtocol: fr.IPProtocol,
922-
lbScheme: fr.LoadBalancingScheme,
923-
subnetwork: fr.Subnetwork,
924-
network: fr.Network,
925-
}
926-
if fr.Description != "" {
927-
err = frc.description.unmarshal(fr.Description)
928-
}
929-
return frc, err
930-
case *computebeta.ForwardingRule:
931-
frc = &forwardingRuleComposite{
932-
name: fr.Name,
933-
ipAddress: fr.IPAddress,
934-
description: &forwardingRuleDescription{APIVersion: meta.VersionBeta},
935-
backendService: fr.BackendService,
936-
ports: fr.Ports,
937-
ipProtocol: fr.IPProtocol,
938-
lbScheme: fr.LoadBalancingScheme,
939-
subnetwork: fr.Subnetwork,
940-
network: fr.Network,
941-
allowGlobalAccess: fr.AllowGlobalAccess,
942-
}
943-
if fr.Description != "" {
944-
err = frc.description.unmarshal(fr.Description)
945-
}
946-
return frc, err
947-
default:
948-
return nil, fmt.Errorf("Invalid object type %T to compute ForwardingRuleComposite from", fr)
949-
}
950-
}
951-
952-
// ToBeta returns a Beta ForwardingRule from the composite type.
953-
func (f *forwardingRuleComposite) ToBeta() (*computebeta.ForwardingRule, error) {
954-
descStr, err := f.description.marshal()
955-
if err != nil {
956-
return nil, fmt.Errorf("Failed to compute description for beta forwarding rule %s, err: %v", f.name, err)
957-
}
958-
return &computebeta.ForwardingRule{
959-
Name: f.name,
960-
Description: descStr,
961-
IPAddress: f.ipAddress,
962-
BackendService: f.backendService,
963-
Ports: f.ports,
964-
IPProtocol: f.ipProtocol,
965-
LoadBalancingScheme: f.lbScheme,
966-
Subnetwork: f.subnetwork,
967-
Network: f.network,
968-
AllowGlobalAccess: f.allowGlobalAccess,
969-
}, nil
970-
}
971-
972-
// ToGA returns a GA ForwardingRule from the composite type.
973-
func (f *forwardingRuleComposite) ToGA() (*compute.ForwardingRule, error) {
974-
descStr, err := f.description.marshal()
975-
if err != nil {
976-
return nil, fmt.Errorf("Failed to compute description for GA forwarding rule %s, err: %v", f.name, err)
977-
}
978-
return &compute.ForwardingRule{
979-
Name: f.name,
980-
Description: descStr,
981-
IPAddress: f.ipAddress,
982-
BackendService: f.backendService,
983-
Ports: f.ports,
984-
IPProtocol: f.ipProtocol,
985-
LoadBalancingScheme: f.lbScheme,
986-
Subnetwork: f.subnetwork,
987-
Network: f.network,
988-
}, nil
989-
}
990-
991884
type forwardingRuleDescription struct {
992885
ServiceName string `json:"kubernetes.io/service-name"`
993886
APIVersion meta.Version `json:"kubernetes.io/api-version,omitempty"`
@@ -1021,32 +914,10 @@ func getFwdRuleAPIVersion(rule *compute.ForwardingRule) (meta.Version, error) {
1021914
return d.APIVersion, nil
1022915
}
1023916

1024-
func (g *Cloud) ensureInternalForwardingRule(existingFwdRule *compute.ForwardingRule, newFRC *forwardingRuleComposite) (err error) {
917+
func (g *Cloud) ensureInternalForwardingRule(existingFwdRule, newFwdRule *compute.ForwardingRule) (err error) {
1025918
if existingFwdRule != nil {
1026-
version, err := getFwdRuleAPIVersion(existingFwdRule)
1027-
if err != nil {
1028-
return err
1029-
}
1030-
var oldFRC *forwardingRuleComposite
1031-
switch version {
1032-
case meta.VersionBeta:
1033-
var betaRule *computebeta.ForwardingRule
1034-
betaRule, err = g.GetBetaRegionForwardingRule(existingFwdRule.Name, g.region)
1035-
if err != nil {
1036-
return err
1037-
}
1038-
oldFRC, err = toForwardingRuleComposite(betaRule)
1039-
case meta.VersionGA:
1040-
oldFRC, err = toForwardingRuleComposite(existingFwdRule)
1041-
default:
1042-
klog.Errorf("invalid version string for %s, assuming GA", existingFwdRule.Name)
1043-
oldFRC, err = toForwardingRuleComposite(existingFwdRule)
1044-
}
1045-
if err != nil {
1046-
return err
1047-
}
1048-
if oldFRC.Equal(newFRC) {
1049-
klog.V(4).Infof("oldFRC == newFRC, no updates needed (oldFRC == %+v)", oldFRC)
919+
if forwardingRulesEqual(existingFwdRule, newFwdRule) {
920+
klog.V(4).Infof("existingFwdRule == newFwdRule, no updates needed (existingFwdRule == %+v)", existingFwdRule)
1050921
return nil
1051922
}
1052923
klog.V(2).Infof("ensureInternalLoadBalancer(%v): deleting existing forwarding rule with IP address %v", existingFwdRule.Name, existingFwdRule.IPAddress)
@@ -1056,23 +927,20 @@ func (g *Cloud) ensureInternalForwardingRule(existingFwdRule *compute.Forwarding
1056927
}
1057928
// At this point, the existing rule has been deleted if required.
1058929
// Create the rule based on the api version determined
1059-
if newFRC.Version() == meta.VersionBeta {
1060-
klog.V(2).Infof("ensureInternalLoadBalancer(%v): creating beta forwarding rule", newFRC.name)
1061-
var betaRule *computebeta.ForwardingRule
1062-
betaRule, err = newFRC.ToBeta()
1063-
if err != nil {
1064-
return err
1065-
}
1066-
err = g.CreateBetaRegionForwardingRule(betaRule, g.region)
1067-
} else {
1068-
var gaRule *compute.ForwardingRule
1069-
klog.V(2).Infof("ensureInternalLoadBalancer(%v): creating ga forwarding rule", newFRC.name)
1070-
gaRule, err = newFRC.ToGA()
1071-
if err != nil {
1072-
return err
1073-
}
1074-
err = g.CreateRegionForwardingRule(gaRule, g.region)
930+
klog.V(2).Infof("ensureInternalLoadBalancer(%v): creating forwarding rule", newFwdRule.Name)
931+
if err = g.CreateRegionForwardingRule(newFwdRule, g.region); err != nil {
932+
return err
1075933
}
1076-
klog.V(2).Infof("ensureInternalLoadBalancer(%v): created forwarding rule, err : %s", newFRC.name, err)
1077-
return err
934+
klog.V(2).Infof("ensureInternalLoadBalancer(%v): created forwarding rule", newFwdRule.Name)
935+
return nil
936+
}
937+
938+
func forwardingRulesEqual(old, new *compute.ForwardingRule) bool {
939+
return (old.IPAddress == "" || new.IPAddress == "" || old.IPAddress == new.IPAddress) &&
940+
old.IPProtocol == new.IPProtocol &&
941+
old.LoadBalancingScheme == new.LoadBalancingScheme &&
942+
equalStringSets(old.Ports, new.Ports) &&
943+
old.BackendService == new.BackendService &&
944+
old.AllowGlobalAccess == new.AllowGlobalAccess &&
945+
old.Subnetwork == new.Subnetwork
1078946
}

0 commit comments

Comments
 (0)