Move and make exported lbScheme types into cloud/constants.go

This commit is contained in:
Ashley Gau 2018-02-20 13:04:27 -08:00
parent bef0838a21
commit 5dd3fdebec
7 changed files with 45 additions and 41 deletions

View File

@ -21,11 +21,15 @@ import (
) )
type NetworkTier string type NetworkTier string
type LbScheme string
const ( const (
NetworkTierStandard NetworkTier = "Standard" NetworkTierStandard NetworkTier = "Standard"
NetworkTierPremium NetworkTier = "Premium" NetworkTierPremium NetworkTier = "Premium"
NetworkTierDefault NetworkTier = NetworkTierPremium NetworkTierDefault NetworkTier = NetworkTierPremium
SchemeExternal LbScheme = "EXTERNAL"
SchemeInternal LbScheme = "INTERNAL"
) )
// ToGCEValue converts NetworkTier to a string that we can populate the // ToGCEValue converts NetworkTier to a string that we can populate the

View File

@ -23,6 +23,7 @@ import (
compute "google.golang.org/api/compute/v1" compute "google.golang.org/api/compute/v1"
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
) )
type addressManager struct { type addressManager struct {
@ -31,13 +32,13 @@ type addressManager struct {
name string name string
serviceName string serviceName string
targetIP string targetIP string
addressType lbScheme addressType cloud.LbScheme
region string region string
subnetURL string subnetURL string
tryRelease bool tryRelease bool
} }
func newAddressManager(svc CloudAddressService, serviceName, region, subnetURL, name, targetIP string, addressType lbScheme) *addressManager { func newAddressManager(svc CloudAddressService, serviceName, region, subnetURL, name, targetIP string, addressType cloud.LbScheme) *addressManager {
return &addressManager{ return &addressManager{
svc: svc, svc: svc,
logPrefix: fmt.Sprintf("AddressManager(%q)", name), logPrefix: fmt.Sprintf("AddressManager(%q)", name),

View File

@ -22,6 +22,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
compute "google.golang.org/api/compute/v1" compute "google.golang.org/api/compute/v1"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
) )
const testSvcName = "my-service" const testSvcName = "my-service"
@ -34,8 +35,8 @@ func TestAddressManagerNoRequestedIP(t *testing.T) {
svc := NewFakeCloudAddressService() svc := NewFakeCloudAddressService()
targetIP := "" targetIP := ""
mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, schemeInternal) mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, cloud.SchemeInternal)
testHoldAddress(t, mgr, svc, testLBName, testRegion, targetIP, string(schemeInternal)) testHoldAddress(t, mgr, svc, testLBName, testRegion, targetIP, string(cloud.SchemeInternal))
testReleaseAddress(t, mgr, svc, testLBName, testRegion) testReleaseAddress(t, mgr, svc, testLBName, testRegion)
} }
@ -44,8 +45,8 @@ func TestAddressManagerBasic(t *testing.T) {
svc := NewFakeCloudAddressService() svc := NewFakeCloudAddressService()
targetIP := "1.1.1.1" targetIP := "1.1.1.1"
mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, schemeInternal) mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, cloud.SchemeInternal)
testHoldAddress(t, mgr, svc, testLBName, testRegion, targetIP, string(schemeInternal)) testHoldAddress(t, mgr, svc, testLBName, testRegion, targetIP, string(cloud.SchemeInternal))
testReleaseAddress(t, mgr, svc, testLBName, testRegion) testReleaseAddress(t, mgr, svc, testLBName, testRegion)
} }
@ -55,12 +56,12 @@ func TestAddressManagerOrphaned(t *testing.T) {
svc := NewFakeCloudAddressService() svc := NewFakeCloudAddressService()
targetIP := "1.1.1.1" targetIP := "1.1.1.1"
addr := &compute.Address{Name: testLBName, Address: targetIP, AddressType: string(schemeInternal)} addr := &compute.Address{Name: testLBName, Address: targetIP, AddressType: string(cloud.SchemeInternal)}
err := svc.ReserveRegionAddress(addr, testRegion) err := svc.ReserveRegionAddress(addr, testRegion)
require.NoError(t, err) require.NoError(t, err)
mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, schemeInternal) mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, cloud.SchemeInternal)
testHoldAddress(t, mgr, svc, testLBName, testRegion, targetIP, string(schemeInternal)) testHoldAddress(t, mgr, svc, testLBName, testRegion, targetIP, string(cloud.SchemeInternal))
testReleaseAddress(t, mgr, svc, testLBName, testRegion) testReleaseAddress(t, mgr, svc, testLBName, testRegion)
} }
@ -71,12 +72,12 @@ func TestAddressManagerOutdatedOrphan(t *testing.T) {
previousAddress := "1.1.0.0" previousAddress := "1.1.0.0"
targetIP := "1.1.1.1" targetIP := "1.1.1.1"
addr := &compute.Address{Name: testLBName, Address: previousAddress, AddressType: string(schemeExternal)} addr := &compute.Address{Name: testLBName, Address: previousAddress, AddressType: string(cloud.SchemeExternal)}
err := svc.ReserveRegionAddress(addr, testRegion) err := svc.ReserveRegionAddress(addr, testRegion)
require.NoError(t, err) require.NoError(t, err)
mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, schemeInternal) mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, cloud.SchemeInternal)
testHoldAddress(t, mgr, svc, testLBName, testRegion, targetIP, string(schemeInternal)) testHoldAddress(t, mgr, svc, testLBName, testRegion, targetIP, string(cloud.SchemeInternal))
testReleaseAddress(t, mgr, svc, testLBName, testRegion) testReleaseAddress(t, mgr, svc, testLBName, testRegion)
} }
@ -86,11 +87,11 @@ func TestAddressManagerExternallyOwned(t *testing.T) {
svc := NewFakeCloudAddressService() svc := NewFakeCloudAddressService()
targetIP := "1.1.1.1" targetIP := "1.1.1.1"
addr := &compute.Address{Name: "my-important-address", Address: targetIP, AddressType: string(schemeInternal)} addr := &compute.Address{Name: "my-important-address", Address: targetIP, AddressType: string(cloud.SchemeInternal)}
err := svc.ReserveRegionAddress(addr, testRegion) err := svc.ReserveRegionAddress(addr, testRegion)
require.NoError(t, err) require.NoError(t, err)
mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, schemeInternal) mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, cloud.SchemeInternal)
ipToUse, err := mgr.HoldAddress() ipToUse, err := mgr.HoldAddress()
require.NoError(t, err) require.NoError(t, err)
assert.NotEmpty(t, ipToUse) assert.NotEmpty(t, ipToUse)
@ -107,11 +108,11 @@ func TestAddressManagerBadExternallyOwned(t *testing.T) {
svc := NewFakeCloudAddressService() svc := NewFakeCloudAddressService()
targetIP := "1.1.1.1" targetIP := "1.1.1.1"
addr := &compute.Address{Name: "my-important-address", Address: targetIP, AddressType: string(schemeExternal)} addr := &compute.Address{Name: "my-important-address", Address: targetIP, AddressType: string(cloud.SchemeExternal)}
err := svc.ReserveRegionAddress(addr, testRegion) err := svc.ReserveRegionAddress(addr, testRegion)
require.NoError(t, err) require.NoError(t, err)
mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, schemeInternal) mgr := newAddressManager(svc, testSvcName, testRegion, testSubnet, testLBName, targetIP, cloud.SchemeInternal)
_, err = mgr.HoldAddress() _, err = mgr.HoldAddress()
assert.NotNil(t, err) assert.NotNil(t, err)
} }

View File

@ -25,6 +25,8 @@ import (
computealpha "google.golang.org/api/compute/v0.alpha" computealpha "google.golang.org/api/compute/v0.alpha"
computebeta "google.golang.org/api/compute/v0.beta" computebeta "google.golang.org/api/compute/v0.beta"
compute "google.golang.org/api/compute/v1" compute "google.golang.org/api/compute/v1"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
) )
// test // test
@ -68,7 +70,7 @@ func (cas *FakeCloudAddressService) ReserveAlphaRegionAddress(addr *computealpha
} }
if addr.AddressType == "" { if addr.AddressType == "" {
addr.AddressType = string(schemeExternal) addr.AddressType = string(cloud.SchemeExternal)
} }
if cas.reservedAddrs[addr.Address] { if cas.reservedAddrs[addr.Address] {
@ -76,8 +78,8 @@ func (cas *FakeCloudAddressService) ReserveAlphaRegionAddress(addr *computealpha
// When the IP is already in use, this call returns an error code based // When the IP is already in use, this call returns an error code based
// on the type (internal vs external) of the address. This is to be // on the type (internal vs external) of the address. This is to be
// consistent with actual GCE API. // consistent with actual GCE API.
switch lbScheme(addr.AddressType) { switch cloud.LbScheme(addr.AddressType) {
case schemeExternal: case cloud.SchemeExternal:
return makeGoogleAPIError(http.StatusBadRequest, msg) return makeGoogleAPIError(http.StatusBadRequest, msg)
default: default:
return makeGoogleAPIError(http.StatusConflict, msg) return makeGoogleAPIError(http.StatusConflict, msg)
@ -209,7 +211,7 @@ func convertToAlphaAddress(object gceObject) *computealpha.Address {
panic(fmt.Sprintf("Failed to convert GCE apiObject %v to alpha address: %v", object, err)) panic(fmt.Sprintf("Failed to convert GCE apiObject %v to alpha address: %v", object, err))
} }
// Set the default values for the Alpha fields. // Set the default values for the Alpha fields.
addr.NetworkTier = NetworkTierDefault.ToGCEValue() addr.NetworkTier = cloud.NetworkTierDefault.ToGCEValue()
return &addr return &addr
} }

View File

@ -28,6 +28,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
netsets "k8s.io/kubernetes/pkg/util/net/sets" netsets "k8s.io/kubernetes/pkg/util/net/sets"
) )
@ -44,13 +45,6 @@ func newLoadBalancerMetricContext(request, region string) *metricContext {
return newGenericMetricContext("loadbalancer", request, region, unusedMetricLabel, computeV1Version) return newGenericMetricContext("loadbalancer", request, region, unusedMetricLabel, computeV1Version)
} }
type lbScheme string
const (
schemeExternal lbScheme = "EXTERNAL"
schemeInternal lbScheme = "INTERNAL"
)
func init() { func init() {
var err error var err error
// LB L7 proxies and all L3/4/7 health checkers have client addresses within these known CIDRs. // LB L7 proxies and all L3/4/7 health checkers have client addresses within these known CIDRs.
@ -126,13 +120,13 @@ func (gce *GCECloud) EnsureLoadBalancer(ctx context.Context, clusterName string,
} }
if existingFwdRule != nil { if existingFwdRule != nil {
existingScheme := lbScheme(strings.ToUpper(existingFwdRule.LoadBalancingScheme)) existingScheme := cloud.LbScheme(strings.ToUpper(existingFwdRule.LoadBalancingScheme))
// If the loadbalancer type changes between INTERNAL and EXTERNAL, the old load balancer should be deleted. // If the loadbalancer type changes between INTERNAL and EXTERNAL, the old load balancer should be deleted.
if existingScheme != desiredScheme { if existingScheme != desiredScheme {
glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): deleting existing %v loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, existingScheme) glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v): deleting existing %v loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, existingScheme)
switch existingScheme { switch existingScheme {
case schemeInternal: case cloud.SchemeInternal:
err = gce.ensureInternalLoadBalancerDeleted(clusterName, clusterID, svc) err = gce.ensureInternalLoadBalancerDeleted(clusterName, clusterID, svc)
default: default:
err = gce.ensureExternalLoadBalancerDeleted(clusterName, clusterID, svc) err = gce.ensureExternalLoadBalancerDeleted(clusterName, clusterID, svc)
@ -149,7 +143,7 @@ func (gce *GCECloud) EnsureLoadBalancer(ctx context.Context, clusterName string,
var status *v1.LoadBalancerStatus var status *v1.LoadBalancerStatus
switch desiredScheme { switch desiredScheme {
case schemeInternal: case cloud.SchemeInternal:
status, err = gce.ensureInternalLoadBalancer(clusterName, clusterID, svc, existingFwdRule, nodes) status, err = gce.ensureInternalLoadBalancer(clusterName, clusterID, svc, existingFwdRule, nodes)
default: default:
status, err = gce.ensureExternalLoadBalancer(clusterName, clusterID, svc, existingFwdRule, nodes) status, err = gce.ensureExternalLoadBalancer(clusterName, clusterID, svc, existingFwdRule, nodes)
@ -170,7 +164,7 @@ func (gce *GCECloud) UpdateLoadBalancer(ctx context.Context, clusterName string,
glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v, %v, %v): updating with %d nodes", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, len(nodes)) glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v, %v, %v): updating with %d nodes", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region, len(nodes))
switch scheme { switch scheme {
case schemeInternal: case cloud.SchemeInternal:
err = gce.updateInternalLoadBalancer(clusterName, clusterID, svc, nodes) err = gce.updateInternalLoadBalancer(clusterName, clusterID, svc, nodes)
default: default:
err = gce.updateExternalLoadBalancer(clusterName, svc, nodes) err = gce.updateExternalLoadBalancer(clusterName, svc, nodes)
@ -191,7 +185,7 @@ func (gce *GCECloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName
glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v, %v, %v, %v): deleting loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region) glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v, %v, %v, %v): deleting loadbalancer", clusterName, svc.Namespace, svc.Name, loadBalancerName, gce.region)
switch scheme { switch scheme {
case schemeInternal: case cloud.SchemeInternal:
err = gce.ensureInternalLoadBalancerDeleted(clusterName, clusterID, svc) err = gce.ensureInternalLoadBalancerDeleted(clusterName, clusterID, svc)
default: default:
err = gce.ensureExternalLoadBalancerDeleted(clusterName, clusterID, svc) err = gce.ensureExternalLoadBalancerDeleted(clusterName, clusterID, svc)
@ -200,9 +194,9 @@ func (gce *GCECloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName
return err return err
} }
func getSvcScheme(svc *v1.Service) lbScheme { func getSvcScheme(svc *v1.Service) cloud.LbScheme {
if typ, ok := GetLoadBalancerAnnotationType(svc); ok && typ == LBTypeInternal { if typ, ok := GetLoadBalancerAnnotationType(svc); ok && typ == LBTypeInternal {
return schemeInternal return cloud.SchemeInternal
} }
return schemeExternal return cloud.SchemeExternal
} }

View File

@ -28,6 +28,7 @@ import (
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
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"
) )
const ( const (
@ -37,7 +38,7 @@ const (
func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v1.Service, existingFwdRule *compute.ForwardingRule, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) { func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v1.Service, existingFwdRule *compute.ForwardingRule, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) {
nm := types.NamespacedName{Name: svc.Name, Namespace: svc.Namespace} nm := types.NamespacedName{Name: svc.Name, Namespace: svc.Namespace}
ports, protocol := getPortsAndProtocol(svc.Spec.Ports) ports, protocol := getPortsAndProtocol(svc.Spec.Ports)
scheme := schemeInternal scheme := cloud.SchemeInternal
loadBalancerName := cloudprovider.GetLoadBalancerName(svc) loadBalancerName := cloudprovider.GetLoadBalancerName(svc)
sharedBackend := shareBackendService(svc) sharedBackend := shareBackendService(svc)
backendServiceName := makeBackendServiceName(loadBalancerName, clusterID, sharedBackend, scheme, protocol, svc.Spec.SessionAffinity) backendServiceName := makeBackendServiceName(loadBalancerName, clusterID, sharedBackend, scheme, protocol, svc.Spec.SessionAffinity)
@ -93,7 +94,7 @@ func (gce *GCECloud) ensureInternalLoadBalancer(clusterName, clusterID string, s
var addrMgr *addressManager var addrMgr *addressManager
// If the network is not a legacy network, use the address manager // If the network is not a legacy network, use the address manager
if !gce.IsLegacyNetwork() { if !gce.IsLegacyNetwork() {
addrMgr = newAddressManager(gce, nm.String(), gce.Region(), subnetworkURL, loadBalancerName, requestedIP, schemeInternal) addrMgr = newAddressManager(gce, nm.String(), gce.Region(), subnetworkURL, loadBalancerName, requestedIP, cloud.SchemeInternal)
ipToUse, err = addrMgr.HoldAddress() ipToUse, err = addrMgr.HoldAddress()
if err != nil { if err != nil {
return nil, err return nil, err
@ -208,7 +209,7 @@ func (gce *GCECloud) updateInternalLoadBalancer(clusterName, clusterID string, s
// Generate the backend service name // Generate the backend service name
_, protocol := getPortsAndProtocol(svc.Spec.Ports) _, protocol := getPortsAndProtocol(svc.Spec.Ports)
scheme := schemeInternal scheme := cloud.SchemeInternal
loadBalancerName := cloudprovider.GetLoadBalancerName(svc) loadBalancerName := cloudprovider.GetLoadBalancerName(svc)
backendServiceName := makeBackendServiceName(loadBalancerName, clusterID, shareBackendService(svc), scheme, protocol, svc.Spec.SessionAffinity) backendServiceName := makeBackendServiceName(loadBalancerName, clusterID, shareBackendService(svc), scheme, protocol, svc.Spec.SessionAffinity)
// Ensure the backend service has the proper backend/instance-group links // Ensure the backend service has the proper backend/instance-group links
@ -218,7 +219,7 @@ func (gce *GCECloud) updateInternalLoadBalancer(clusterName, clusterID string, s
func (gce *GCECloud) ensureInternalLoadBalancerDeleted(clusterName, clusterID string, svc *v1.Service) error { func (gce *GCECloud) ensureInternalLoadBalancerDeleted(clusterName, clusterID string, svc *v1.Service) error {
loadBalancerName := cloudprovider.GetLoadBalancerName(svc) loadBalancerName := cloudprovider.GetLoadBalancerName(svc)
_, protocol := getPortsAndProtocol(svc.Spec.Ports) _, protocol := getPortsAndProtocol(svc.Spec.Ports)
scheme := schemeInternal scheme := cloud.SchemeInternal
sharedBackend := shareBackendService(svc) sharedBackend := shareBackendService(svc)
sharedHealthCheck := !v1_service.RequestsOnlyLocalTraffic(svc) sharedHealthCheck := !v1_service.RequestsOnlyLocalTraffic(svc)
@ -506,7 +507,7 @@ func (gce *GCECloud) ensureInternalInstanceGroupsDeleted(name string) error {
return nil return nil
} }
func (gce *GCECloud) ensureInternalBackendService(name, description string, affinityType v1.ServiceAffinity, scheme lbScheme, protocol v1.Protocol, igLinks []string, hcLink string) error { func (gce *GCECloud) ensureInternalBackendService(name, description string, affinityType v1.ServiceAffinity, scheme cloud.LbScheme, protocol v1.Protocol, igLinks []string, hcLink string) error {
glog.V(2).Infof("ensureInternalBackendService(%v, %v, %v): checking existing backend service with %d groups", name, scheme, protocol, len(igLinks)) glog.V(2).Infof("ensureInternalBackendService(%v, %v, %v): checking existing backend service with %d groups", name, scheme, protocol, len(igLinks))
bs, err := gce.GetRegionBackendService(name, gce.region) bs, err := gce.GetRegionBackendService(name, gce.region)
if err != nil && !isNotFound(err) { if err != nil && !isNotFound(err) {

View File

@ -24,6 +24,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
) )
// Internal Load Balancer // Internal Load Balancer
@ -33,7 +34,7 @@ func makeInstanceGroupName(clusterID string) string {
return fmt.Sprintf("k8s-ig--%s", clusterID) return fmt.Sprintf("k8s-ig--%s", clusterID)
} }
func makeBackendServiceName(loadBalancerName, clusterID string, shared bool, scheme lbScheme, protocol v1.Protocol, svcAffinity v1.ServiceAffinity) string { func makeBackendServiceName(loadBalancerName, clusterID string, shared bool, scheme cloud.LbScheme, protocol v1.Protocol, svcAffinity v1.ServiceAffinity) string {
if shared { if shared {
hash := sha1.New() hash := sha1.New()