mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 12:43:23 +00:00
Truncate GCE load balancer names to 63 chars
This commit is contained in:
parent
262c34e7db
commit
40549dc083
@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package gce_cloud
|
package gce_cloud
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/md5"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -42,6 +43,8 @@ import (
|
|||||||
"google.golang.org/cloud/compute/metadata"
|
"google.golang.org/cloud/compute/metadata"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const LOAD_BALANCER_NAME_MAX_LENGTH = 63
|
||||||
|
|
||||||
// GCECloud is an implementation of Interface, TCPLoadBalancer and Instances for Google Compute Engine.
|
// GCECloud is an implementation of Interface, TCPLoadBalancer and Instances for Google Compute Engine.
|
||||||
type GCECloud struct {
|
type GCECloud struct {
|
||||||
service *compute.Service
|
service *compute.Service
|
||||||
@ -266,10 +269,23 @@ func translateAffinityType(affinityType api.AffinityType) GCEAffinityType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func normalizeName(name string) string {
|
||||||
|
// If it's short enough, just leave it.
|
||||||
|
if len(name) < LOAD_BALANCER_NAME_MAX_LENGTH-6 {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
// Hash and truncate
|
||||||
|
hash := md5.Sum([]byte(name))
|
||||||
|
truncated := name[0 : LOAD_BALANCER_NAME_MAX_LENGTH-6]
|
||||||
|
shortHash := hash[0:6]
|
||||||
|
return fmt.Sprintf("%s%s", truncated, string(shortHash))
|
||||||
|
}
|
||||||
|
|
||||||
// CreateTCPLoadBalancer is an implementation of TCPLoadBalancer.CreateTCPLoadBalancer.
|
// CreateTCPLoadBalancer is an implementation of TCPLoadBalancer.CreateTCPLoadBalancer.
|
||||||
// TODO(a-robinson): Don't just ignore specified IP addresses. Check if they're
|
// TODO(a-robinson): Don't just ignore specified IP addresses. Check if they're
|
||||||
// owned by the project and available to be used, and use them if they are.
|
// owned by the project and available to be used, and use them if they are.
|
||||||
func (gce *GCECloud) CreateTCPLoadBalancer(name, region string, externalIP net.IP, ports []int, hosts []string, affinityType api.AffinityType) (string, error) {
|
func (gce *GCECloud) CreateTCPLoadBalancer(origName, region string, externalIP net.IP, ports []int, hosts []string, affinityType api.AffinityType) (string, error) {
|
||||||
|
name := normalizeName(origName)
|
||||||
err := gce.makeTargetPool(name, region, hosts, translateAffinityType(affinityType))
|
err := gce.makeTargetPool(name, region, hosts, translateAffinityType(affinityType))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !isHTTPErrorCode(err, http.StatusConflict) {
|
if !isHTTPErrorCode(err, http.StatusConflict) {
|
||||||
@ -315,7 +331,8 @@ func (gce *GCECloud) CreateTCPLoadBalancer(name, region string, externalIP net.I
|
|||||||
}
|
}
|
||||||
|
|
||||||
// UpdateTCPLoadBalancer is an implementation of TCPLoadBalancer.UpdateTCPLoadBalancer.
|
// UpdateTCPLoadBalancer is an implementation of TCPLoadBalancer.UpdateTCPLoadBalancer.
|
||||||
func (gce *GCECloud) UpdateTCPLoadBalancer(name, region string, hosts []string) error {
|
func (gce *GCECloud) UpdateTCPLoadBalancer(origName, region string, hosts []string) error {
|
||||||
|
name := normalizeName(origName)
|
||||||
pool, err := gce.service.TargetPools.Get(gce.projectID, region, name).Do()
|
pool, err := gce.service.TargetPools.Get(gce.projectID, region, name).Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -360,7 +377,8 @@ func (gce *GCECloud) UpdateTCPLoadBalancer(name, region string, hosts []string)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteTCPLoadBalancer is an implementation of TCPLoadBalancer.DeleteTCPLoadBalancer.
|
// DeleteTCPLoadBalancer is an implementation of TCPLoadBalancer.DeleteTCPLoadBalancer.
|
||||||
func (gce *GCECloud) DeleteTCPLoadBalancer(name, region string) error {
|
func (gce *GCECloud) DeleteTCPLoadBalancer(origName, region string) error {
|
||||||
|
name := normalizeName(origName)
|
||||||
op, err := gce.service.ForwardingRules.Delete(gce.projectID, region, name).Do()
|
op, err := gce.service.ForwardingRules.Delete(gce.projectID, region, name).Do()
|
||||||
if err != nil && isHTTPErrorCode(err, http.StatusNotFound) {
|
if err != nil && isHTTPErrorCode(err, http.StatusNotFound) {
|
||||||
glog.Infof("Forwarding rule %s already deleted. Continuing to delete target pool.", name)
|
glog.Infof("Forwarding rule %s already deleted. Continuing to delete target pool.", name)
|
||||||
|
Loading…
Reference in New Issue
Block a user