mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
test updateInternalLoadBalancer
This commit is contained in:
parent
fd2bf37d28
commit
7648696c88
@ -24,6 +24,7 @@ import (
|
|||||||
|
|
||||||
compute "google.golang.org/api/compute/v1"
|
compute "google.golang.org/api/compute/v1"
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/types"
|
||||||
v1_service "k8s.io/kubernetes/pkg/api/v1/service"
|
v1_service "k8s.io/kubernetes/pkg/api/v1/service"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider"
|
"k8s.io/kubernetes/pkg/cloudprovider"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||||
@ -50,7 +51,7 @@ func TestEnsureInternalLoadBalancer(t *testing.T) {
|
|||||||
zoneName := "us-central1-b"
|
zoneName := "us-central1-b"
|
||||||
clusterName := "Test Cluster"
|
clusterName := "Test Cluster"
|
||||||
clusterID := "test-cluster-id"
|
clusterID := "test-cluster-id"
|
||||||
nodeName:
|
nodeName := "test-node-1"
|
||||||
|
|
||||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -109,6 +110,165 @@ nodeName:
|
|||||||
assert.Equal(t, backendServiceLink, fwdRule.BackendService)
|
assert.Equal(t, backendServiceLink, fwdRule.BackendService)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEnsureInternalLoadBalancerDeleteWrongResources(t *testing.T) {
|
||||||
|
projectID := "test-project"
|
||||||
|
region := "us-central1"
|
||||||
|
zoneName := "us-central1-b"
|
||||||
|
clusterName := "Test Cluster"
|
||||||
|
clusterID := "test-cluster-id"
|
||||||
|
|
||||||
|
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||||
|
|
||||||
|
// Create a ForwardingRule that's missing an IP address and BackendService
|
||||||
|
existingFwdRule := &compute.ForwardingRule{
|
||||||
|
Name: lbName,
|
||||||
|
IPAddress: "",
|
||||||
|
Ports: []string{"123"},
|
||||||
|
IPProtocol: "TCP",
|
||||||
|
LoadBalancingScheme: string(cloud.SchemeInternal),
|
||||||
|
}
|
||||||
|
gce.CreateRegionForwardingRule(existingFwdRule, gce.region)
|
||||||
|
|
||||||
|
// Create a Firewall that's missing a Description
|
||||||
|
existingFirewall := &compute.Firewall{
|
||||||
|
Name: lbName,
|
||||||
|
Network: gce.networkURL,
|
||||||
|
Allowed: []*compute.FirewallAllowed{
|
||||||
|
{
|
||||||
|
IPProtocol: "tcp",
|
||||||
|
Ports: []string{"123"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
gce.CreateFirewall(existingFirewall)
|
||||||
|
|
||||||
|
sharedHealthCheck := !v1_service.RequestsOnlyLocalTraffic(fakeApiService)
|
||||||
|
hcName := makeHealthCheckName(lbName, clusterID, sharedHealthCheck)
|
||||||
|
hcPath, hcPort := GetNodesHealthCheckPath(), GetNodesHealthCheckPort()
|
||||||
|
nm := types.NamespacedName{Name: fakeApiService.Name, Namespace: fakeApiService.Namespace}
|
||||||
|
|
||||||
|
// Create a healthcheck with an incorrect threshold
|
||||||
|
existingHC := newInternalLBHealthCheck(hcName, nm, sharedHealthCheck, hcPath, hcPort)
|
||||||
|
existingHC.HealthyThreshold = gceHcHealthyThreshold * 10
|
||||||
|
gce.CreateHealthCheck(existingHC)
|
||||||
|
|
||||||
|
// Create a backend Service that's missing Description and Backends
|
||||||
|
sharedBackend := shareBackendService(fakeApiService)
|
||||||
|
backendServiceName := makeBackendServiceName(lbName, clusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||||
|
existingBS := &compute.BackendService{
|
||||||
|
Name: backendServiceName,
|
||||||
|
Protocol: "TCP",
|
||||||
|
HealthChecks: []string{existingHC.SelfLink},
|
||||||
|
SessionAffinity: translateAffinityType(fakeApiService.Spec.SessionAffinity),
|
||||||
|
LoadBalancingScheme: string(cloud.SchemeInternal),
|
||||||
|
}
|
||||||
|
|
||||||
|
gce.CreateRegionBackendService(existingBS, gce.region)
|
||||||
|
|
||||||
|
_, err = createInternalLoadBalancer(gce, existingFwdRule, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
// Expect new resources with the correct attributes to be created
|
||||||
|
rule, _ := gce.GetRegionForwardingRule(lbName, gce.region)
|
||||||
|
assert.NotEqual(t, existingFwdRule, rule)
|
||||||
|
|
||||||
|
firewall, err := gce.GetFirewall(lbName)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.NotEqual(t, firewall, existingFirewall)
|
||||||
|
|
||||||
|
healthcheck, err := gce.GetHealthCheck(hcName)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.NotEqual(t, healthcheck, existingHC)
|
||||||
|
|
||||||
|
bs, err := gce.GetRegionBackendService(backendServiceName, gce.region)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.NotEqual(t, bs, existingBS)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUpdateInternalLoadBalancerBackendServices(t *testing.T) {
|
||||||
|
projectID := "test-project"
|
||||||
|
region := "us-central1"
|
||||||
|
zoneName := "us-central1-b"
|
||||||
|
clusterName := "Test Cluster Name"
|
||||||
|
clusterID := "test-cluster-id"
|
||||||
|
|
||||||
|
nodeName := "test-node-1"
|
||||||
|
|
||||||
|
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
// BackendService exists prior to updateInternalLoadBalancer call, but has
|
||||||
|
// incorrect (missing) attributes.
|
||||||
|
// ensureInternalBackendServiceGroups is called and creates the correct
|
||||||
|
// BackendService
|
||||||
|
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||||
|
sharedBackend := shareBackendService(fakeApiService)
|
||||||
|
backendServiceName := makeBackendServiceName(lbName, clusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||||
|
existingBS := &compute.BackendService{
|
||||||
|
Name: backendServiceName,
|
||||||
|
Protocol: "TCP",
|
||||||
|
SessionAffinity: translateAffinityType(fakeApiService.Spec.SessionAffinity),
|
||||||
|
LoadBalancingScheme: string(cloud.SchemeInternal),
|
||||||
|
}
|
||||||
|
|
||||||
|
gce.CreateRegionBackendService(existingBS, gce.region)
|
||||||
|
|
||||||
|
nodes, err := createAndInsertNodes(gce, []string{nodeName}, zoneName)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = gce.updateInternalLoadBalancer(clusterName, clusterID, fakeApiService, nodes)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
bs, err := gce.GetRegionBackendService(backendServiceName, gce.region)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Check that the new BackendService has the correct attributes
|
||||||
|
assert.NotEqual(t, existingBS, bs)
|
||||||
|
assert.NotEmpty(t, bs.SelfLink)
|
||||||
|
assert.NotEmpty(t, bs.Description)
|
||||||
|
assert.NotEmpty(t, bs.HealthChecks)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUpdateInternalLoadBalancerNodes(t *testing.T) {
|
||||||
|
projectID := "test-project"
|
||||||
|
region := "us-central1"
|
||||||
|
zoneName := "us-central1-b"
|
||||||
|
clusterName := "Test Cluster Name"
|
||||||
|
clusterID := "test-cluster-id"
|
||||||
|
|
||||||
|
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
// Remove the old Node and insert a new Node.
|
||||||
|
newNodeName := "test-node-2"
|
||||||
|
newNodes, err := createAndInsertNodes(gce, []string{newNodeName}, zoneName)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = gce.updateInternalLoadBalancer(clusterName, clusterID, fakeApiService, newNodes)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
// Expect node 1 to be deleted and node 2 to still exist
|
||||||
|
igName := makeInstanceGroupName(clusterID)
|
||||||
|
instances, err := gce.ListInstancesInInstanceGroup(igName, zoneName, "ALL")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
assert.Equal(t, 1, len(instances))
|
||||||
|
assert.Equal(
|
||||||
|
t,
|
||||||
|
"https://www.googleapis.com/compute/v1/projects/test-project/zones/us-central1-b/instances/test-node-2",
|
||||||
|
instances[0].Instance,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func TestEnsureInternalLoadBalancerDeleted(t *testing.T) {
|
func TestEnsureInternalLoadBalancerDeleted(t *testing.T) {
|
||||||
projectID := "test-project"
|
projectID := "test-project"
|
||||||
region := "us-central1"
|
region := "us-central1"
|
||||||
|
Loading…
Reference in New Issue
Block a user