@konfig.ts/sealed-secrets
v0.1.0
Published
SealedSecret CR backend for konfig.ts — shells out to kubeseal at render time and emits bitnami.com/v1alpha1 manifests.
Downloads
238
Maintainers
Readme
@konfig.ts/sealed-secrets
Sealed Secrets backend for
konfig.ts. Encrypts secret values with kubeseal at render time and emits a
SealedSecret CR that only the in-cluster controller can decrypt — so the
encrypted manifest is safe to commit to git.
Install
bun add @konfig.ts/sealed-secretsNeeds the kubeseal CLI on the machine that runs konfig build, plus the
controller's public cert — resolved from certPath, else $KUBESEAL_CERT.
Missing cert fails fast with KubesealCertMissing.
Usage
Bind a secret contract (Secret.define, from @konfig.ts/env) to the backend
and give it a source for the plaintext to seal:
import { SecretSource } from "@konfig.ts/env"
import { Secret } from "@konfig.ts/k8s"
import { SealedSecrets } from "@konfig.ts/sealed-secrets"
const dbCreds = Secret.define({
name: "db-creds",
namespace: "prod",
env: { url: "DATABASE_URL", password: "DATABASE_PASSWORD" }
})
const bound = Secret.bind({
secret: dbCreds,
backend: SealedSecrets.backend({ scope: "strict" }),
source: SecretSource.fromConfig({
keys: ["url", "password"],
envName: (k) => `DB_${k.toUpperCase()}`
})
})
// bound.manifest is the SealedSecret CR.At render time konfig resolves the source to plaintext (held only in
Redacted<string> in memory), builds a plain Secret, pipes it to kubeseal
over stdin, and emits the returned SealedSecret. The plaintext never lands on
disk.
Options
| Field | Default | Notes |
| ---------- | ---------------- | ---------------------------------------------------------------------------------------------- |
| scope | "strict" | strict = same name + namespace; namespace-wide = rename within ns; cluster-wide = any ns |
| certPath | $KUBESEAL_CERT | path to the sealed-secrets controller's public cert |
Internals
Backends implement the SecretBackend<N, K, RequiresSource> contract from
@konfig.ts/k8s; requiresSource: true makes source a compile-time
requirement. See the Environment section of
.docs/architecture.md.
Requirements
konfig.ts is built on Effect, currently a release candidate. Until Effect ships a stable 4.x, install a build from the rc line konfig.ts is built against:
effect@^4.0.0-rc.111— required by every package.@effect/platform-node@^4.0.0-rc.111— required only when you callrender()(the Node filesystem/subprocess entrypoint); manifest-only consumers can omit it (it is declared as an optional peer).
The range floats within the rc line on purpose: Effect's pre-release line makes breaking
changes between builds, so a looser range surfaces as ERESOLVE install conflicts. It
widens to ^4.x once Effect reaches a stable 4.x.
