Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 55 additions & 12 deletions internal/kube/controller/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ func TestGeneral(t *testing.T) {
resource.DeploymentResource(): f.routerDeployment("skupper-router", "test"),
},
expectedRouterConfig: []*RouterConfig{
f.routerConfig("skupper-router", "test").tcpListener("mylistener", "1024", "", ""),
f.routerConfig("skupper-router", "test").tcpListener("listener.mylistener", "1024", "", ""),
},
expectedServices: []*corev1.Service{
f.service("mysvc", "test", f.routerSelector(true), f.servicePort("mylistener", 8080, 1024)),
Expand Down Expand Up @@ -291,19 +291,19 @@ func TestGeneral(t *testing.T) {
"skupper-router",
"test",
).tcpListener(
"mylistener", "1024", "mysvc", "",
"listener.mylistener", "1024", "mysvc", "",
).tcpListener(
"mylistener@mypod-1", "*", "mysvc.mypod-1", "",
"listener.mylistener@mypod-1", "*", "mysvc.mypod-1", "",
).tcpListener(
"mylistener@mypod-2", "*", "mysvc.mypod-2", "",
"listener.mylistener@mypod-2", "*", "mysvc.mypod-2", "",
).tcpConnector(
"myconnector@10.1.1.10", "10.1.1.10", "8080", "mysvc", "",
"connector.myconnector@10.1.1.10", "10.1.1.10", "8080", "mysvc", "",
).tcpConnector(
"myconnector@10.1.1.11", "10.1.1.11", "8080", "mysvc", "",
"connector.myconnector@10.1.1.11", "10.1.1.11", "8080", "mysvc", "",
).tcpConnector(
"myconnector@mypod-1", "10.1.1.10", "8080", "mysvc.mypod-1", "",
"connector.myconnector@mypod-1", "10.1.1.10", "8080", "mysvc.mypod-1", "",
).tcpConnector(
"myconnector@mypod-2", "10.1.1.11", "8080", "mysvc.mypod-2", "",
"connector.myconnector@mypod-2", "10.1.1.11", "8080", "mysvc.mypod-2", "",
),
},
expectedServices: []*corev1.Service{
Expand All @@ -312,6 +312,44 @@ func TestGeneral(t *testing.T) {
f.service("mypod-2", "test", f.routerSelector(true), f.servicePortU("mylistener", 8080)),
},
},
{
name: "expose pods by name with same name",
k8sObjects: []runtime.Object{
f.skupperNetworkStatus("test", f.networkStatusInfo("mysite", "test", nil, map[string]string{"mysvc": "mysvc", "mysvc.mypod-1": "10.1.1.10", "mysvc.mypod-2": "10.1.1.11"}).info()),
f.pod("mypod-1", "test", map[string]string{"app": "foo"}, nil, f.podStatus("10.1.1.10", corev1.PodRunning, f.podCondition(corev1.PodReady, corev1.ConditionTrue))),
f.pod("mypod-2", "test", map[string]string{"app": "foo"}, nil, f.podStatus("10.1.1.11", corev1.PodRunning, f.podCondition(corev1.PodReady, corev1.ConditionTrue))),
},
skupperObjects: []runtime.Object{
f.site("mysite", "test", "", false, false),
f.connectorWithExposePodsByName("backend", "test", "mysvc", "app=foo", 8080),
f.listenerWithExposePodsByName("backend", "test", "mysvc", "mysvc", 8080),
},
waitFunctions: []WaitFunction{
isConnectorStatusConditionTrue("backend", "test", skupperv2alpha1.CONDITION_TYPE_CONFIGURED),
isListenerStatusConditionTrue("backend", "test", skupperv2alpha1.CONDITION_TYPE_CONFIGURED),
},
expectedSiteStatuses: []*skupperv2alpha1.Site{
f.siteStatus("mysite", "test", skupperv2alpha1.StatusPending, "Not Running", f.condition(skupperv2alpha1.CONDITION_TYPE_CONFIGURED, metav1.ConditionTrue, "Ready", "OK")),
},
expectedDynamicResources: map[schema.GroupVersionResource]*unstructured.Unstructured{
resource.DeploymentResource(): f.routerDeployment("skupper-router", "test"),
},
expectedRouterConfig: []*RouterConfig{
f.routerConfig("skupper-router", "test").
tcpListener("listener.backend", "1024", "mysvc", "").
tcpListener("listener.backend@mypod-1", "*", "mysvc.mypod-1", "").
tcpListener("listener.backend@mypod-2", "*", "mysvc.mypod-2", "").
tcpConnector("connector.backend@10.1.1.10", "10.1.1.10", "8080", "mysvc", "").
tcpConnector("connector.backend@10.1.1.11", "10.1.1.11", "8080", "mysvc", "").
tcpConnector("connector.backend@mypod-1", "10.1.1.10", "8080", "mysvc.mypod-1", "").
tcpConnector("connector.backend@mypod-2", "10.1.1.11", "8080", "mysvc.mypod-2", ""),
},
expectedServices: []*corev1.Service{
f.service("mysvc", "test", f.routerSelector(true), f.servicePort("backend", 8080, 1024)),
f.service("mypod-1", "test", f.routerSelector(true), f.servicePortU("backend", 8080)),
f.service("mypod-2", "test", f.routerSelector(true), f.servicePortU("backend", 8080)),
},
},
{
name: "listener with no site",
skupperObjects: []runtime.Object{
Expand All @@ -335,7 +373,7 @@ func TestGeneral(t *testing.T) {
resource.DeploymentResource(): f.routerDeployment("skupper-router", "test"),
},
expectedRouterConfig: []*RouterConfig{
f.routerConfig("skupper-router", "test").tcpConnector("myconnector@mysvc", "mysvc", "8080", "", ""),
f.routerConfig("skupper-router", "test").tcpConnector("connector.myconnector@mysvc", "mysvc", "8080", "", ""),
},
},
{
Expand All @@ -359,7 +397,7 @@ func TestGeneral(t *testing.T) {
resource.DeploymentResource(): f.routerDeployment("skupper-router", "test"),
},
expectedRouterConfig: []*RouterConfig{
f.routerConfig("skupper-router", "test").tcpConnector("myconnector@10.1.1.10", "10.1.1.10", "8080", "", ""),
f.routerConfig("skupper-router", "test").tcpConnector("connector.myconnector@10.1.1.10", "10.1.1.10", "8080", "", ""),
},
},
{
Expand Down Expand Up @@ -394,7 +432,7 @@ func TestGeneral(t *testing.T) {
resource.DeploymentResource(): f.routerDeployment("skupper-router", "test"),
},
expectedRouterConfig: []*RouterConfig{
f.routerConfig("skupper-router", "test").tcpConnector("myconnector@10.1.1.10", "10.1.1.10", "8080", "", ""),
f.routerConfig("skupper-router", "test").tcpConnector("connector.myconnector@10.1.1.10", "10.1.1.10", "8080", "", ""),
},
},
/* TODO: Fix
Expand Down Expand Up @@ -486,7 +524,7 @@ func TestGeneral(t *testing.T) {
resource.DeploymentResource(): f.routerDeployment("skupper-router", "test"),
},
expectedRouterConfig: []*RouterConfig{
f.routerConfig("skupper-router", "test").tcpListener("mylistener", "1024", "", ""),
f.routerConfig("skupper-router", "test").tcpListener("listener.mylistener", "1024", "", ""),
},
expectedServices: []*corev1.Service{
f.serviceWithMetadata(f.service("mysvc", "test", f.routerSelector(true), f.servicePort("mylistener", 8080, 1024)), map[string]string{"acme.com/foo": "bar"}, nil),
Expand Down Expand Up @@ -1707,6 +1745,11 @@ func (rc *RouterConfig) asConfigMapWithOwner(name string, uid string) *corev1.Co
func (rc *RouterConfig) verify(t *testing.T, cm *corev1.ConfigMap) error {
config, err := qdr.GetRouterConfigFromConfigMap(cm)
assert.Assert(t, err)
for name := range config.Bridges.TcpListeners {
if _, ok := config.Bridges.TcpConnectors[name]; ok {
assert.Assert(t, false, "bridge resource name %q used as both tcpListener and tcpConnector", name)
}
}
for key, expected := range rc.config.Addresses {
actual, ok := config.Addresses[key]
assert.Assert(t, ok, "No address found for %s", key)
Expand Down
13 changes: 6 additions & 7 deletions internal/kube/site/bindings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,8 @@ func TestBindingAdaptor_updateBridgeConfigForConnector(t *testing.T) {
config: qdr.BridgeConfig{
TcpListeners: map[string]qdr.TcpEndpoint{},
TcpConnectors: map[string]qdr.TcpEndpoint{
"backend@192.168.1.1": qdr.TcpEndpoint{
Name: "backend@192.168.1.1",
"connector.backend@192.168.1.1": qdr.TcpEndpoint{
Name: "connector.backend@192.168.1.1",
Host: "192.168.1.1",
Port: "8080",
SiteId: "00000000-0000-0000-0000-000000000001",
Expand Down Expand Up @@ -325,8 +325,8 @@ func TestBindingAdaptor_updateBridgeConfigForConnector(t *testing.T) {
config: qdr.BridgeConfig{
TcpListeners: map[string]qdr.TcpEndpoint{},
TcpConnectors: map[string]qdr.TcpEndpoint{
"backend@10.244.0.9": qdr.TcpEndpoint{
Name: "backend@10.244.0.9",
"connector.backend@10.244.0.9": qdr.TcpEndpoint{
Name: "connector.backend@10.244.0.9",
Host: "10.244.0.9",
Port: "0",
SiteId: "00000000-0000-0000-0000-000000000001",
Expand Down Expand Up @@ -591,9 +591,8 @@ func TestBindingAdaptor_updateBridgeConfigForListener(t *testing.T) {
expected: expected{
config: qdr.BridgeConfig{
TcpListeners: map[string]qdr.TcpEndpoint{
"backend": qdr.TcpEndpoint{

Name: "backend",
"listener.backend": qdr.TcpEndpoint{
Name: "listener.backend",
Port: "1024",
Address: "backend",
SiteId: "00000000-0000-0000-0000-000000000001",
Expand Down
2 changes: 1 addition & 1 deletion internal/kube/site/per_target_listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ func (p *PerTargetListener) updateBridgeConfig(siteId string, config *qdr.Bridge
for target, port := range p.targets {
if p.definition.Spec.Type == "tcp" || p.definition.Spec.Type == "" {
if config.AddTcpListener(qdr.TcpEndpoint{
Name: p.definition.Name + "@" + target,
Name: qdr.TcpListenerNamePrefix + p.definition.Name + "@" + target,
SiteId: siteId,
Port: strconv.Itoa(port),
Address: p.address(target),
Expand Down
9 changes: 7 additions & 2 deletions internal/qdr/qdr.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ type RouterConfigHandler interface {

type TcpEndpointMap map[string]TcpEndpoint

const (
TcpListenerNamePrefix = "listener."
TcpConnectorNamePrefix = "connector."
)

type BridgeConfig struct {
TcpListeners TcpEndpointMap
TcpConnectors TcpEndpointMap
Expand Down Expand Up @@ -1190,7 +1195,7 @@ func GetRouterConfigForHeadlessProxy(definition types.ServiceInterface, siteId s
for iPort, ePort := range ports {
address := fmt.Sprintf("%s-%s:%d", definition.Address, "${POD_ID}", iPort)
if definition.IsOfLocalOrigin() {
name := fmt.Sprintf("egress:%d", ePort)
name := TcpConnectorNamePrefix + fmt.Sprintf("egress:%d", ePort)
host := definition.Headless.Name + "-${POD_ID}." + definition.Address + "." + namespace
// in the originating site, just have egress bindings
switch definition.Protocol {
Expand All @@ -1205,7 +1210,7 @@ func GetRouterConfigForHeadlessProxy(definition types.ServiceInterface, siteId s
default:
}
} else {
name := fmt.Sprintf("ingress:%d", ePort)
name := TcpListenerNamePrefix + fmt.Sprintf("ingress:%d", ePort)
// in all other sites, just have ingress bindings
switch definition.Protocol {
case "tcp":
Expand Down
48 changes: 24 additions & 24 deletions internal/site/bindings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ func TestBindings_Apply(t *testing.T) {
},
expected: expected{
tcpListeners: qdr.TcpEndpointMap{
"listener1": {
Name: "listener1",
"listener.listener1": {
Name: "listener.listener1",
Host: "10.10.10.1",
Port: "9090",
Address: "echo:9090",
Expand Down Expand Up @@ -101,8 +101,8 @@ func TestBindings_Apply(t *testing.T) {
expected: expected{
tcpListeners: qdr.TcpEndpointMap{},
tcpConnectors: qdr.TcpEndpointMap{
"connector1@10.10.10.1": {
Name: "connector1@10.10.10.1",
"connector.connector1@10.10.10.1": {
Name: "connector.connector1@10.10.10.1",
Host: "10.10.10.1",
Port: "9090",
Address: "echo:9090",
Expand All @@ -120,8 +120,8 @@ func TestBindings_Apply(t *testing.T) {
config: &qdr.RouterConfig{
Bridges: qdr.BridgeConfig{
TcpListeners: map[string]qdr.TcpEndpoint{
"listener1": qdr.TcpEndpoint{
Name: "listener1",
"listener.listener1": qdr.TcpEndpoint{
Name: "listener.listener1",
Host: "10.10.10.1",
Port: "9090",
SiteId: "site-1",
Expand All @@ -146,8 +146,8 @@ func TestBindings_Apply(t *testing.T) {
Bridges: qdr.BridgeConfig{
TcpListeners: map[string]qdr.TcpEndpoint{},
TcpConnectors: map[string]qdr.TcpEndpoint{
"connector1": qdr.TcpEndpoint{
Name: "connector1",
"connector.connector1@10.10.10.1": qdr.TcpEndpoint{
Name: "connector.connector1@10.10.10.1",
Host: "10.10.10.1",
Port: "9090",
SiteId: "site-1",
Expand Down Expand Up @@ -192,8 +192,8 @@ func TestBindings_Apply(t *testing.T) {
},
expected: expected{
tcpListeners: qdr.TcpEndpointMap{
"listener1": {
Name: "listener1",
"listener.listener1": {
Name: "listener.listener1",
Host: "10.10.10.1",
Port: "9090",
Address: "echo:9090",
Expand Down Expand Up @@ -243,8 +243,8 @@ func TestBindings_Apply(t *testing.T) {
expected: expected{
tcpListeners: qdr.TcpEndpointMap{},
tcpConnectors: qdr.TcpEndpointMap{
"connector1@10.10.10.1": {
Name: "connector1@10.10.10.1",
"connector.connector1@10.10.10.1": {
Name: "connector.connector1@10.10.10.1",
Host: "10.10.10.1",
Port: "9090",
Address: "echo:9090",
Expand Down Expand Up @@ -294,8 +294,8 @@ func TestBindings_Apply(t *testing.T) {
expected: expected{
tcpListeners: qdr.TcpEndpointMap{},
tcpConnectors: qdr.TcpEndpointMap{
"connector1@10.10.10.1": {
Name: "connector1@10.10.10.1",
"connector.connector1@10.10.10.1": {
Name: "connector.connector1@10.10.10.1",
Host: "10.10.10.1",
Port: "9090",
Address: "echo:9090",
Expand Down Expand Up @@ -350,16 +350,16 @@ func TestBindings_Apply(t *testing.T) {
expected: expected{
tcpListeners: qdr.TcpEndpointMap{},
tcpConnectors: qdr.TcpEndpointMap{
"connector1@11.5.6.21": {
Name: "connector1@11.5.6.21",
"connector.connector1@11.5.6.21": {
Name: "connector.connector1@11.5.6.21",
Host: "11.5.6.21",
Port: "9090",
Address: "echo:9090",
SiteId: "site-1",
ProcessID: "pod1",
},
"connector1@11.5.6.22": {
Name: "connector1@11.5.6.22",
"connector.connector1@11.5.6.22": {
Name: "connector.connector1@11.5.6.22",
Host: "11.5.6.22",
Port: "9090",
Address: "echo:9090",
Expand Down Expand Up @@ -399,8 +399,8 @@ func TestBindings_Apply(t *testing.T) {
},
expected: expected{
tcpListeners: qdr.TcpEndpointMap{
"listener1": {
Name: "listener1",
"listener.listener1": {
Name: "listener.listener1",
Host: "my-host",
Port: "5678",
Address: "echo:9090",
Expand Down Expand Up @@ -440,8 +440,8 @@ func TestBindings_Apply(t *testing.T) {
},
expected: expected{
tcpListeners: qdr.TcpEndpointMap{
"listener1": {
Name: "listener1",
"listener.listener1": {
Name: "listener.listener1",
Host: "10.10.10.1",
Port: "9090",
Address: "foo",
Expand Down Expand Up @@ -482,8 +482,8 @@ func TestBindings_Apply(t *testing.T) {
expected: expected{
tcpListeners: qdr.TcpEndpointMap{},
tcpConnectors: qdr.TcpEndpointMap{
"connector1@10.10.10.1": {
Name: "connector1@10.10.10.1",
"connector.connector1@10.10.10.1": {
Name: "connector.connector1@10.10.10.1",
Host: "10.10.10.1",
Port: "9090",
Address: "foo",
Expand Down
6 changes: 3 additions & 3 deletions internal/site/connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ import (

func UpdateBridgeConfigForConnector(siteId string, connector *skupperv2alpha1.Connector, config *qdr.BridgeConfig) {
if connector.Spec.Host != "" {
updateBridgeConfigForConnector(connector.Name+"@"+connector.Spec.Host, siteId, connector, connector.Spec.Host, "", connector.Spec.RoutingKey, config)
updateBridgeConfigForConnector(qdr.TcpConnectorNamePrefix+connector.Name+"@"+connector.Spec.Host, siteId, connector, connector.Spec.Host, "", connector.Spec.RoutingKey, config)
}
}

func UpdateBridgeConfigForConnectorToPod(siteId string, connector *skupperv2alpha1.Connector, pod skupperv2alpha1.PodDetails, addQualifiedAddress bool, config *qdr.BridgeConfig) bool {
updated := false
if updateBridgeConfigForConnector(connector.Name+"@"+pod.IP, siteId, connector, pod.IP, pod.UID, connector.Spec.RoutingKey, config) {
if updateBridgeConfigForConnector(qdr.TcpConnectorNamePrefix+connector.Name+"@"+pod.IP, siteId, connector, pod.IP, pod.UID, connector.Spec.RoutingKey, config) {
updated = true
}
if addQualifiedAddress {
if updateBridgeConfigForConnector(connector.Name+"@"+pod.Name, siteId, connector, pod.IP, pod.UID, connector.Spec.RoutingKey+"."+pod.Name, config) {
if updateBridgeConfigForConnector(qdr.TcpConnectorNamePrefix+connector.Name+"@"+pod.Name, siteId, connector, pod.IP, pod.UID, connector.Spec.RoutingKey+"."+pod.Name, config) {
updated = true
}
}
Expand Down
2 changes: 1 addition & 1 deletion internal/site/listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ func UpdateBridgeConfigForListener(siteId string, listener *skupperv2alpha1.List
}

func UpdateBridgeConfigForListenerWithHostAndPort(siteId string, listener *skupperv2alpha1.Listener, host string, port int, config *qdr.BridgeConfig) {
name := listener.Name
name := qdr.TcpListenerNamePrefix + listener.Name
if listener.Spec.Type == "tcp" || listener.Spec.Type == "" {
config.AddTcpListener(qdr.TcpEndpoint{
Name: name,
Expand Down