Skip to content

Commit ed7859c

Browse files
committed
Kubernetes: added support for secret key references in env vars
1 parent 19904e1 commit ed7859c

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

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

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,11 @@
5050
import io.fabric8.kubernetes.api.model.ContainerPortBuilder;
5151
import io.fabric8.kubernetes.api.model.DoneablePod;
5252
import io.fabric8.kubernetes.api.model.EnvVar;
53+
import io.fabric8.kubernetes.api.model.EnvVarSourceBuilder;
5354
import io.fabric8.kubernetes.api.model.LocalObjectReference;
5455
import io.fabric8.kubernetes.api.model.Pod;
5556
import io.fabric8.kubernetes.api.model.PodSpec;
57+
import io.fabric8.kubernetes.api.model.SecretKeySelectorBuilder;
5658
import io.fabric8.kubernetes.api.model.SecurityContext;
5759
import io.fabric8.kubernetes.api.model.SecurityContextBuilder;
5860
import io.fabric8.kubernetes.api.model.Service;
@@ -84,6 +86,8 @@ public class KubernetesBackend extends AbstractContainerBackend {
8486
private static final String PARAM_POD = "pod";
8587
private static final String PARAM_SERVICE = "service";
8688

89+
private static final String SECRET_KEY_REF = "secretKeyRef";
90+
8791
private KubernetesClient kubeClient;
8892

8993
@Override
@@ -137,9 +141,24 @@ protected Container startContainer(ContainerSpec spec, Proxy proxy) throws Excep
137141

138142
List<EnvVar> envVars = new ArrayList<>();
139143
for (String envString : buildEnv(spec, proxy)) {
140-
int idx = envString.indexOf('=');
141-
if (idx == -1) log.warn("Invalid environment variable: " + envString);
142-
envVars.add(new EnvVar(envString.substring(0, idx), envString.substring(idx + 1), null));
144+
String[] e = envString.split("=");
145+
if (e.length > 2) e[1] = envString.substring(envString.indexOf('=') + 1);
146+
147+
if (e[1].toLowerCase().startsWith(SECRET_KEY_REF.toLowerCase())) {
148+
String[] ref = e[1].split(":");
149+
if (ref.length != 3) {
150+
log.warn(String.format("Invalid secret key reference: %s. Expected format: '%s:<name>:<key>'", envString, SECRET_KEY_REF));
151+
continue;
152+
}
153+
envVars.add(new EnvVar(e[0], null, new EnvVarSourceBuilder()
154+
.withSecretKeyRef(new SecretKeySelectorBuilder()
155+
.withName(ref[1])
156+
.withKey(ref[2])
157+
.build())
158+
.build()));
159+
} else {
160+
envVars.add(new EnvVar(e[0], e[1], null));
161+
}
143162
}
144163

145164
SecurityContext security = new SecurityContextBuilder()

0 commit comments

Comments
 (0)