Skip to content

Commit d343085

Browse files
committed
feat: inject env vars into pod spec via Krane
1 parent df024e6 commit d343085

File tree

5 files changed

+96
-56
lines changed

5 files changed

+96
-56
lines changed

apps/dashboard/gen/proto/krane/v1/deployment_pb.ts

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,15 @@
22
// @generated from file krane/v1/deployment.proto (package krane.v1, syntax proto3)
33
/* eslint-disable */
44

5-
import type { Message } from "@bufbuild/protobuf";
65
import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
76
import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
7+
import type { Message } from "@bufbuild/protobuf";
88

99
/**
1010
* Describes the file krane/v1/deployment.proto.
1111
*/
12-
export const file_krane_v1_deployment: GenFile =
13-
/*@__PURE__*/
14-
fileDesc(
15-
"ChlrcmFuZS92MS9kZXBsb3ltZW50LnByb3RvEghrcmFuZS52MSKPAQoRRGVwbG95bWVudFJlcXVlc3QSEQoJbmFtZXNwYWNlGAEgASgJEhUKDWRlcGxveW1lbnRfaWQYAiABKAkSDQoFaW1hZ2UYAyABKAkSEAoIcmVwbGljYXMYBCABKA0SFgoOY3B1X21pbGxpY29yZXMYBSABKA0SFwoPbWVtb3J5X3NpemVfbWliGAYgASgEIkoKF0NyZWF0ZURlcGxveW1lbnRSZXF1ZXN0Ei8KCmRlcGxveW1lbnQYASABKAsyGy5rcmFuZS52MS5EZXBsb3ltZW50UmVxdWVzdCJGChhDcmVhdGVEZXBsb3ltZW50UmVzcG9uc2USKgoGc3RhdHVzGAEgASgOMhoua3JhbmUudjEuRGVwbG95bWVudFN0YXR1cyJKChdVcGRhdGVEZXBsb3ltZW50UmVxdWVzdBIvCgpkZXBsb3ltZW50GAEgASgLMhsua3JhbmUudjEuRGVwbG95bWVudFJlcXVlc3QiKwoYVXBkYXRlRGVwbG95bWVudFJlc3BvbnNlEg8KB3BvZF9pZHMYASADKAkiQwoXRGVsZXRlRGVwbG95bWVudFJlcXVlc3QSEQoJbmFtZXNwYWNlGAEgASgJEhUKDWRlcGxveW1lbnRfaWQYAiABKAkiGgoYRGVsZXRlRGVwbG95bWVudFJlc3BvbnNlIkAKFEdldERlcGxveW1lbnRSZXF1ZXN0EhEKCW5hbWVzcGFjZRgBIAEoCRIVCg1kZXBsb3ltZW50X2lkGAIgASgJIj4KFUdldERlcGxveW1lbnRSZXNwb25zZRIlCglpbnN0YW5jZXMYAiADKAsyEi5rcmFuZS52MS5JbnN0YW5jZSJTCghJbnN0YW5jZRIKCgJpZBgBIAEoCRIPCgdhZGRyZXNzGAIgASgJEioKBnN0YXR1cxgDIAEoDjIaLmtyYW5lLnYxLkRlcGxveW1lbnRTdGF0dXMqlgEKEERlcGxveW1lbnRTdGF0dXMSIQodREVQTE9ZTUVOVF9TVEFUVVNfVU5TUEVDSUZJRUQQABIdChlERVBMT1lNRU5UX1NUQVRVU19QRU5ESU5HEAESHQoZREVQTE9ZTUVOVF9TVEFUVVNfUlVOTklORxACEiEKHURFUExPWU1FTlRfU1RBVFVTX1RFUk1JTkFUSU5HEAMymwIKEURlcGxveW1lbnRTZXJ2aWNlElkKEENyZWF0ZURlcGxveW1lbnQSIS5rcmFuZS52MS5DcmVhdGVEZXBsb3ltZW50UmVxdWVzdBoiLmtyYW5lLnYxLkNyZWF0ZURlcGxveW1lbnRSZXNwb25zZRJQCg1HZXREZXBsb3ltZW50Eh4ua3JhbmUudjEuR2V0RGVwbG95bWVudFJlcXVlc3QaHy5rcmFuZS52MS5HZXREZXBsb3ltZW50UmVzcG9uc2USWQoQRGVsZXRlRGVwbG95bWVudBIhLmtyYW5lLnYxLkRlbGV0ZURlcGxveW1lbnRSZXF1ZXN0GiIua3JhbmUudjEuRGVsZXRlRGVwbG95bWVudFJlc3BvbnNlQpgBCgxjb20ua3JhbmUudjFCD0RlcGxveW1lbnRQcm90b1ABWjZnaXRodWIuY29tL3Vua2V5ZWQvdW5rZXkvZ28vZ2VuL3Byb3RvL2tyYW5lL3YxO2tyYW5ldjGiAgNLWFiqAghLcmFuZS5WMcoCCEtyYW5lXFYx4gIUS3JhbmVcVjFcR1BCTWV0YWRhdGHqAglLcmFuZTo6VjFiBnByb3RvMw",
16-
);
12+
export const file_krane_v1_deployment: GenFile = /*@__PURE__*/
13+
fileDesc("ChlrcmFuZS92MS9kZXBsb3ltZW50LnByb3RvEghrcmFuZS52MSL7AQoRRGVwbG95bWVudFJlcXVlc3QSEQoJbmFtZXNwYWNlGAEgASgJEhUKDWRlcGxveW1lbnRfaWQYAiABKAkSDQoFaW1hZ2UYAyABKAkSEAoIcmVwbGljYXMYBCABKA0SFgoOY3B1X21pbGxpY29yZXMYBSABKA0SFwoPbWVtb3J5X3NpemVfbWliGAYgASgEEjoKCGVudl92YXJzGAcgAygLMigua3JhbmUudjEuRGVwbG95bWVudFJlcXVlc3QuRW52VmFyc0VudHJ5Gi4KDEVudlZhcnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIkoKF0NyZWF0ZURlcGxveW1lbnRSZXF1ZXN0Ei8KCmRlcGxveW1lbnQYASABKAsyGy5rcmFuZS52MS5EZXBsb3ltZW50UmVxdWVzdCJGChhDcmVhdGVEZXBsb3ltZW50UmVzcG9uc2USKgoGc3RhdHVzGAEgASgOMhoua3JhbmUudjEuRGVwbG95bWVudFN0YXR1cyJKChdVcGRhdGVEZXBsb3ltZW50UmVxdWVzdBIvCgpkZXBsb3ltZW50GAEgASgLMhsua3JhbmUudjEuRGVwbG95bWVudFJlcXVlc3QiKwoYVXBkYXRlRGVwbG95bWVudFJlc3BvbnNlEg8KB3BvZF9pZHMYASADKAkiQwoXRGVsZXRlRGVwbG95bWVudFJlcXVlc3QSEQoJbmFtZXNwYWNlGAEgASgJEhUKDWRlcGxveW1lbnRfaWQYAiABKAkiGgoYRGVsZXRlRGVwbG95bWVudFJlc3BvbnNlIkAKFEdldERlcGxveW1lbnRSZXF1ZXN0EhEKCW5hbWVzcGFjZRgBIAEoCRIVCg1kZXBsb3ltZW50X2lkGAIgASgJIj4KFUdldERlcGxveW1lbnRSZXNwb25zZRIlCglpbnN0YW5jZXMYAiADKAsyEi5rcmFuZS52MS5JbnN0YW5jZSJTCghJbnN0YW5jZRIKCgJpZBgBIAEoCRIPCgdhZGRyZXNzGAIgASgJEioKBnN0YXR1cxgDIAEoDjIaLmtyYW5lLnYxLkRlcGxveW1lbnRTdGF0dXMqlgEKEERlcGxveW1lbnRTdGF0dXMSIQodREVQTE9ZTUVOVF9TVEFUVVNfVU5TUEVDSUZJRUQQABIdChlERVBMT1lNRU5UX1NUQVRVU19QRU5ESU5HEAESHQoZREVQTE9ZTUVOVF9TVEFUVVNfUlVOTklORxACEiEKHURFUExPWU1FTlRfU1RBVFVTX1RFUk1JTkFUSU5HEAMymwIKEURlcGxveW1lbnRTZXJ2aWNlElkKEENyZWF0ZURlcGxveW1lbnQSIS5rcmFuZS52MS5DcmVhdGVEZXBsb3ltZW50UmVxdWVzdBoiLmtyYW5lLnYxLkNyZWF0ZURlcGxveW1lbnRSZXNwb25zZRJQCg1HZXREZXBsb3ltZW50Eh4ua3JhbmUudjEuR2V0RGVwbG95bWVudFJlcXVlc3QaHy5rcmFuZS52MS5HZXREZXBsb3ltZW50UmVzcG9uc2USWQoQRGVsZXRlRGVwbG95bWVudBIhLmtyYW5lLnYxLkRlbGV0ZURlcGxveW1lbnRSZXF1ZXN0GiIua3JhbmUudjEuRGVsZXRlRGVwbG95bWVudFJlc3BvbnNlQpgBCgxjb20ua3JhbmUudjFCD0RlcGxveW1lbnRQcm90b1ABWjZnaXRodWIuY29tL3Vua2V5ZWQvdW5rZXkvZ28vZ2VuL3Byb3RvL2tyYW5lL3YxO2tyYW5ldjGiAgNLWFiqAghLcmFuZS5WMcoCCEtyYW5lXFYx4gIUS3JhbmVcVjFcR1BCTWV0YWRhdGHqAglLcmFuZTo6VjFiBnByb3RvMw");
1714

1815
/**
1916
* @generated from message krane.v1.DeploymentRequest
@@ -48,14 +45,21 @@ export type DeploymentRequest = Message<"krane.v1.DeploymentRequest"> & {
4845
* @generated from field: uint64 memory_size_mib = 6;
4946
*/
5047
memorySizeMib: bigint;
48+
49+
/**
50+
* Environment variables to inject into the container.
51+
* Keys are variable names, values are the (decrypted) values.
52+
*
53+
* @generated from field: map<string, string> env_vars = 7;
54+
*/
55+
envVars: { [key: string]: string };
5156
};
5257

5358
/**
5459
* Describes the message krane.v1.DeploymentRequest.
5560
* Use `create(DeploymentRequestSchema)` to create a new message.
5661
*/
57-
export const DeploymentRequestSchema: GenMessage<DeploymentRequest> =
58-
/*@__PURE__*/
62+
export const DeploymentRequestSchema: GenMessage<DeploymentRequest> = /*@__PURE__*/
5963
messageDesc(file_krane_v1_deployment, 0);
6064

6165
/**
@@ -72,8 +76,7 @@ export type CreateDeploymentRequest = Message<"krane.v1.CreateDeploymentRequest"
7276
* Describes the message krane.v1.CreateDeploymentRequest.
7377
* Use `create(CreateDeploymentRequestSchema)` to create a new message.
7478
*/
75-
export const CreateDeploymentRequestSchema: GenMessage<CreateDeploymentRequest> =
76-
/*@__PURE__*/
79+
export const CreateDeploymentRequestSchema: GenMessage<CreateDeploymentRequest> = /*@__PURE__*/
7780
messageDesc(file_krane_v1_deployment, 1);
7881

7982
/**
@@ -90,8 +93,7 @@ export type CreateDeploymentResponse = Message<"krane.v1.CreateDeploymentRespons
9093
* Describes the message krane.v1.CreateDeploymentResponse.
9194
* Use `create(CreateDeploymentResponseSchema)` to create a new message.
9295
*/
93-
export const CreateDeploymentResponseSchema: GenMessage<CreateDeploymentResponse> =
94-
/*@__PURE__*/
96+
export const CreateDeploymentResponseSchema: GenMessage<CreateDeploymentResponse> = /*@__PURE__*/
9597
messageDesc(file_krane_v1_deployment, 2);
9698

9799
/**
@@ -108,8 +110,7 @@ export type UpdateDeploymentRequest = Message<"krane.v1.UpdateDeploymentRequest"
108110
* Describes the message krane.v1.UpdateDeploymentRequest.
109111
* Use `create(UpdateDeploymentRequestSchema)` to create a new message.
110112
*/
111-
export const UpdateDeploymentRequestSchema: GenMessage<UpdateDeploymentRequest> =
112-
/*@__PURE__*/
113+
export const UpdateDeploymentRequestSchema: GenMessage<UpdateDeploymentRequest> = /*@__PURE__*/
113114
messageDesc(file_krane_v1_deployment, 3);
114115

115116
/**
@@ -126,8 +127,7 @@ export type UpdateDeploymentResponse = Message<"krane.v1.UpdateDeploymentRespons
126127
* Describes the message krane.v1.UpdateDeploymentResponse.
127128
* Use `create(UpdateDeploymentResponseSchema)` to create a new message.
128129
*/
129-
export const UpdateDeploymentResponseSchema: GenMessage<UpdateDeploymentResponse> =
130-
/*@__PURE__*/
130+
export const UpdateDeploymentResponseSchema: GenMessage<UpdateDeploymentResponse> = /*@__PURE__*/
131131
messageDesc(file_krane_v1_deployment, 4);
132132

133133
/**
@@ -149,21 +149,20 @@ export type DeleteDeploymentRequest = Message<"krane.v1.DeleteDeploymentRequest"
149149
* Describes the message krane.v1.DeleteDeploymentRequest.
150150
* Use `create(DeleteDeploymentRequestSchema)` to create a new message.
151151
*/
152-
export const DeleteDeploymentRequestSchema: GenMessage<DeleteDeploymentRequest> =
153-
/*@__PURE__*/
152+
export const DeleteDeploymentRequestSchema: GenMessage<DeleteDeploymentRequest> = /*@__PURE__*/
154153
messageDesc(file_krane_v1_deployment, 5);
155154

156155
/**
157156
* @generated from message krane.v1.DeleteDeploymentResponse
158157
*/
159-
export type DeleteDeploymentResponse = Message<"krane.v1.DeleteDeploymentResponse"> & {};
158+
export type DeleteDeploymentResponse = Message<"krane.v1.DeleteDeploymentResponse"> & {
159+
};
160160

161161
/**
162162
* Describes the message krane.v1.DeleteDeploymentResponse.
163163
* Use `create(DeleteDeploymentResponseSchema)` to create a new message.
164164
*/
165-
export const DeleteDeploymentResponseSchema: GenMessage<DeleteDeploymentResponse> =
166-
/*@__PURE__*/
165+
export const DeleteDeploymentResponseSchema: GenMessage<DeleteDeploymentResponse> = /*@__PURE__*/
167166
messageDesc(file_krane_v1_deployment, 6);
168167

169168
/**
@@ -185,8 +184,7 @@ export type GetDeploymentRequest = Message<"krane.v1.GetDeploymentRequest"> & {
185184
* Describes the message krane.v1.GetDeploymentRequest.
186185
* Use `create(GetDeploymentRequestSchema)` to create a new message.
187186
*/
188-
export const GetDeploymentRequestSchema: GenMessage<GetDeploymentRequest> =
189-
/*@__PURE__*/
187+
export const GetDeploymentRequestSchema: GenMessage<GetDeploymentRequest> = /*@__PURE__*/
190188
messageDesc(file_krane_v1_deployment, 7);
191189

192190
/**
@@ -203,8 +201,7 @@ export type GetDeploymentResponse = Message<"krane.v1.GetDeploymentResponse"> &
203201
* Describes the message krane.v1.GetDeploymentResponse.
204202
* Use `create(GetDeploymentResponseSchema)` to create a new message.
205203
*/
206-
export const GetDeploymentResponseSchema: GenMessage<GetDeploymentResponse> =
207-
/*@__PURE__*/
204+
export const GetDeploymentResponseSchema: GenMessage<GetDeploymentResponse> = /*@__PURE__*/
208205
messageDesc(file_krane_v1_deployment, 8);
209206

210207
/**
@@ -231,8 +228,7 @@ export type Instance = Message<"krane.v1.Instance"> & {
231228
* Describes the message krane.v1.Instance.
232229
* Use `create(InstanceSchema)` to create a new message.
233230
*/
234-
export const InstanceSchema: GenMessage<Instance> =
235-
/*@__PURE__*/
231+
export const InstanceSchema: GenMessage<Instance> = /*@__PURE__*/
236232
messageDesc(file_krane_v1_deployment, 9);
237233

238234
/**
@@ -269,8 +265,7 @@ export enum DeploymentStatus {
269265
/**
270266
* Describes the enum krane.v1.DeploymentStatus.
271267
*/
272-
export const DeploymentStatusSchema: GenEnum<DeploymentStatus> =
273-
/*@__PURE__*/
268+
export const DeploymentStatusSchema: GenEnum<DeploymentStatus> = /*@__PURE__*/
274269
enumDesc(file_krane_v1_deployment, 0);
275270

276271
/**
@@ -286,7 +281,7 @@ export const DeploymentService: GenService<{
286281
methodKind: "unary";
287282
input: typeof CreateDeploymentRequestSchema;
288283
output: typeof CreateDeploymentResponseSchema;
289-
};
284+
},
290285
/**
291286
* GetDeployment
292287
*
@@ -296,7 +291,7 @@ export const DeploymentService: GenService<{
296291
methodKind: "unary";
297292
input: typeof GetDeploymentRequestSchema;
298293
output: typeof GetDeploymentResponseSchema;
299-
};
294+
},
300295
/**
301296
* DeleteDeployment
302297
*
@@ -306,5 +301,7 @@ export const DeploymentService: GenService<{
306301
methodKind: "unary";
307302
input: typeof DeleteDeploymentRequestSchema;
308303
output: typeof DeleteDeploymentResponseSchema;
309-
};
310-
}> = /*@__PURE__*/ serviceDesc(file_krane_v1_deployment, 0);
304+
},
305+
}> = /*@__PURE__*/
306+
serviceDesc(file_krane_v1_deployment, 0);
307+

go/apps/krane/backend/docker/deployment_create.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@ func (d *docker) CreateDeployment(ctx context.Context, req *connect.Request[kran
4747
cpuNanos := int64(deployment.GetCpuMillicores()) * 1_000_000 // Convert millicores to nanoseconds
4848
memoryBytes := int64(deployment.GetMemorySizeMib()) * 1024 * 1024 //nolint:gosec // Intentional conversion
4949

50+
// Build environment variables list
51+
env := []string{
52+
fmt.Sprintf("DEPLOYMENT_ID=%s", deployment.GetDeploymentId()),
53+
}
54+
for k, v := range deployment.GetEnvVars() {
55+
env = append(env, fmt.Sprintf("%s=%s", k, v))
56+
}
57+
5058
//nolint:exhaustruct // Docker SDK types have many optional fields
5159
containerConfig := &container.Config{
5260
Image: deployment.GetImage(),
@@ -55,9 +63,7 @@ func (d *docker) CreateDeployment(ctx context.Context, req *connect.Request[kran
5563
"unkey.managed.by": "krane",
5664
},
5765
ExposedPorts: exposedPorts,
58-
Env: []string{
59-
fmt.Sprintf("DEPLOYMENT_ID=%s", deployment.GetDeploymentId()),
60-
},
66+
Env: env,
6167
}
6268

6369
//nolint:exhaustruct // Docker SDK types have many optional fields

go/apps/krane/backend/kubernetes/deployment_create.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ func (k *k8s) CreateDeployment(ctx context.Context, req *connect.Request[kranev1
156156
Annotations: map[string]string{},
157157
},
158158
Spec: corev1.PodSpec{
159+
// Use a restricted service account with no API access
160+
ServiceAccountName: "customer-workload",
161+
AutomountServiceAccountToken: ptr.P(false),
159162

160163
ImagePullSecrets: func() []corev1.LocalObjectReference {
161164
// Only add imagePullSecrets if using Depot registry
@@ -179,6 +182,20 @@ func (k *k8s) CreateDeployment(ctx context.Context, req *connect.Request[kranev1
179182
Protocol: corev1.ProtocolTCP,
180183
},
181184
},
185+
Env: func() []corev1.EnvVar {
186+
envVars := req.Msg.GetDeployment().GetEnvVars()
187+
if len(envVars) == 0 {
188+
return nil
189+
}
190+
env := make([]corev1.EnvVar, 0, len(envVars))
191+
for k, v := range envVars {
192+
env = append(env, corev1.EnvVar{
193+
Name: k,
194+
Value: v,
195+
})
196+
}
197+
return env
198+
}(),
182199
Resources: corev1.ResourceRequirements{
183200
// nolint: exhaustive
184201
Requests: corev1.ResourceList{

go/gen/proto/krane/v1/deployment.pb.go

Lines changed: 36 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go/proto/krane/v1/deployment.proto

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ message DeploymentRequest {
2424
uint32 replicas = 4;
2525
uint32 cpu_millicores = 5;
2626
uint64 memory_size_mib = 6;
27+
28+
// Environment variables to inject into the container.
29+
// Keys are variable names, values are the (decrypted) values.
30+
map<string, string> env_vars = 7;
2731
}
2832

2933
message CreateDeploymentRequest {

0 commit comments

Comments
 (0)