mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Use service UID as the ELB name
This commit is contained in:
parent
2a3e0796f8
commit
e9c5e44767
@ -18,6 +18,7 @@ package cloudprovider
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
)
|
)
|
||||||
@ -44,8 +45,15 @@ type Clusters interface {
|
|||||||
|
|
||||||
// TODO(#6812): Use a shorter name that's less likely to be longer than cloud
|
// TODO(#6812): Use a shorter name that's less likely to be longer than cloud
|
||||||
// providers' name length limits.
|
// providers' name length limits.
|
||||||
func GetLoadBalancerName(clusterName, serviceNamespace, serviceName string) string {
|
func GetLoadBalancerName(service *api.Service) string {
|
||||||
return clusterName + "-" + serviceNamespace + "-" + serviceName
|
//GCE requires that the name of a load balancer starts with a lower case letter.
|
||||||
|
ret := "a" + string(service.UID)
|
||||||
|
ret = strings.Replace(ret, "-", "", -1)
|
||||||
|
//AWS requires that the name of a load balancer is shorter than 32 bytes.
|
||||||
|
if len(ret) > 32 {
|
||||||
|
ret = ret[:32]
|
||||||
|
}
|
||||||
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
// TCPLoadBalancer is an abstract, pluggable interface for TCP load balancers.
|
// TCPLoadBalancer is an abstract, pluggable interface for TCP load balancers.
|
||||||
|
@ -266,7 +266,7 @@ func (nc *NodeController) reconcileExternalServices(nodes *api.NodeList) (should
|
|||||||
glog.Errorf("External load balancers for non TCP services are not currently supported: %v.", service)
|
glog.Errorf("External load balancers for non TCP services are not currently supported: %v.", service)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
name := cloudprovider.GetLoadBalancerName(nc.clusterName, service.Namespace, service.Name)
|
name := cloudprovider.GetLoadBalancerName(&service)
|
||||||
err := balancer.UpdateTCPLoadBalancer(name, zone.Region, hosts)
|
err := balancer.UpdateTCPLoadBalancer(name, zone.Region, hosts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("External error while updating TCP load balancer: %v.", err)
|
glog.Errorf("External error while updating TCP load balancer: %v.", err)
|
||||||
|
@ -32,6 +32,7 @@ import (
|
|||||||
fake_cloud "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/fake"
|
fake_cloud "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/fake"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/types"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
@ -609,7 +610,7 @@ func TestSyncCloudNodesReconcilesExternalService(t *testing.T) {
|
|||||||
// Set of nodes does not change: do nothing.
|
// Set of nodes does not change: do nothing.
|
||||||
fakeNodeHandler: &FakeNodeHandler{
|
fakeNodeHandler: &FakeNodeHandler{
|
||||||
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
||||||
Fake: testclient.NewSimpleFake(&api.ServiceList{Items: []api.Service{*newService("service0", true), *newService("service1", false)}})},
|
Fake: testclient.NewSimpleFake(&api.ServiceList{Items: []api.Service{*newService("service0", types.UID(""), true), *newService("service1", types.UID(""), false)}})},
|
||||||
fakeCloud: &fake_cloud.FakeCloud{
|
fakeCloud: &fake_cloud.FakeCloud{
|
||||||
Machines: []string{"node0", "node1"},
|
Machines: []string{"node0", "node1"},
|
||||||
},
|
},
|
||||||
@ -621,28 +622,28 @@ func TestSyncCloudNodesReconcilesExternalService(t *testing.T) {
|
|||||||
// Delete "node1", target pool for "service0" should shrink.
|
// Delete "node1", target pool for "service0" should shrink.
|
||||||
fakeNodeHandler: &FakeNodeHandler{
|
fakeNodeHandler: &FakeNodeHandler{
|
||||||
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
Existing: []*api.Node{newNode("node0"), newNode("node1")},
|
||||||
Fake: testclient.NewSimpleFake(&api.ServiceList{Items: []api.Service{*newService("service0", true), *newService("service1", false)}})},
|
Fake: testclient.NewSimpleFake(&api.ServiceList{Items: []api.Service{*newService("service0", types.UID("2c104a7c-e79e-11e4-8187-42010af0068a"), true), *newService("service1", types.UID(""), false)}})},
|
||||||
fakeCloud: &fake_cloud.FakeCloud{
|
fakeCloud: &fake_cloud.FakeCloud{
|
||||||
Machines: []string{"node0"},
|
Machines: []string{"node0"},
|
||||||
},
|
},
|
||||||
matchRE: ".*",
|
matchRE: ".*",
|
||||||
expectedClientActions: []testclient.FakeAction{{Action: "list-pods"}, {Action: "list-services"}},
|
expectedClientActions: []testclient.FakeAction{{Action: "list-pods"}, {Action: "list-services"}},
|
||||||
expectedUpdateCalls: []fake_cloud.FakeUpdateBalancerCall{
|
expectedUpdateCalls: []fake_cloud.FakeUpdateBalancerCall{
|
||||||
{Name: "kubernetes-namespace-service0", Hosts: []string{"node0"}},
|
{Name: "a2c104a7ce79e11e4818742010af0068", Hosts: []string{"node0"}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Add "node1", target pool for "service0" should grow.
|
// Add "node1", target pool for "service0" should grow.
|
||||||
fakeNodeHandler: &FakeNodeHandler{
|
fakeNodeHandler: &FakeNodeHandler{
|
||||||
Existing: []*api.Node{newNode("node0")},
|
Existing: []*api.Node{newNode("node0")},
|
||||||
Fake: testclient.NewSimpleFake(&api.ServiceList{Items: []api.Service{*newService("service0", true), *newService("service1", false)}})},
|
Fake: testclient.NewSimpleFake(&api.ServiceList{Items: []api.Service{*newService("service0", types.UID("2c104a7c-e79e-11e4-8187-42010af0068a"), true), *newService("service1", types.UID(""), false)}})},
|
||||||
fakeCloud: &fake_cloud.FakeCloud{
|
fakeCloud: &fake_cloud.FakeCloud{
|
||||||
Machines: []string{"node0", "node1"},
|
Machines: []string{"node0", "node1"},
|
||||||
},
|
},
|
||||||
matchRE: ".*",
|
matchRE: ".*",
|
||||||
expectedClientActions: []testclient.FakeAction{{Action: "list-services"}},
|
expectedClientActions: []testclient.FakeAction{{Action: "list-services"}},
|
||||||
expectedUpdateCalls: []fake_cloud.FakeUpdateBalancerCall{
|
expectedUpdateCalls: []fake_cloud.FakeUpdateBalancerCall{
|
||||||
{Name: "kubernetes-namespace-service0", Hosts: []string{"node0", "node1"}},
|
{Name: "a2c104a7ce79e11e4818742010af0068", Hosts: []string{"node0", "node1"}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -1128,8 +1129,8 @@ func newPod(name, host string) *api.Pod {
|
|||||||
return &api.Pod{ObjectMeta: api.ObjectMeta{Name: name}, Spec: api.PodSpec{Host: host}}
|
return &api.Pod{ObjectMeta: api.ObjectMeta{Name: name}, Spec: api.PodSpec{Host: host}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newService(name string, external bool) *api.Service {
|
func newService(name string, uid types.UID, external bool) *api.Service {
|
||||||
return &api.Service{ObjectMeta: api.ObjectMeta{Name: name, Namespace: "namespace"}, Spec: api.ServiceSpec{CreateExternalLoadBalancer: external}}
|
return &api.Service{ObjectMeta: api.ObjectMeta{Name: name, Namespace: "namespace", UID: uid}, Spec: api.ServiceSpec{CreateExternalLoadBalancer: external}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func sortedNodeNames(nodes []*api.Node) []string {
|
func sortedNodeNames(nodes []*api.Node) []string {
|
||||||
|
@ -419,7 +419,7 @@ func needsUpdate(oldService *api.Service, newService *api.Service) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *ServiceController) loadBalancerName(service *api.Service) string {
|
func (s *ServiceController) loadBalancerName(service *api.Service) string {
|
||||||
return cloudprovider.GetLoadBalancerName(s.clusterName, service.Namespace, service.Name)
|
return cloudprovider.GetLoadBalancerName(service)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTCPPorts(service *api.Service) ([]int, error) {
|
func getTCPPorts(service *api.Service) ([]int, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user