Skip to content

Commit 8a0ffb8

Browse files
committed
Fix #32587: implement container-dns for k8s
1 parent 259236a commit 8a0ffb8

3 files changed

Lines changed: 44 additions & 0 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/backend/kubernetes/KubernetesBackend.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import io.fabric8.kubernetes.api.model.ObjectReferenceBuilder;
6060
import io.fabric8.kubernetes.api.model.Pod;
6161
import io.fabric8.kubernetes.api.model.PodBuilder;
62+
import io.fabric8.kubernetes.api.model.PodDNSConfigBuilder;
6263
import io.fabric8.kubernetes.api.model.PodSpec;
6364
import io.fabric8.kubernetes.api.model.Quantity;
6465
import io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder;
@@ -310,6 +311,11 @@ public Proxy startContainer(Authentication user, Container initialContainer, Con
310311

311312
PodSpec podSpec = new PodSpec();
312313
podSpec.setContainers(Collections.singletonList(containerBuilder.build()));
314+
if (spec.getDns().isPresent()) {
315+
podSpec.setDnsConfig(new PodDNSConfigBuilder()
316+
.addToNameservers(spec.getDns().getValue().toArray(new String[0]))
317+
.build());
318+
}
313319
podSpec.setVolumes(volumes);
314320
podSpec.setImagePullSecrets(imagePullSecrets);
315321

src/test/java/eu/openanalytics/containerproxy/test/proxy/TestIntegrationOnKube.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,6 +1503,35 @@ public void launchProxyWithAuthorizedAdditionalManifests() {
15031503
}
15041504
}
15051505

1506+
@Test
1507+
public void launchProxyWithDns() {
1508+
try (ContainerSetup k8s = new ContainerSetup("kubernetes")) {
1509+
String id = inst.client.startProxy("01_hello_dns");
1510+
Proxy proxy = inst.proxyService.getProxy(id);
1511+
1512+
PodList podList = k8s.client.pods().inNamespace(k8s.namespace).list();
1513+
Assertions.assertEquals(1, podList.getItems().size());
1514+
Pod pod = podList.getItems().get(0);
1515+
Assertions.assertEquals("Running", pod.getStatus().getPhase());
1516+
Assertions.assertEquals(k8s.namespace, pod.getMetadata().getNamespace());
1517+
Assertions.assertEquals("sp-pod-" + proxy.getId() + "-0", pod.getMetadata().getName());
1518+
Assertions.assertEquals(1, pod.getStatus().getContainerStatuses().size());
1519+
ContainerStatus container = pod.getStatus().getContainerStatuses().get(0);
1520+
Assertions.assertEquals(true, container.getReady());
1521+
Assertions.assertTrue(container.getImage().endsWith("openanalytics/shinyproxy-integration-test-app:latest"));
1522+
Assertions.assertFalse(pod.getSpec().getContainers().get(0).getSecurityContext().getPrivileged());
1523+
Assertions.assertEquals(List.of("9.9.9.9"), pod.getSpec().getDnsConfig().getNameservers());
1524+
1525+
inst.proxyService.stopProxy(null, proxy, true).run();
1526+
1527+
// all pods should be deleted
1528+
assertNoPods(k8s);
1529+
// all services should be deleted
1530+
assertNoServices(k8s);
1531+
}
1532+
}
1533+
1534+
15061535
private void assertNoPods(ContainerSetup k8s) {
15071536
boolean cleanedUp = Retrying.retry((c, m) -> {
15081537
List<Pod> pods1 = k8s.client.pods().inNamespace(k8s.namespace).list().getItems();

src/test/resources/application-test-kubernetes.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,15 @@ proxy:
837837
resources:
838838
requests:
839839
storage: 5Gi
840+
- id: 01_hello_dns
841+
container-specs:
842+
- image: "openanalytics/shinyproxy-integration-test-app"
843+
cmd: [ "R", "-e", "shinyproxy::run_01_hello()" ]
844+
dns:
845+
- 9.9.9.9
846+
port-mapping:
847+
- name: default
848+
port: 3838
840849

841850
appNamespaces:
842851
- itest-overridden

0 commit comments

Comments
 (0)