2019-09-27 21:51:53 +00:00
|
|
|
// +build !providerless
|
|
|
|
|
2019-08-30 18:33:25 +00:00
|
|
|
/*
|
|
|
|
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 gce
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/sha1"
|
|
|
|
"encoding/hex"
|
|
|
|
"fmt"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud"
|
|
|
|
"k8s.io/api/core/v1"
|
|
|
|
"k8s.io/apimachinery/pkg/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Internal Load Balancer
|
|
|
|
|
|
|
|
// Instance groups remain legacy named to stay consistent with ingress
|
|
|
|
func makeInstanceGroupName(clusterID string) string {
|
|
|
|
prefix := "k8s-ig"
|
|
|
|
// clusterID might be empty for legacy clusters
|
|
|
|
if clusterID == "" {
|
|
|
|
return prefix
|
|
|
|
}
|
|
|
|
return fmt.Sprintf("%s--%s", prefix, clusterID)
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeBackendServiceName(loadBalancerName, clusterID string, shared bool, scheme cloud.LbScheme, protocol v1.Protocol, svcAffinity v1.ServiceAffinity) string {
|
|
|
|
if shared {
|
|
|
|
hash := sha1.New()
|
|
|
|
|
|
|
|
// For every non-nil option, hash its value. Currently, only service affinity is relevant.
|
|
|
|
hash.Write([]byte(string(svcAffinity)))
|
|
|
|
|
|
|
|
hashed := hex.EncodeToString(hash.Sum(nil))
|
|
|
|
hashed = hashed[:16]
|
|
|
|
|
|
|
|
// k8s- 4
|
|
|
|
// {clusterid}- 17
|
|
|
|
// {scheme}- 9 (internal/external)
|
|
|
|
// {protocol}- 4 (tcp/udp)
|
|
|
|
// nmv1- 5 (naming convention version)
|
|
|
|
// {suffix} 16 (hash of settings)
|
|
|
|
// -----------------
|
|
|
|
// 55 characters used
|
|
|
|
return fmt.Sprintf("k8s-%s-%s-%s-nmv1-%s", clusterID, strings.ToLower(string(scheme)), strings.ToLower(string(protocol)), hashed)
|
|
|
|
}
|
|
|
|
return loadBalancerName
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeHealthCheckName(loadBalancerName, clusterID string, shared bool) string {
|
|
|
|
if shared {
|
|
|
|
return fmt.Sprintf("k8s-%s-node", clusterID)
|
|
|
|
}
|
|
|
|
|
|
|
|
return loadBalancerName
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeHealthCheckFirewallNameFromHC(healthCheckName string) string {
|
|
|
|
return healthCheckName + "-hc"
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeHealthCheckFirewallName(loadBalancerName, clusterID string, shared bool) string {
|
|
|
|
if shared {
|
|
|
|
return fmt.Sprintf("k8s-%s-node-hc", clusterID)
|
|
|
|
}
|
|
|
|
return loadBalancerName + "-hc"
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeBackendServiceDescription(nm types.NamespacedName, shared bool) string {
|
|
|
|
if shared {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
return fmt.Sprintf(`{"kubernetes.io/service-name":"%s"}`, nm.String())
|
|
|
|
}
|
|
|
|
|
|
|
|
// External Load Balancer
|
|
|
|
|
|
|
|
// makeServiceDescription is used to generate descriptions for forwarding rules and addresses.
|
|
|
|
func makeServiceDescription(serviceName string) string {
|
|
|
|
return fmt.Sprintf(`{"kubernetes.io/service-name":"%s"}`, serviceName)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeNodesHealthCheckName returns name of the health check resource used by
|
|
|
|
// the GCE load balancers (l4) for performing health checks on nodes.
|
|
|
|
func MakeNodesHealthCheckName(clusterID string) string {
|
|
|
|
return fmt.Sprintf("k8s-%v-node", clusterID)
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeHealthCheckDescription(serviceName string) string {
|
|
|
|
return fmt.Sprintf(`{"kubernetes.io/service-name":"%s"}`, serviceName)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeHealthCheckFirewallName returns the firewall name used by the GCE load
|
|
|
|
// balancers (l4) for performing health checks.
|
|
|
|
func MakeHealthCheckFirewallName(clusterID, hcName string, isNodesHealthCheck bool) string {
|
|
|
|
if isNodesHealthCheck {
|
|
|
|
return MakeNodesHealthCheckName(clusterID) + "-http-hc"
|
|
|
|
}
|
|
|
|
return "k8s-" + hcName + "-http-hc"
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeFirewallName returns the firewall name used by the GCE load
|
|
|
|
// balancers (l4) for serving traffic.
|
|
|
|
func MakeFirewallName(name string) string {
|
|
|
|
return fmt.Sprintf("k8s-fw-%s", name)
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeFirewallDescription(serviceName, ipAddress string) string {
|
|
|
|
return fmt.Sprintf(`{"kubernetes.io/service-name":"%s", "kubernetes.io/service-ip":"%s"}`,
|
|
|
|
serviceName, ipAddress)
|
|
|
|
}
|