blob: cfed91eeda5a6b630e0162d3d71b55cb288fcf7e [file] [log] [blame]
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +02001# kubectl create secret generic sso --from-literal=secret_key=$(pwgen 24 1) --from-literal=ldap_bind_password=...
2
Radek Pietruszewskif5844312023-10-27 22:41:18 +02003local kube = import "../../../kube/hscloud.libsonnet";
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +02004
5{
radexc995c212023-11-24 12:01:49 +01006 local top = self,
7 local cfg = top.cfg,
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +02008
9 cfg:: {
radex7a4c27d2023-11-24 13:20:10 +010010 name: 'sso',
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +020011 namespace: "sso",
Piotr Dobrowolskia13208b2022-04-30 00:31:25 +020012 image: "registry.k0.hswaw.net/informatic/sso-v2@sha256:1118effa697489028c3cd5a6786d3f94f16dbbe2810b1bf1b0f65ea15bac1914",
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +020013 domain: error "domain must be set",
14 database: {
15 host: error "database.host must be set",
16 name: error "database.name must be set",
17 username: error "database.username must be set",
18 port: 26257,
19 tlsSecret: error "database.tlsSecret must be set",
20 },
21 },
22
radex1439fde2023-11-24 12:22:22 +010023 secretRefs:: {
24 ldap_bind_password: { secretKeyRef: { name: "sso", key: "ldap_bind_password" } },
25 secret_key: { secretKeyRef: { name: "sso", key: "secret_key" } },
26 },
27
radexc995c212023-11-24 12:01:49 +010028 local ns = kube.Namespace(top.cfg.namespace),
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +020029
radex7a4c27d2023-11-24 13:20:10 +010030 deployment: ns.Contain(kube.Deployment(cfg.name)) {
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +020031 spec+: {
32 replicas: 1,
33 template+: {
34 spec+: {
35 volumes_: {
36 crdb: {
37 secret: {
38 secretName: cfg.database.tlsSecret,
39 defaultMode: std.parseOctal("0600"),
40 },
41 },
Piotr Dobrowolskia13208b2022-04-30 00:31:25 +020042 jwk: { secret: { secretName: "sso-jwk" } },
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +020043 tlscopy: kube.EmptyDirVolume(), # see initContainers_.secretCopy
44 },
45 securityContext: {
46 runAsUser: 100,
47 runAsGroup: 101,
48 fsGroup: 101,
49 },
50 initContainers_: {
51 # psycopg2 / libpq wants its TLS secret keys to be only
52 # readable by running process. As k8s exposes
53 # secrets/configmaps as symlinks, libpq gets confused
54 # and refuses to start, unless we dereference these into
55 # a local copy with proper permissions.
56 secretCopy: kube.Container("secret-copy") {
57 image: cfg.image,
58 command: ["sh", "-c", "cp -fv /tls-orig/* /tls && chmod 0400 /tls/*"],
59 volumeMounts_: {
60 crdb: { mountPath: "/tls-orig" },
61 tlscopy: { mountPath: "/tls" },
62 },
63 },
64 },
65 containers_: {
66 web: kube.Container("sso") {
67 image: cfg.image,
68 ports_: {
69 http: { containerPort: 5000 },
70 },
71 env_: {
72 DATABASE_URI: "cockroachdb://%s@%s:%d/%s?sslmode=require&sslrootcert=%s&sslcert=%s&sslkey=%s" % [
73 cfg.database.username,
74 cfg.database.host,
75 cfg.database.port,
76 cfg.database.name,
77 "/tls/ca.crt",
78 "/tls/tls.crt",
79 "/tls/tls.key",
80 ],
81
radex1439fde2023-11-24 12:22:22 +010082 LDAP_BIND_PASSWORD: top.secretRefs.ldap_bind_password,
83 SECRET_KEY: top.secretRefs.secret_key,
Piotr Dobrowolskia13208b2022-04-30 00:31:25 +020084 LOGGING_LEVEL: "INFO",
85
86 JWT_ALG: "RS256",
87 JWT_EXP: "600",
88
89 JWT_PUBLIC_KEYS: "/jwk/public.pem",
90 JWT_PRIVATE_KEY: "/jwk/private.pem",
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +020091 },
92 volumeMounts_: {
93 tlscopy: { mountPath: "/tls" },
Piotr Dobrowolskia13208b2022-04-30 00:31:25 +020094 jwk: { mountPath: "/jwk" },
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +020095 },
96 },
97 },
98 },
99 },
100 },
101 },
102
radex7a4c27d2023-11-24 13:20:10 +0100103 svc: ns.Contain(kube.Service(cfg.name)) {
radexc995c212023-11-24 12:01:49 +0100104 target:: top.deployment,
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +0200105 },
106
radex7a4c27d2023-11-24 13:20:10 +0100107 ingress: ns.Contain(kube.SimpleIngress(cfg.name)) {
Radek Pietruszewskif5844312023-10-27 22:41:18 +0200108 hosts:: [cfg.domain],
radexd45584a2023-11-24 12:51:57 +0100109 target:: top.svc,
Piotr Dobrowolskid6c97592020-10-10 18:26:25 +0200110 },
111}