From aeccceea606bf589abc37c4a09cc11637f1e8c92 Mon Sep 17 00:00:00 2001 From: Max Shaposhnik Date: Thu, 30 Apr 2020 10:40:47 +0300 Subject: [PATCH] Do not create internal servers for public endpoints; --- .../server/KubernetesServerExposer.java | 48 +++++++++++-------- .../server/KubernetesServerExposerTest.java | 7 +++ 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/KubernetesServerExposer.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/KubernetesServerExposer.java index de3cef62ee..4a30320082 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/KubernetesServerExposer.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/KubernetesServerExposer.java @@ -186,7 +186,14 @@ public class KubernetesServerExposer { provisionServicesForDiscoverableServers(servers); - exposeNonSecureServers(internalServers, externalServers, unsecuredPorts); + Optional serviceOpt = createService(internalServers, unsecuredPorts); + + if (serviceOpt.isPresent()) { + Service service = serviceOpt.get(); + String serviceName = service.getMetadata().getName(); + k8sEnv.getServices().put(serviceName, service); + exposeNonSecureServers(serviceName, externalServers, unsecuredPorts); + } exposeSecureServers(secureServers, securedPorts); } @@ -254,29 +261,11 @@ public class KubernetesServerExposer { } private void exposeNonSecureServers( - Map internalServers, + String serviceName, Map externalServers, Map unsecuredPorts) throws InfrastructureException { - if (unsecuredPorts.isEmpty()) { - return; - } - - Map allNonSecureServers = new HashMap<>(internalServers); - allNonSecureServers.putAll(externalServers); - Service service = - new ServerServiceBuilder() - .withName(generate(SERVER_PREFIX, SERVER_UNIQUE_PART_SIZE) + '-' + machineName) - .withMachineName(machineName) - .withSelectorEntry(CHE_ORIGINAL_NAME_LABEL, pod.getMetadata().getName()) - .withPorts(new ArrayList<>(unsecuredPorts.values())) - .withServers(allNonSecureServers) - .build(); - - String serviceName = service.getMetadata().getName(); - k8sEnv.getServices().put(serviceName, service); - for (ServicePort servicePort : unsecuredPorts.values()) { // expose service port related external servers if exist Map matchedExternalServers = match(externalServers, servicePort); @@ -290,6 +279,25 @@ public class KubernetesServerExposer { } } + private Optional createService( + Map internalServers, Map unsecuredPorts) { + Map allInternalServers = new HashMap<>(internalServers); + if (unsecuredPorts.isEmpty()) { + return Optional.empty(); + } + + Service service = + new ServerServiceBuilder() + .withName(generate(SERVER_PREFIX, SERVER_UNIQUE_PART_SIZE) + '-' + machineName) + .withMachineName(machineName) + .withSelectorEntry(CHE_ORIGINAL_NAME_LABEL, pod.getMetadata().getName()) + .withPorts(new ArrayList<>(unsecuredPorts.values())) + .withServers(allInternalServers) + .build(); + + return Optional.of(service); + } + private void exposeSecureServers( Map securedServers, Map securedPorts) throws InfrastructureException { diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/KubernetesServerExposerTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/KubernetesServerExposerTest.java index d9ba7dd692..91dfea1425 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/KubernetesServerExposerTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/KubernetesServerExposerTest.java @@ -512,6 +512,13 @@ public class KubernetesServerExposerTest { Annotations.Deserializer serviceAnnotations = Annotations.newDeserializer(service.getMetadata().getAnnotations()); assertEquals(serviceAnnotations.machineName(), machineName); + // check that we did not create servers for public endpoints + assertFalse( + serviceAnnotations + .servers() + .keySet() + .stream() + .anyMatch(key -> expectedServers.containsKey(key))); verify(externalServerExposer) .expose(