Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
be705419
Commit
be705419
authored
Apr 19, 2018
by
Nick Sardo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix ILB issue updating load balancers
parent
26778e3f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
57 additions
and
55 deletions
+57
-55
gce_loadbalancer_internal.go
pkg/cloudprovider/providers/gce/gce_loadbalancer_internal.go
+4
-2
gce_loadbalancer_internal_test.go
...dprovider/providers/gce/gce_loadbalancer_internal_test.go
+41
-43
gce_loadbalancer_utils_test.go
...loudprovider/providers/gce/gce_loadbalancer_utils_test.go
+12
-10
No files found.
pkg/cloudprovider/providers/gce/gce_loadbalancer_internal.go
View file @
be705419
...
@@ -563,6 +563,9 @@ func (gce *GCECloud) ensureInternalBackendServiceGroups(name string, igLinks []s
...
@@ -563,6 +563,9 @@ func (gce *GCECloud) ensureInternalBackendServiceGroups(name string, igLinks []s
return
nil
return
nil
}
}
// Set the backend service's backends to the updated list.
bs
.
Backends
=
backends
glog
.
V
(
2
)
.
Infof
(
"ensureInternalBackendServiceGroups: updating backend service %v"
,
name
)
glog
.
V
(
2
)
.
Infof
(
"ensureInternalBackendServiceGroups: updating backend service %v"
,
name
)
if
err
:=
gce
.
UpdateRegionBackendService
(
bs
,
gce
.
region
);
err
!=
nil
{
if
err
:=
gce
.
UpdateRegionBackendService
(
bs
,
gce
.
region
);
err
!=
nil
{
return
err
return
err
...
@@ -575,8 +578,7 @@ func shareBackendService(svc *v1.Service) bool {
...
@@ -575,8 +578,7 @@ func shareBackendService(svc *v1.Service) bool {
return
GetLoadBalancerAnnotationBackendShare
(
svc
)
&&
!
v1_service
.
RequestsOnlyLocalTraffic
(
svc
)
return
GetLoadBalancerAnnotationBackendShare
(
svc
)
&&
!
v1_service
.
RequestsOnlyLocalTraffic
(
svc
)
}
}
func
backendsFromGroupLinks
(
igLinks
[]
string
)
[]
*
compute
.
Backend
{
func
backendsFromGroupLinks
(
igLinks
[]
string
)
(
backends
[]
*
compute
.
Backend
)
{
var
backends
[]
*
compute
.
Backend
for
_
,
igLink
:=
range
igLinks
{
for
_
,
igLink
:=
range
igLinks
{
backends
=
append
(
backends
,
&
compute
.
Backend
{
backends
=
append
(
backends
,
&
compute
.
Backend
{
Group
:
igLink
,
Group
:
igLink
,
...
...
pkg/cloudprovider/providers/gce/gce_loadbalancer_internal_test.go
View file @
be705419
...
@@ -77,42 +77,6 @@ func TestEnsureInternalBackendServiceUpdates(t *testing.T) {
...
@@ -77,42 +77,6 @@ func TestEnsureInternalBackendServiceUpdates(t *testing.T) {
assert
.
Equal
(
t
,
bs
.
SessionAffinity
,
strings
.
ToUpper
(
string
(
v1
.
ServiceAffinityNone
)))
assert
.
Equal
(
t
,
bs
.
SessionAffinity
,
strings
.
ToUpper
(
string
(
v1
.
ServiceAffinityNone
)))
}
}
func
TestEnsureInternalBackendServiceGroups
(
t
*
testing
.
T
)
{
t
.
Parallel
()
vals
:=
DefaultTestClusterValues
()
nodeNames
:=
[]
string
{
"test-node-1"
}
gce
,
err
:=
fakeGCECloud
(
vals
)
require
.
NoError
(
t
,
err
)
apiService
:=
fakeLoadbalancerService
(
string
(
LBTypeInternal
))
lbName
:=
cloudprovider
.
GetLoadBalancerName
(
apiService
)
nodes
,
err
:=
createAndInsertNodes
(
gce
,
nodeNames
,
vals
.
ZoneName
)
igName
:=
makeInstanceGroupName
(
vals
.
ClusterID
)
igLinks
,
err
:=
gce
.
ensureInternalInstanceGroups
(
igName
,
nodes
)
require
.
NoError
(
t
,
err
)
sharedBackend
:=
shareBackendService
(
apiService
)
bsName
:=
makeBackendServiceName
(
lbName
,
vals
.
ClusterID
,
sharedBackend
,
cloud
.
SchemeInternal
,
"TCP"
,
apiService
.
Spec
.
SessionAffinity
)
err
=
gce
.
ensureInternalBackendService
(
bsName
,
"description"
,
apiService
.
Spec
.
SessionAffinity
,
cloud
.
SchemeInternal
,
"TCP"
,
igLinks
,
""
)
require
.
NoError
(
t
,
err
)
// Update the BackendService with new Instances
newNodeNames
:=
[]
string
{
"new-test-node-1"
,
"new-test-node-2"
}
err
=
gce
.
ensureInternalBackendServiceGroups
(
bsName
,
newNodeNames
)
assert
.
NoError
(
t
,
err
)
bs
,
err
:=
gce
.
GetRegionBackendService
(
bsName
,
gce
.
region
)
assert
.
NoError
(
t
,
err
)
// Check that the instances are updated
newNodes
,
err
:=
createAndInsertNodes
(
gce
,
newNodeNames
,
vals
.
ZoneName
)
newIgLinks
,
err
:=
gce
.
ensureInternalInstanceGroups
(
igName
,
newNodes
)
backends
:=
backendsFromGroupLinks
(
newIgLinks
)
assert
.
Equal
(
t
,
bs
.
Backends
,
backends
)
}
func
TestEnsureInternalLoadBalancer
(
t
*
testing
.
T
)
{
func
TestEnsureInternalLoadBalancer
(
t
*
testing
.
T
)
{
t
.
Parallel
()
t
.
Parallel
()
...
@@ -303,29 +267,63 @@ func TestUpdateInternalLoadBalancerNodes(t *testing.T) {
...
@@ -303,29 +267,63 @@ func TestUpdateInternalLoadBalancerNodes(t *testing.T) {
vals
:=
DefaultTestClusterValues
()
vals
:=
DefaultTestClusterValues
()
gce
,
err
:=
fakeGCECloud
(
vals
)
gce
,
err
:=
fakeGCECloud
(
vals
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
node1Name
:=
[]
string
{
"test-node-1"
}
apiService
:=
fakeLoadbalancerService
(
string
(
LBTypeInternal
))
apiService
:=
fakeLoadbalancerService
(
string
(
LBTypeInternal
))
_
,
err
=
createInternalLoadBalancer
(
gce
,
apiService
,
nil
,
[]
string
{
"test-node-1"
},
vals
.
ClusterName
,
vals
.
ClusterID
,
vals
.
ZoneName
)
nodes
,
err
:=
createAndInsertNodes
(
gce
,
node1Name
,
vals
.
ZoneName
)
require
.
NoError
(
t
,
err
)
_
,
err
=
gce
.
ensureInternalLoadBalancer
(
vals
.
ClusterName
,
vals
.
ClusterID
,
apiService
,
nil
,
nodes
)
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
// Remove the old Node and insert a new Node.
// Replace the node in initial zone; add new node in a new zone.
newNodeName
:=
"test-node-2"
node2Name
,
node3Name
:=
"test-node-2"
,
"test-node-3"
newNodes
,
err
:=
createAndInsertNodes
(
gce
,
[]
string
{
newNodeName
},
vals
.
ZoneName
)
newNodesZoneA
,
err
:=
createAndInsertNodes
(
gce
,
[]
string
{
node2Name
},
vals
.
ZoneName
)
require
.
NoError
(
t
,
err
)
newNodesZoneB
,
err
:=
createAndInsertNodes
(
gce
,
[]
string
{
node3Name
},
vals
.
SecondaryZoneName
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
err
=
gce
.
updateInternalLoadBalancer
(
vals
.
ClusterName
,
vals
.
ClusterID
,
apiService
,
newNodes
)
nodes
=
append
(
newNodesZoneA
,
newNodesZoneB
...
)
err
=
gce
.
updateInternalLoadBalancer
(
vals
.
ClusterName
,
vals
.
ClusterID
,
apiService
,
nodes
)
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
// Expect node 1 to be deleted and node 2 to still exist
lbName
:=
cloudprovider
.
GetLoadBalancerName
(
apiService
)
sharedBackend
:=
shareBackendService
(
apiService
)
backendServiceName
:=
makeBackendServiceName
(
lbName
,
vals
.
ClusterID
,
sharedBackend
,
cloud
.
SchemeInternal
,
"TCP"
,
apiService
.
Spec
.
SessionAffinity
)
bs
,
err
:=
gce
.
GetRegionBackendService
(
backendServiceName
,
gce
.
region
)
require
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
2
,
len
(
bs
.
Backends
),
"Want two backends referencing two instances groups"
)
for
_
,
zone
:=
range
[]
string
{
vals
.
ZoneName
,
vals
.
SecondaryZoneName
}
{
var
found
bool
for
_
,
be
:=
range
bs
.
Backends
{
if
strings
.
Contains
(
be
.
Group
,
zone
)
{
found
=
true
break
}
}
assert
.
True
(
t
,
found
,
"Expected list of backends to have zone %q"
,
zone
)
}
// Expect initial zone to have test-node-2
igName
:=
makeInstanceGroupName
(
vals
.
ClusterID
)
igName
:=
makeInstanceGroupName
(
vals
.
ClusterID
)
instances
,
err
:=
gce
.
ListInstancesInInstanceGroup
(
igName
,
vals
.
ZoneName
,
"ALL"
)
instances
,
err
:=
gce
.
ListInstancesInInstanceGroup
(
igName
,
vals
.
ZoneName
,
"ALL"
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
1
,
len
(
instances
))
assert
.
Contains
(
t
,
instances
[
0
]
.
Instance
,
fmt
.
Sprintf
(
"projects/%s/zones/%s/instances/%s"
,
vals
.
ProjectID
,
vals
.
ZoneName
,
node2Name
),
)
// Expect initial zone to have test-node-3
instances
,
err
=
gce
.
ListInstancesInInstanceGroup
(
igName
,
vals
.
SecondaryZoneName
,
"ALL"
)
require
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
1
,
len
(
instances
))
assert
.
Equal
(
t
,
1
,
len
(
instances
))
assert
.
Contains
(
assert
.
Contains
(
t
,
t
,
instances
[
0
]
.
Instance
,
instances
[
0
]
.
Instance
,
fmt
.
Sprintf
(
"projects/%s/zones/%s/instances/%s"
,
vals
.
ProjectID
,
vals
.
ZoneName
,
newNode
Name
),
fmt
.
Sprintf
(
"projects/%s/zones/%s/instances/%s"
,
vals
.
ProjectID
,
vals
.
SecondaryZoneName
,
node3
Name
),
)
)
}
}
...
...
pkg/cloudprovider/providers/gce/gce_loadbalancer_utils_test.go
View file @
be705419
...
@@ -52,20 +52,22 @@ const (
...
@@ -52,20 +52,22 @@ const (
)
)
type
TestClusterValues
struct
{
type
TestClusterValues
struct
{
ProjectID
string
ProjectID
string
Region
string
Region
string
ZoneName
string
ZoneName
string
ClusterID
string
SecondaryZoneName
string
ClusterName
string
ClusterID
string
ClusterName
string
}
}
func
DefaultTestClusterValues
()
TestClusterValues
{
func
DefaultTestClusterValues
()
TestClusterValues
{
return
TestClusterValues
{
return
TestClusterValues
{
ProjectID
:
"test-project"
,
ProjectID
:
"test-project"
,
Region
:
"us-central1"
,
Region
:
"us-central1"
,
ZoneName
:
"us-central1-b"
,
ZoneName
:
"us-central1-b"
,
ClusterID
:
"test-cluster-id"
,
SecondaryZoneName
:
"us-central1-c"
,
ClusterName
:
"Test Cluster Name"
,
ClusterID
:
"test-cluster-id"
,
ClusterName
:
"Test Cluster Name"
,
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment