mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Move NetworkTiers into cloud/constants.go
This commit is contained in:
parent
a39e7e4146
commit
bef0838a21
@ -3,6 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
|||||||
go_library(
|
go_library(
|
||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = [
|
srcs = [
|
||||||
|
"constants.go",
|
||||||
"doc.go",
|
"doc.go",
|
||||||
"gce_projects.go",
|
"gce_projects.go",
|
||||||
"gen.go",
|
"gen.go",
|
||||||
|
48
pkg/cloudprovider/providers/gce/cloud/constants.go
Normal file
48
pkg/cloudprovider/providers/gce/cloud/constants.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cloud
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetworkTier string
|
||||||
|
|
||||||
|
const (
|
||||||
|
NetworkTierStandard NetworkTier = "Standard"
|
||||||
|
NetworkTierPremium NetworkTier = "Premium"
|
||||||
|
NetworkTierDefault NetworkTier = NetworkTierPremium
|
||||||
|
)
|
||||||
|
|
||||||
|
// ToGCEValue converts NetworkTier to a string that we can populate the
|
||||||
|
// NetworkTier field of GCE objects.
|
||||||
|
func (n NetworkTier) ToGCEValue() string {
|
||||||
|
return strings.ToUpper(string(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetworkTierGCEValueToType converts the value of the NetworkTier field of a
|
||||||
|
// GCE object to the NetworkTier type.
|
||||||
|
func NetworkTierGCEValueToType(s string) NetworkTier {
|
||||||
|
switch s {
|
||||||
|
case NetworkTierStandard.ToGCEValue():
|
||||||
|
return NetworkTierStandard
|
||||||
|
case NetworkTierPremium.ToGCEValue():
|
||||||
|
return NetworkTierPremium
|
||||||
|
default:
|
||||||
|
return NetworkTier(s)
|
||||||
|
}
|
||||||
|
}
|
@ -26,6 +26,7 @@ import (
|
|||||||
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"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
|
||||||
)
|
)
|
||||||
@ -150,7 +151,7 @@ func (gce *GCECloud) GetBetaRegionAddressByIP(region, ipAddress string) (*comput
|
|||||||
// TODO(#51665): retire this function once Network Tiers becomes Beta in GCP.
|
// TODO(#51665): retire this function once Network Tiers becomes Beta in GCP.
|
||||||
func (gce *GCECloud) getNetworkTierFromAddress(name, region string) (string, error) {
|
func (gce *GCECloud) getNetworkTierFromAddress(name, region string) (string, error) {
|
||||||
if !gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) {
|
if !gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) {
|
||||||
return NetworkTierDefault.ToGCEValue(), nil
|
return cloud.NetworkTierDefault.ToGCEValue(), nil
|
||||||
}
|
}
|
||||||
addr, err := gce.GetAlphaRegionAddress(name, region)
|
addr, err := gce.GetAlphaRegionAddress(name, region)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -18,15 +18,14 @@ package gce
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LoadBalancerType string
|
type LoadBalancerType string
|
||||||
type NetworkTier string
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// ServiceAnnotationLoadBalancerType is annotated on a service with type LoadBalancer
|
// ServiceAnnotationLoadBalancerType is annotated on a service with type LoadBalancer
|
||||||
@ -49,12 +48,8 @@ const (
|
|||||||
// network tier a GCP LB should use. The valid values are "Standard" and
|
// network tier a GCP LB should use. The valid values are "Standard" and
|
||||||
// "Premium" (default).
|
// "Premium" (default).
|
||||||
NetworkTierAnnotationKey = "cloud.google.com/network-tier"
|
NetworkTierAnnotationKey = "cloud.google.com/network-tier"
|
||||||
NetworkTierAnnotationStandard = "Standard"
|
NetworkTierAnnotationStandard = cloud.NetworkTierStandard
|
||||||
NetworkTierAnnotationPremium = "Premium"
|
NetworkTierAnnotationPremium = cloud.NetworkTierPremium
|
||||||
|
|
||||||
NetworkTierStandard NetworkTier = NetworkTierAnnotationStandard
|
|
||||||
NetworkTierPremium NetworkTier = NetworkTierAnnotationPremium
|
|
||||||
NetworkTierDefault NetworkTier = NetworkTierPremium
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetLoadBalancerAnnotationType returns the type of GCP load balancer which should be assembled.
|
// GetLoadBalancerAnnotationType returns the type of GCP load balancer which should be assembled.
|
||||||
@ -97,38 +92,19 @@ func GetLoadBalancerAnnotationBackendShare(service *v1.Service) bool {
|
|||||||
// GetServiceNetworkTier returns the network tier of GCP load balancer
|
// GetServiceNetworkTier returns the network tier of GCP load balancer
|
||||||
// which should be assembled, and an error if the specified tier is not
|
// which should be assembled, and an error if the specified tier is not
|
||||||
// supported.
|
// supported.
|
||||||
func GetServiceNetworkTier(service *v1.Service) (NetworkTier, error) {
|
func GetServiceNetworkTier(service *v1.Service) (cloud.NetworkTier, error) {
|
||||||
l, ok := service.Annotations[NetworkTierAnnotationKey]
|
l, ok := service.Annotations[NetworkTierAnnotationKey]
|
||||||
if !ok {
|
if !ok {
|
||||||
return NetworkTierDefault, nil
|
return cloud.NetworkTierDefault, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
v := NetworkTier(l)
|
v := cloud.NetworkTier(l)
|
||||||
switch v {
|
switch v {
|
||||||
case NetworkTierStandard:
|
case cloud.NetworkTierStandard:
|
||||||
fallthrough
|
fallthrough
|
||||||
case NetworkTierPremium:
|
case cloud.NetworkTierPremium:
|
||||||
return v, nil
|
return v, nil
|
||||||
default:
|
default:
|
||||||
return NetworkTierDefault, fmt.Errorf("unsupported network tier: %q", v)
|
return cloud.NetworkTierDefault, fmt.Errorf("unsupported network tier: %q", v)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ToGCEValue converts NetworkTier to a string that we can populate the
|
|
||||||
// NetworkTier field of GCE objects.
|
|
||||||
func (n NetworkTier) ToGCEValue() string {
|
|
||||||
return strings.ToUpper(string(n))
|
|
||||||
}
|
|
||||||
|
|
||||||
// NetworkTierGCEValueToType converts the value of the NetworkTier field of a
|
|
||||||
// GCE object to the NetworkTier type.
|
|
||||||
func NetworkTierGCEValueToType(s string) NetworkTier {
|
|
||||||
switch s {
|
|
||||||
case "STANDARD":
|
|
||||||
return NetworkTierStandard
|
|
||||||
case "PREMIUM":
|
|
||||||
return NetworkTierPremium
|
|
||||||
default:
|
|
||||||
return NetworkTier(s)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
@ -38,24 +39,24 @@ func TestServiceNetworkTierAnnotationKey(t *testing.T) {
|
|||||||
|
|
||||||
for testName, testCase := range map[string]struct {
|
for testName, testCase := range map[string]struct {
|
||||||
annotations map[string]string
|
annotations map[string]string
|
||||||
expectedTier NetworkTier
|
expectedTier cloud.NetworkTier
|
||||||
expectErr bool
|
expectErr bool
|
||||||
}{
|
}{
|
||||||
"Use the default when the annotation does not exist": {
|
"Use the default when the annotation does not exist": {
|
||||||
annotations: nil,
|
annotations: nil,
|
||||||
expectedTier: NetworkTierDefault,
|
expectedTier: cloud.NetworkTierDefault,
|
||||||
},
|
},
|
||||||
"Standard tier": {
|
"Standard tier": {
|
||||||
annotations: map[string]string{NetworkTierAnnotationKey: "Standard"},
|
annotations: map[string]string{NetworkTierAnnotationKey: "Standard"},
|
||||||
expectedTier: NetworkTierStandard,
|
expectedTier: cloud.NetworkTierStandard,
|
||||||
},
|
},
|
||||||
"Premium tier": {
|
"Premium tier": {
|
||||||
annotations: map[string]string{NetworkTierAnnotationKey: "Premium"},
|
annotations: map[string]string{NetworkTierAnnotationKey: "Premium"},
|
||||||
expectedTier: NetworkTierPremium,
|
expectedTier: cloud.NetworkTierPremium,
|
||||||
},
|
},
|
||||||
"Report an error on invalid network tier value": {
|
"Report an error on invalid network tier value": {
|
||||||
annotations: map[string]string{NetworkTierAnnotationKey: "Unknown-tier"},
|
annotations: map[string]string{NetworkTierAnnotationKey: "Unknown-tier"},
|
||||||
expectedTier: NetworkTierPremium,
|
expectedTier: cloud.NetworkTierPremium,
|
||||||
expectErr: true,
|
expectErr: true,
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
|
|
||||||
computealpha "google.golang.org/api/compute/v0.alpha"
|
computealpha "google.golang.org/api/compute/v0.alpha"
|
||||||
compute "google.golang.org/api/compute/v1"
|
compute "google.golang.org/api/compute/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/filter"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud/meta"
|
||||||
)
|
)
|
||||||
@ -117,7 +118,7 @@ func (gce *GCECloud) DeleteRegionForwardingRule(name, region string) error {
|
|||||||
// TODO(#51665): retire this function once Network Tiers becomes Beta in GCP.
|
// TODO(#51665): retire this function once Network Tiers becomes Beta in GCP.
|
||||||
func (gce *GCECloud) getNetworkTierFromForwardingRule(name, region string) (string, error) {
|
func (gce *GCECloud) getNetworkTierFromForwardingRule(name, region string) (string, error) {
|
||||||
if !gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) {
|
if !gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) {
|
||||||
return NetworkTierDefault.ToGCEValue(), nil
|
return cloud.NetworkTierDefault.ToGCEValue(), nil
|
||||||
}
|
}
|
||||||
fwdRule, err := gce.GetAlphaRegionForwardingRule(name, region)
|
fwdRule, err := gce.GetAlphaRegionForwardingRule(name, region)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
apiservice "k8s.io/kubernetes/pkg/api/v1/service"
|
apiservice "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"
|
||||||
netsets "k8s.io/kubernetes/pkg/util/net/sets"
|
netsets "k8s.io/kubernetes/pkg/util/net/sets"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
@ -416,7 +417,7 @@ func (gce *GCECloud) DeleteExternalTargetPoolAndChecks(service *v1.Service, name
|
|||||||
// the verification failed. It also returns a boolean to indicate whether the
|
// the verification failed. It also returns a boolean to indicate whether the
|
||||||
// IP address is considered owned by the user (i.e., not managed by the
|
// IP address is considered owned by the user (i.e., not managed by the
|
||||||
// controller.
|
// controller.
|
||||||
func verifyUserRequestedIP(s CloudAddressService, region, requestedIP, fwdRuleIP, lbRef string, desiredNetTier NetworkTier) (isUserOwnedIP bool, err error) {
|
func verifyUserRequestedIP(s CloudAddressService, region, requestedIP, fwdRuleIP, lbRef string, desiredNetTier cloud.NetworkTier) (isUserOwnedIP bool, err error) {
|
||||||
if requestedIP == "" {
|
if requestedIP == "" {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
@ -439,7 +440,7 @@ func verifyUserRequestedIP(s CloudAddressService, region, requestedIP, fwdRuleIP
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("failed to check the network tier of the IP %q: %v", requestedIP, err)
|
return false, fmt.Errorf("failed to check the network tier of the IP %q: %v", requestedIP, err)
|
||||||
}
|
}
|
||||||
netTier := NetworkTierGCEValueToType(netTierStr)
|
netTier := cloud.NetworkTierGCEValueToType(netTierStr)
|
||||||
if netTier != desiredNetTier {
|
if netTier != desiredNetTier {
|
||||||
glog.Errorf("verifyUserRequestedIP: requested static IP %q (name: %s) for LB %s has network tier %s, need %s.", requestedIP, existingAddress.Name, lbRef, netTier, desiredNetTier)
|
glog.Errorf("verifyUserRequestedIP: requested static IP %q (name: %s) for LB %s has network tier %s, need %s.", requestedIP, existingAddress.Name, lbRef, netTier, desiredNetTier)
|
||||||
return false, fmt.Errorf("requrested IP %q belongs to the %s network tier; expected %s", requestedIP, netTier, desiredNetTier)
|
return false, fmt.Errorf("requrested IP %q belongs to the %s network tier; expected %s", requestedIP, netTier, desiredNetTier)
|
||||||
@ -852,7 +853,7 @@ func (gce *GCECloud) ensureHttpHealthCheckFirewall(svc *v1.Service, serviceName,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createForwardingRule(s CloudForwardingRuleService, name, serviceName, region, ipAddress, target string, ports []v1.ServicePort, netTier NetworkTier) error {
|
func createForwardingRule(s CloudForwardingRuleService, name, serviceName, region, ipAddress, target string, ports []v1.ServicePort, netTier cloud.NetworkTier) error {
|
||||||
portRange, err := loadBalancerPortRange(ports)
|
portRange, err := loadBalancerPortRange(ports)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -861,7 +862,7 @@ func createForwardingRule(s CloudForwardingRuleService, name, serviceName, regio
|
|||||||
ipProtocol := string(ports[0].Protocol)
|
ipProtocol := string(ports[0].Protocol)
|
||||||
|
|
||||||
switch netTier {
|
switch netTier {
|
||||||
case NetworkTierPremium:
|
case cloud.NetworkTierPremium:
|
||||||
rule := &compute.ForwardingRule{
|
rule := &compute.ForwardingRule{
|
||||||
Name: name,
|
Name: name,
|
||||||
Description: desc,
|
Description: desc,
|
||||||
@ -964,7 +965,7 @@ func (gce *GCECloud) firewallObject(name, region, desc string, sourceRanges nets
|
|||||||
return firewall, nil
|
return firewall, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ensureStaticIP(s CloudAddressService, name, serviceName, region, existingIP string, netTier NetworkTier) (ipAddress string, existing bool, err error) {
|
func ensureStaticIP(s CloudAddressService, name, serviceName, region, existingIP string, netTier cloud.NetworkTier) (ipAddress string, existing bool, err error) {
|
||||||
// If the address doesn't exist, this will create it.
|
// If the address doesn't exist, this will create it.
|
||||||
// If the existingIP exists but is ephemeral, this will promote it to static.
|
// If the existingIP exists but is ephemeral, this will promote it to static.
|
||||||
// If the address already exists, this will harmlessly return a StatusConflict
|
// If the address already exists, this will harmlessly return a StatusConflict
|
||||||
@ -974,7 +975,7 @@ func ensureStaticIP(s CloudAddressService, name, serviceName, region, existingIP
|
|||||||
|
|
||||||
var creationErr error
|
var creationErr error
|
||||||
switch netTier {
|
switch netTier {
|
||||||
case NetworkTierPremium:
|
case cloud.NetworkTierPremium:
|
||||||
addressObj := &compute.Address{
|
addressObj := &compute.Address{
|
||||||
Name: name,
|
Name: name,
|
||||||
Description: desc,
|
Description: desc,
|
||||||
@ -1012,19 +1013,19 @@ func ensureStaticIP(s CloudAddressService, name, serviceName, region, existingIP
|
|||||||
return addr.Address, existed, nil
|
return addr.Address, existed, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gce *GCECloud) getServiceNetworkTier(svc *v1.Service) (NetworkTier, error) {
|
func (gce *GCECloud) getServiceNetworkTier(svc *v1.Service) (cloud.NetworkTier, error) {
|
||||||
if !gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) {
|
if !gce.AlphaFeatureGate.Enabled(AlphaFeatureNetworkTiers) {
|
||||||
return NetworkTierDefault, nil
|
return cloud.NetworkTierDefault, nil
|
||||||
}
|
}
|
||||||
tier, err := GetServiceNetworkTier(svc)
|
tier, err := GetServiceNetworkTier(svc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Returns an error if the annotation is invalid.
|
// Returns an error if the annotation is invalid.
|
||||||
return NetworkTier(""), err
|
return cloud.NetworkTier(""), err
|
||||||
}
|
}
|
||||||
return tier, nil
|
return tier, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gce *GCECloud) deleteWrongNetworkTieredResources(lbName, lbRef string, desiredNetTier NetworkTier) error {
|
func (gce *GCECloud) deleteWrongNetworkTieredResources(lbName, lbRef string, desiredNetTier cloud.NetworkTier) error {
|
||||||
logPrefix := fmt.Sprintf("deleteWrongNetworkTieredResources:(%s)", lbRef)
|
logPrefix := fmt.Sprintf("deleteWrongNetworkTieredResources:(%s)", lbRef)
|
||||||
if err := deleteFWDRuleWithWrongTier(gce, gce.region, lbName, logPrefix, desiredNetTier); err != nil {
|
if err := deleteFWDRuleWithWrongTier(gce, gce.region, lbName, logPrefix, desiredNetTier); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -1037,14 +1038,14 @@ func (gce *GCECloud) deleteWrongNetworkTieredResources(lbName, lbRef string, des
|
|||||||
|
|
||||||
// deleteFWDRuleWithWrongTier checks the network tier of existing forwarding
|
// deleteFWDRuleWithWrongTier checks the network tier of existing forwarding
|
||||||
// rule and delete the rule if the tier does not matched the desired tier.
|
// rule and delete the rule if the tier does not matched the desired tier.
|
||||||
func deleteFWDRuleWithWrongTier(s CloudForwardingRuleService, region, name, logPrefix string, desiredNetTier NetworkTier) error {
|
func deleteFWDRuleWithWrongTier(s CloudForwardingRuleService, region, name, logPrefix string, desiredNetTier cloud.NetworkTier) error {
|
||||||
tierStr, err := s.getNetworkTierFromForwardingRule(name, region)
|
tierStr, err := s.getNetworkTierFromForwardingRule(name, region)
|
||||||
if isNotFound(err) {
|
if isNotFound(err) {
|
||||||
return nil
|
return nil
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
existingTier := NetworkTierGCEValueToType(tierStr)
|
existingTier := cloud.NetworkTierGCEValueToType(tierStr)
|
||||||
if existingTier == desiredNetTier {
|
if existingTier == desiredNetTier {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -1056,7 +1057,7 @@ func deleteFWDRuleWithWrongTier(s CloudForwardingRuleService, region, name, logP
|
|||||||
|
|
||||||
// deleteAddressWithWrongTier checks the network tier of existing address
|
// deleteAddressWithWrongTier checks the network tier of existing address
|
||||||
// and delete the address if the tier does not matched the desired tier.
|
// and delete the address if the tier does not matched the desired tier.
|
||||||
func deleteAddressWithWrongTier(s CloudAddressService, region, name, logPrefix string, desiredNetTier NetworkTier) error {
|
func deleteAddressWithWrongTier(s CloudAddressService, region, name, logPrefix string, desiredNetTier cloud.NetworkTier) error {
|
||||||
// We only check the IP address matching the reserved name that the
|
// We only check the IP address matching the reserved name that the
|
||||||
// controller assigned to the LB. We make the assumption that an address of
|
// controller assigned to the LB. We make the assumption that an address of
|
||||||
// such name is owned by the controller and is safe to release. Whether an
|
// such name is owned by the controller and is safe to release. Whether an
|
||||||
@ -1072,7 +1073,7 @@ func deleteAddressWithWrongTier(s CloudAddressService, region, name, logPrefix s
|
|||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
existingTier := NetworkTierGCEValueToType(tierStr)
|
existingTier := cloud.NetworkTierGCEValueToType(tierStr)
|
||||||
if existingTier == desiredNetTier {
|
if existingTier == desiredNetTier {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||||
|
|
||||||
"cloud.google.com/go/compute/metadata"
|
"cloud.google.com/go/compute/metadata"
|
||||||
compute "google.golang.org/api/compute/v1"
|
compute "google.golang.org/api/compute/v1"
|
||||||
@ -220,7 +221,7 @@ func handleAlphaNetworkTierGetError(err error) (string, error) {
|
|||||||
// Network tier is still an Alpha feature in GCP, and not every project
|
// Network tier is still an Alpha feature in GCP, and not every project
|
||||||
// is whitelisted to access the API. If we cannot access the API, just
|
// is whitelisted to access the API. If we cannot access the API, just
|
||||||
// assume the tier is premium.
|
// assume the tier is premium.
|
||||||
return NetworkTierDefault.ToGCEValue(), nil
|
return cloud.NetworkTierDefault.ToGCEValue(), nil
|
||||||
}
|
}
|
||||||
// Can't get the network tier, just return an error.
|
// Can't get the network tier, just return an error.
|
||||||
return "", err
|
return "", err
|
||||||
|
@ -36,6 +36,7 @@ go_library(
|
|||||||
"//pkg/client/clientset_generated/internalclientset:go_default_library",
|
"//pkg/client/clientset_generated/internalclientset:go_default_library",
|
||||||
"//pkg/cloudprovider:go_default_library",
|
"//pkg/cloudprovider:go_default_library",
|
||||||
"//pkg/cloudprovider/providers/gce:go_default_library",
|
"//pkg/cloudprovider/providers/gce:go_default_library",
|
||||||
|
"//pkg/cloudprovider/providers/gce/cloud:go_default_library",
|
||||||
"//pkg/controller/endpoint:go_default_library",
|
"//pkg/controller/endpoint:go_default_library",
|
||||||
"//pkg/kubelet/apis:go_default_library",
|
"//pkg/kubelet/apis:go_default_library",
|
||||||
"//pkg/master/ports:go_default_library",
|
"//pkg/master/ports:go_default_library",
|
||||||
|
@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider"
|
"k8s.io/kubernetes/pkg/cloudprovider"
|
||||||
gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
|
gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
|
||||||
|
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
@ -75,12 +76,12 @@ var _ = SIGDescribe("Services [Feature:GCEAlphaFeature][Slow]", func() {
|
|||||||
By("creating a Service of type LoadBalancer using the standard network tier")
|
By("creating a Service of type LoadBalancer using the standard network tier")
|
||||||
svc := jig.CreateTCPServiceOrFail(ns, func(svc *v1.Service) {
|
svc := jig.CreateTCPServiceOrFail(ns, func(svc *v1.Service) {
|
||||||
svc.Spec.Type = v1.ServiceTypeLoadBalancer
|
svc.Spec.Type = v1.ServiceTypeLoadBalancer
|
||||||
setNetworkTier(svc, gcecloud.NetworkTierAnnotationStandard)
|
setNetworkTier(svc, gcecloud.NetworkTierAnnotationStandard.ToGCEValue())
|
||||||
})
|
})
|
||||||
// Verify that service has been updated properly.
|
// Verify that service has been updated properly.
|
||||||
svcTier, err := gcecloud.GetServiceNetworkTier(svc)
|
svcTier, err := gcecloud.GetServiceNetworkTier(svc)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(svcTier).To(Equal(gcecloud.NetworkTierStandard))
|
Expect(svcTier).To(Equal(cloud.NetworkTierStandard))
|
||||||
// Record the LB name for test cleanup.
|
// Record the LB name for test cleanup.
|
||||||
serviceLBNames = append(serviceLBNames, cloudprovider.GetLoadBalancerName(svc))
|
serviceLBNames = append(serviceLBNames, cloudprovider.GetLoadBalancerName(svc))
|
||||||
|
|
||||||
@ -95,7 +96,7 @@ var _ = SIGDescribe("Services [Feature:GCEAlphaFeature][Slow]", func() {
|
|||||||
// Verify that service has been updated properly.
|
// Verify that service has been updated properly.
|
||||||
svcTier, err = gcecloud.GetServiceNetworkTier(svc)
|
svcTier, err = gcecloud.GetServiceNetworkTier(svc)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(svcTier).To(Equal(gcecloud.NetworkTierDefault))
|
Expect(svcTier).To(Equal(cloud.NetworkTierDefault))
|
||||||
|
|
||||||
// Wait until the ingress IP changes. Each tier has its own pool of
|
// Wait until the ingress IP changes. Each tier has its own pool of
|
||||||
// IPs, so changing tiers implies changing IPs.
|
// IPs, so changing tiers implies changing IPs.
|
||||||
@ -106,7 +107,7 @@ var _ = SIGDescribe("Services [Feature:GCEAlphaFeature][Slow]", func() {
|
|||||||
requestedAddrName := fmt.Sprintf("e2e-ext-lb-net-tier-%s", framework.RunId)
|
requestedAddrName := fmt.Sprintf("e2e-ext-lb-net-tier-%s", framework.RunId)
|
||||||
gceCloud, err := framework.GetGCECloud()
|
gceCloud, err := framework.GetGCECloud()
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
requestedIP, err := reserveAlphaRegionalAddress(gceCloud, requestedAddrName, gcecloud.NetworkTierStandard)
|
requestedIP, err := reserveAlphaRegionalAddress(gceCloud, requestedAddrName, cloud.NetworkTierStandard)
|
||||||
Expect(err).NotTo(HaveOccurred(), "failed to reserve a STANDARD tiered address")
|
Expect(err).NotTo(HaveOccurred(), "failed to reserve a STANDARD tiered address")
|
||||||
defer func() {
|
defer func() {
|
||||||
if requestedAddrName != "" {
|
if requestedAddrName != "" {
|
||||||
@ -122,13 +123,13 @@ var _ = SIGDescribe("Services [Feature:GCEAlphaFeature][Slow]", func() {
|
|||||||
By("updating the Service to use the standard tier with a requested IP")
|
By("updating the Service to use the standard tier with a requested IP")
|
||||||
svc = jig.UpdateServiceOrFail(ns, svc.Name, func(svc *v1.Service) {
|
svc = jig.UpdateServiceOrFail(ns, svc.Name, func(svc *v1.Service) {
|
||||||
svc.Spec.LoadBalancerIP = requestedIP
|
svc.Spec.LoadBalancerIP = requestedIP
|
||||||
setNetworkTier(svc, gcecloud.NetworkTierAnnotationStandard)
|
setNetworkTier(svc, gcecloud.NetworkTierAnnotationStandard.ToGCEValue())
|
||||||
})
|
})
|
||||||
// Verify that service has been updated properly.
|
// Verify that service has been updated properly.
|
||||||
Expect(svc.Spec.LoadBalancerIP).To(Equal(requestedIP))
|
Expect(svc.Spec.LoadBalancerIP).To(Equal(requestedIP))
|
||||||
svcTier, err = gcecloud.GetServiceNetworkTier(svc)
|
svcTier, err = gcecloud.GetServiceNetworkTier(svc)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(svcTier).To(Equal(gcecloud.NetworkTierStandard))
|
Expect(svcTier).To(Equal(cloud.NetworkTierStandard))
|
||||||
|
|
||||||
// Wait until the ingress IP changes and verifies the LB.
|
// Wait until the ingress IP changes and verifies the LB.
|
||||||
ingressIP = waitAndVerifyLBWithTier(jig, ns, svcName, ingressIP, createTimeout, lagTimeout)
|
ingressIP = waitAndVerifyLBWithTier(jig, ns, svcName, ingressIP, createTimeout, lagTimeout)
|
||||||
@ -171,7 +172,7 @@ func waitAndVerifyLBWithTier(jig *framework.ServiceTestJig, ns, svcName, existin
|
|||||||
return ingressIP
|
return ingressIP
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLBNetworkTierByIP(ip string) (gcecloud.NetworkTier, error) {
|
func getLBNetworkTierByIP(ip string) (cloud.NetworkTier, error) {
|
||||||
var rule *computealpha.ForwardingRule
|
var rule *computealpha.ForwardingRule
|
||||||
// Retry a few times to tolerate flakes.
|
// Retry a few times to tolerate flakes.
|
||||||
err := wait.PollImmediate(5*time.Second, 15*time.Second, func() (bool, error) {
|
err := wait.PollImmediate(5*time.Second, 15*time.Second, func() (bool, error) {
|
||||||
@ -185,7 +186,7 @@ func getLBNetworkTierByIP(ip string) (gcecloud.NetworkTier, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return gcecloud.NetworkTierGCEValueToType(rule.NetworkTier), nil
|
return cloud.NetworkTierGCEValueToType(rule.NetworkTier), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getGCEForwardingRuleByIP(ip string) (*computealpha.ForwardingRule, error) {
|
func getGCEForwardingRuleByIP(ip string) (*computealpha.ForwardingRule, error) {
|
||||||
@ -223,7 +224,7 @@ func clearNetworkTier(svc *v1.Service) {
|
|||||||
|
|
||||||
// TODO: add retries if this turns out to be flaky.
|
// TODO: add retries if this turns out to be flaky.
|
||||||
// TODO(#51665): remove this helper function once Network Tiers becomes beta.
|
// TODO(#51665): remove this helper function once Network Tiers becomes beta.
|
||||||
func reserveAlphaRegionalAddress(cloud *gcecloud.GCECloud, name string, netTier gcecloud.NetworkTier) (string, error) {
|
func reserveAlphaRegionalAddress(cloud *gcecloud.GCECloud, name string, netTier cloud.NetworkTier) (string, error) {
|
||||||
alphaAddr := &computealpha.Address{
|
alphaAddr := &computealpha.Address{
|
||||||
Name: name,
|
Name: name,
|
||||||
NetworkTier: netTier.ToGCEValue(),
|
NetworkTier: netTier.ToGCEValue(),
|
||||||
|
Loading…
Reference in New Issue
Block a user