Skip to content

Commit 52f4106

Browse files
authored
Cleanup fabric8 loadbalancer mapper part 4 (#1609)
1 parent 74cef82 commit 52f4106

File tree

4 files changed

+32
-8
lines changed

4 files changed

+32
-8
lines changed

spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/ServicePortNameAndNumber.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
package org.springframework.cloud.kubernetes.commons.discovery;
1818

19+
import jakarta.annotation.Nullable;
20+
1921
/**
2022
* @author wind57
2123
*/
22-
public record ServicePortNameAndNumber(int portNumber, String portName) {
24+
public record ServicePortNameAndNumber(@Nullable Integer portNumber, @Nullable String portName) {
2325
}

spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/ServicePortSecureResolver.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ public boolean resolve(Input input) {
5454
String serviceName = input.serviceName();
5555
ServicePortNameAndNumber portData = input.portData();
5656

57+
Integer portNumber = portData.portNumber();
58+
5759
Optional<String> securedLabelValue = Optional.ofNullable(input.serviceLabels().get(SECURED));
5860
if (securedLabelValue.isPresent() && TRUTHY_STRINGS.contains(securedLabelValue.get())) {
5961
logEntry(serviceName, portData.portNumber(), "the service contains a true value for the 'secured' label");
@@ -67,7 +69,7 @@ public boolean resolve(Input input) {
6769
return true;
6870
}
6971

70-
if (properties.knownSecurePorts().contains(portData.portNumber())) {
72+
if (portNumber != null && properties.knownSecurePorts().contains(portData.portNumber())) {
7173
logEntry(serviceName, portData.portNumber(), "port is known to be a https port");
7274
return true;
7375
}

spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapper.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,14 @@
3030
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
3131
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance;
3232
import org.springframework.cloud.kubernetes.commons.discovery.ServiceMetadata;
33+
import org.springframework.cloud.kubernetes.commons.discovery.ServicePortNameAndNumber;
34+
import org.springframework.cloud.kubernetes.commons.discovery.ServicePortSecureResolver;
3335
import org.springframework.cloud.kubernetes.commons.loadbalancer.KubernetesLoadBalancerProperties;
3436
import org.springframework.cloud.kubernetes.commons.loadbalancer.KubernetesServiceInstanceMapper;
3537
import org.springframework.cloud.kubernetes.fabric8.Fabric8Utils;
3638

39+
import static org.springframework.cloud.kubernetes.commons.discovery.ServicePortSecureResolver.Input;
40+
3741
/**
3842
* Class for mapping Kubernetes Service object into {@link KubernetesServiceInstance}.
3943
*
@@ -50,10 +54,13 @@ public class Fabric8ServiceInstanceMapper implements KubernetesServiceInstanceMa
5054

5155
private final KubernetesDiscoveryProperties discoveryProperties;
5256

57+
private final ServicePortSecureResolver resolver;
58+
5359
Fabric8ServiceInstanceMapper(KubernetesLoadBalancerProperties properties,
5460
KubernetesDiscoveryProperties discoveryProperties) {
5561
this.properties = properties;
5662
this.discoveryProperties = discoveryProperties;
63+
resolver = new ServicePortSecureResolver(discoveryProperties);
5764
}
5865

5966
@Override
@@ -76,8 +83,9 @@ else if (ports.size() > 1 && Utils.isNotNullOrEmpty(properties.getPortName())) {
7683
}
7784
String host = KubernetesServiceInstanceMapper.createHost(service.getMetadata().getName(),
7885
service.getMetadata().getNamespace(), properties.getClusterDomain());
79-
boolean secure = KubernetesServiceInstanceMapper.isSecure(service.getMetadata().getLabels(),
80-
service.getMetadata().getAnnotations(), port.getName(), port.getPort());
86+
87+
boolean secure = secure(port, service);
88+
8189
return new DefaultKubernetesServiceInstance(meta.getUid(), meta.getName(), host, port.getPort(),
8290
serviceMetadata(service), secure);
8391
}
@@ -87,4 +95,11 @@ Map<String, String> serviceMetadata(Service service) {
8795
return DiscoveryClientUtils.serviceInstanceMetadata(PORTS_DATA, serviceMetadata, discoveryProperties);
8896
}
8997

98+
boolean secure(ServicePort port, Service service) {
99+
ObjectMeta metadata = service.getMetadata();
100+
ServicePortNameAndNumber portNameAndNumber = new ServicePortNameAndNumber(port.getPort(), port.getName());
101+
Input input = new Input(portNameAndNumber, metadata.getName(), metadata.getLabels(), metadata.getAnnotations());
102+
return resolver.resolve(input);
103+
}
104+
90105
}

spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapperTests.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,13 @@ void testMapperMultiplePorts() {
6666
void testMapperSecure() {
6767
KubernetesLoadBalancerProperties properties = new KubernetesLoadBalancerProperties();
6868
Service service = buildService("test", "test-namespace", "abc", 443, null, Map.of());
69-
KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties,
70-
KubernetesDiscoveryProperties.DEFAULT).map(service);
69+
70+
KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(true, false, Set.of(),
71+
true, 60, false, null, Set.of(443, 8443), Map.of(), null,
72+
KubernetesDiscoveryProperties.Metadata.DEFAULT, 0, false, false, null);
73+
74+
KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties, discoveryProperties)
75+
.map(service);
7176
Assertions.assertNotNull(instance);
7277
Assertions.assertEquals("test", instance.getServiceId());
7378
Assertions.assertEquals("abc", instance.getInstanceId());
@@ -78,8 +83,8 @@ void testMapperSecure() {
7883
void testMapperSecureNullLabelsAndAnnotations() {
7984
KubernetesLoadBalancerProperties properties = new KubernetesLoadBalancerProperties();
8085
KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(true, true, Set.of(),
81-
true, 60, false, null, Set.of(), Map.of(), null, KubernetesDiscoveryProperties.Metadata.DEFAULT, 0,
82-
false);
86+
true, 60, false, null, Set.of(443, 8443), Map.of(), null,
87+
KubernetesDiscoveryProperties.Metadata.DEFAULT, 0, false);
8388
List<ServicePort> ports = new ArrayList<>();
8489
ports.add(new ServicePortBuilder().withPort(443).build());
8590
Service service = buildService("test", "test-namespace", "abc", ports, null, null);

0 commit comments

Comments
 (0)