From 1449e88f7acde11fbfd8a63bbc7013fbada93db4 Mon Sep 17 00:00:00 2001 From: Chris Telfer Date: Tue, 10 Apr 2018 13:05:39 -0400 Subject: [PATCH] Avoid default gateway collisions Default gateways truncate the endpoint name to 12 characters. This can make network endpoints ambiguous especially for load-balancing sandboxes for networks with lenghty names (such as with our prefixes). Address this by detecting an overflow in the sanbox name length and instead opting to name the gateway endpoint "gateway_" which should never collide. Signed-off-by: Chris Telfer --- libnetwork/default_gateway.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libnetwork/default_gateway.go b/libnetwork/default_gateway.go index 9a60fd6758..cf094b39ee 100644 --- a/libnetwork/default_gateway.go +++ b/libnetwork/default_gateway.go @@ -49,9 +49,11 @@ func (sb *sandbox) setupDefaultGW() error { createOptions := []EndpointOption{CreateOptionAnonymous()} - eplen := gwEPlen - if len(sb.containerID) < gwEPlen { - eplen = len(sb.containerID) + var gwName string + if len(sb.containerID) <= gwEPlen { + gwName = "gateway_" + sb.containerID + } else { + gwName = "gateway_" + sb.id[:gwEPlen] } sbLabels := sb.Labels() @@ -69,7 +71,7 @@ func (sb *sandbox) setupDefaultGW() error { createOptions = append(createOptions, epOption) } - newEp, err := n.CreateEndpoint("gateway_"+sb.containerID[0:eplen], createOptions...) + newEp, err := n.CreateEndpoint(gwName, createOptions...) if err != nil { return fmt.Errorf("container %s: endpoint create on GW Network failed: %v", sb.containerID, err) }