Skip to content

Commit eaaa916

Browse files
committed
Merge branch '2.1.x'
2 parents 93c651d + 2e93b69 commit eaaa916

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClient.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi
6060

6161
private static final Log log = LogFactory.getLog(KubernetesInformerDiscoveryClient.class);
6262

63+
private static final String PRIMARY_PORT_NAME_LABEL_KEY = "primary-port-name";
64+
65+
private static final String SECURED_KEY = "secured";
66+
6367
private final SharedInformerFactory sharedInformerFactory;
6468

6569
private final Lister<V1Service> serviceLister;
@@ -146,6 +150,8 @@ private Stream<ServiceInstance> getServiceInstanceDetails(V1Service service, Str
146150
}
147151
final String primaryPortName = discoveredPrimaryPortName.orElse(this.properties.primaryPortName());
148152

153+
final boolean secured = isSecured(service);
154+
149155
return ep.getSubsets().stream().filter(subset -> subset.getPorts() != null && subset.getPorts().size() > 0) // safeguard
150156
.flatMap(subset -> {
151157
Map<String, String> metadata = new HashMap<>(svcMetadata);
@@ -168,11 +174,22 @@ private Stream<ServiceInstance> getServiceInstanceDetails(V1Service service, Str
168174
return addresses.stream()
169175
.map(addr -> new DefaultKubernetesServiceInstance(
170176
addr.getTargetRef() != null ? addr.getTargetRef().getUid() : "", serviceId,
171-
addr.getIp(), port, metadata, false, service.getMetadata().getNamespace(),
177+
addr.getIp(), port, metadata, secured, service.getMetadata().getNamespace(),
172178
service.getMetadata().getClusterName()));
173179
});
174180
}
175181

182+
private static boolean isSecured(V1Service service) {
183+
Optional<String> securedOpt = Optional.empty();
184+
if (service.getMetadata() != null && service.getMetadata().getAnnotations() != null) {
185+
securedOpt = Optional.ofNullable(service.getMetadata().getAnnotations().get(SECURED_KEY));
186+
}
187+
if (!securedOpt.isPresent() && service.getMetadata() != null && service.getMetadata().getLabels() != null) {
188+
securedOpt = Optional.ofNullable(service.getMetadata().getLabels().get(SECURED_KEY));
189+
}
190+
return Boolean.parseBoolean(securedOpt.orElse("false"));
191+
}
192+
176193
private int findEndpointPort(List<V1EndpointPort> endpointPorts, String primaryPortName, String serviceId) {
177194
if (endpointPorts.size() == 1) {
178195
return endpointPorts.get(0).getPort();

spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientTests.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.mockito.Mock;
3737
import org.mockito.junit.MockitoJUnitRunner;
3838

39+
import org.springframework.cloud.client.ServiceInstance;
3940
import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance;
4041
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
4142

@@ -51,6 +52,15 @@ public class KubernetesInformerDiscoveryClientTests {
5152
.metadata(new V1ObjectMeta().name("test-svc-1").namespace("namespace1"))
5253
.spec(new V1ServiceSpec().loadBalancerIP("1.1.1.1")).status(new V1ServiceStatus());
5354

55+
private static final V1Service testServiceSecuredAnnotation1 = new V1Service()
56+
.metadata(
57+
new V1ObjectMeta().name("test-svc-1").namespace("namespace1").putAnnotationsItem("secured", "true"))
58+
.spec(new V1ServiceSpec().loadBalancerIP("1.1.1.1")).status(new V1ServiceStatus());
59+
60+
private static final V1Service testServiceSecuredLabel1 = new V1Service()
61+
.metadata(new V1ObjectMeta().name("test-svc-1").namespace("namespace1").putLabelsItem("secured", "true"))
62+
.spec(new V1ServiceSpec().loadBalancerIP("1.1.1.1")).status(new V1ServiceStatus());
63+
5464
private static final V1Service testService2 = new V1Service()
5565
.metadata(new V1ObjectMeta().name("test-svc-1").namespace("namespace2"))
5666
.spec(new V1ServiceSpec().loadBalancerIP("1.1.1.1")).status(new V1ServiceStatus());
@@ -177,6 +187,37 @@ public void testDiscoveryInstancesWithServiceLabels() {
177187
false, "namespace1", null));
178188
}
179189

190+
@Test
191+
public void testDiscoveryInstancesWithSecuredServiceByAnnotations() {
192+
Lister<V1Service> serviceLister = setupServiceLister(testServiceSecuredAnnotation1);
193+
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpoints1);
194+
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true,
195+
Set.of(), true, 60, false, null, Set.of(), new HashMap<>(), null, null, 0);
196+
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
197+
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
198+
assertThat(discoveryClient.getServices().toArray())
199+
.containsOnly(testServiceSecuredAnnotation1.getMetadata().getName());
200+
ServiceInstance serviceInstance = discoveryClient
201+
.getInstances(testServiceSecuredAnnotation1.getMetadata().getName()).get(0);
202+
assertThat(serviceInstance.isSecure()).isTrue();
203+
}
204+
205+
@Test
206+
public void testDiscoveryInstancesWithSecuredServiceByLabels() {
207+
Lister<V1Service> serviceLister = setupServiceLister(testServiceSecuredLabel1);
208+
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpoints1);
209+
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true,
210+
Set.of(), true, 60, false, null, Set.of(), new HashMap<>(), null, null, 0);
211+
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
212+
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
213+
214+
assertThat(discoveryClient.getServices().toArray())
215+
.containsOnly(testServiceSecuredLabel1.getMetadata().getName());
216+
ServiceInstance serviceInstance = discoveryClient.getInstances(testServiceSecuredLabel1.getMetadata().getName())
217+
.get(0);
218+
assertThat(serviceInstance.isSecure()).isTrue();
219+
}
220+
180221
@Test
181222
public void testDiscoveryGetServicesOneNamespaceShouldWork() {
182223
Lister<V1Service> serviceLister = setupServiceLister(testService1, testService2);

0 commit comments

Comments
 (0)