certmanager
Renders cert-manager Certificates, Issuers, ClusterIssuers and trust-manager Bundles from inventory parameters.
- Latest
- 1.0.2 ·
- License
- Apache-2.0
- Owners
- Moep90
- Source
- github.com/kadet-hub/generators · 0 repo stars, shared by 35 generators
- Thumbs up
- 👍 0 on GitHub Discussions
- Popularity
- 18 · 532 pulls
Request a feature Report a problem
Badge
Show the latest listed version in your README. shields.io draws the badge from this page's badge.json, which every catalog build updates; once no version is listed, it reads "not listed".
[](https://kadet-hub.org/generators/certmanager/)
cert-manager Generator
Published on kadet-hub: pin a released version by digest from its catalog page.
Kapitan kadet generator for cert-manager and trust-manager resources. Built for cert-manager 1.21.2 (cert-manager.io/v1) and trust-manager 0.25.0 (trust.cert-manager.io/v1alpha1):
- Certificate: requests a certificate from an Issuer or ClusterIssuer and stores it in a Secret
- Issuer: namespaced certificate authority (ACME, CA, self-signed, Vault, …)
- ClusterIssuer: cluster-scoped certificate authority
- Bundle: trust-manager CA bundle synced into ConfigMaps or Secrets across namespaces
Short entries expand to the settings cert-manager and Let’s Encrypt recommend: Certificates rotate their private key, Let’s Encrypt issuers get the right directory URL, their own account key and an HTTP01 solver bound to one ingress class, and one ca_issuers entry bootstraps a private CA. The CA key Secrets and solver credentials belong in the kubernetes or external-secrets generator.
Usage
Kapitan Configuration
parameters:
kapitan:
dependencies:
- type: oci
source: ghcr.io/kadet-hub/certmanager@sha256:<digest>
output_path: lib/certmanager
compile:
- output_path: manifests/cert-manager/
input_type: kadet
output_type: yml
input_paths:
- lib/certmanagerInventory Contract
All keys live under parameters.generators.certmanager. Without that block the generator renders nothing.
| Key | Kind | Output key |
|---|---|---|
namespace |
Default namespace for Certificates and Issuers. Falls back to parameters.namespace, then default. |
|
certs.<name> |
Certificate | <namespace>/<name>-cert |
issuers.<name> |
Issuer | <namespace>/<name>-issuer |
clusterissuers.<name> |
ClusterIssuer | <name>-cissuer |
bundles.<name> |
Bundle | <name>-bundle |
ca_issuers.<name> |
ClusterIssuer, Certificate, ClusterIssuer | <name>-selfsigned-cissuer, <namespace>/<name>-cert, <name>-cissuer |
Every entry accepts these keys:
| Key | Description |
|---|---|
spec |
The resource spec, passed through. Required for Certificates and Bundles; Issuers and ClusterIssuers need spec or letsencrypt. |
name |
Overrides the map key in metadata.name and in the output key. |
namespace |
Certificate, Issuer and ca_issuers only. ClusterIssuer and Bundle are cluster-scoped; a Bundle selects its target namespaces in spec.target.namespaceSelector. |
type |
Entries without type or with type: certmanager render; any other value skips the entry, for resources managed elsewhere. |
Defaults and shorthands
Precedence is generator defaults, then spec (certificate for ca_issuers), then shorthands: a shorthand wins over the same field in spec and logs a warning, and both win over the defaults; maps merge, lists and values replace.
| Applies to | Input | Output | Source |
|---|---|---|---|
| Certificate | always | privateKey.rotationPolicy: Always |
Rotation of the private key: recommended on every Certificate. The controller default since 1.18 sits behind a feature gate (1.18 release notes), so the generator sets it explicitly. |
| Issuer, ClusterIssuer | letsencrypt: production or staging |
acme.server: https://acme-v02.api.letsencrypt.org/directory or https://acme-staging-v02.api.letsencrypt.org/directory |
Let’s Encrypt ACME endpoints, staging environment |
| Issuer, ClusterIssuer | email: <address> |
acme.email |
ACME issuer |
| Issuer, ClusterIssuer | http01_ingress_class: <class> |
acme.solvers: [{http01: {ingress: {ingressClassName: <class>}}}] |
HTTP01 ingressClassName: the recommended field; without a class every ingress controller serves the challenge. |
Issuer, ClusterIssuer with acme |
no privateKeySecretRef |
acme.privateKeySecretRef.name: <name>-account-key |
Any name works (ACME issuer); one Secret per issuer keeps staging and production apart, since Let’s Encrypt accounts are scoped per environment (staging environment). |
A ca_issuers.<name> entry renders the SelfSigned bootstrap of a CA issuer:
- ClusterIssuer
<name>-selfsignedwithselfSigned: {}. - Certificate
<name>withisCA: true,commonNamefromcommon_name(default<name>),secretName: <name>, an ECDSA P-256 key andissuerRefto<name>-selfsigned.certificateoverrides fields of this spec, for exampleduration,subjectorprivateKey.size. - ClusterIssuer
<name>withca.secretNameset to the Certificate’ssecretName. Certificates reference this one.
The Certificate goes to namespace, default cert-manager: a ClusterIssuer reads its Secret from the controller’s cluster resource namespace, so set namespace only when --cluster-resource-namespace differs. The root renews on cert-manager’s schedule with a new key; distribute trust from a copy of the root in a separate ConfigMap, as trust-manager recommends, not from the CA Secret.
Controller defaults are not emitted: duration 90 days, renewal at two thirds of the lifetime, revisionHistoryLimit: 1, the default key usages and an RSA 2048 key for leaf certificates (Certificate resource).
The compile fails with ValueError: certmanager ... when an entry lacks spec (or letsencrypt for issuers), letsencrypt is neither production nor staging, or a ca_issuers resource has the same output key as another entry.
Example
parameters:
namespace: apps
generators:
certmanager:
ca_issuers:
internal-ca:
common_name: Internal Root CA
clusterissuers:
letsencrypt-staging:
letsencrypt: staging
email: platform-team@example.com
http01_ingress_class: nginx
letsencrypt-prod:
letsencrypt: production
email: platform-team@example.com
http01_ingress_class: nginx
certs:
api-tls:
spec:
secretName: api-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- api.example.com
orders-db-tls:
spec:
secretName: orders-db-tls
issuerRef:
name: internal-ca
kind: ClusterIssuer
dnsNames:
- orders-db.apps.svc
bundles:
internal-ca-bundle:
spec:
sources:
- useDefaultCAs: true
- configMap:
name: internal-ca-root
key: ca.crt
target:
configMap:
key: ca-bundle.crt
namespaceSelector:
matchLabels:
trust-internal-ca: "true"This renders internal-ca-selfsigned-cissuer, cert-manager/internal-ca-cert, internal-ca-cissuer, letsencrypt-staging-cissuer, letsencrypt-prod-cissuer, apps/api-tls-cert, apps/orders-db-tls-cert and internal-ca-bundle-bundle. The internal-ca-root ConfigMap holds the copied root.
Versions
Add a version's inventory entry, then compile with the consumer workflow, which verifies the artifact and runs Kapitan in the sandbox.
Free of charge, as is and on a best-effort basis: use at your own risk, and review the compiled output before you apply it. Terms
This catalog was built from index serial 47. Set index_serial: 47 in .kapitan-sandbox.yaml and the consumer workflow refuses any older index, so a rolled-back index cannot bring back a yanked version.
Checks find known patterns; they do not prove a generator safe. What a listing covers
| Version | Built for (schema-checked) |
|---|---|
| 1.0.2 | cert-manager 1.21.2 trust-manager 0.25.0 |
| 1.0.1 | cert-manager 1.21.2 trust-manager 0.25.0 |
| 1.0.0 | cert-manager 1.21.2 trust-manager 0.25.0 |
1.0.2#
Inventory
parameters:
kapitan:
dependencies:
- type: oci
source: ghcr.io/kadet-hub/certmanager:1.0.2@sha256:ba7632e9e06a593fbe20e9fa6774139203d7df65992adff9db94779606888ad9
output_path: lib/certmanager
Verify
gh attestation verify \
oci://ghcr.io/kadet-hub/certmanager@sha256:ba7632e9e06a593fbe20e9fa6774139203d7df65992adff9db94779606888ad9 \
--owner kadet-hub \
--cert-identity https://github.com/kadet-hub/registry/.github/workflows/release.yml@refs/heads/main
Transparency log: Rekor entry 3249980629, in Sigstore's public, append-only log, so the attestation stays checkable independent of this site.
- Kapitan declared
- >=0.36.3,<0.37
- Kapitan checked
- 0.36.3
- Backends checked
- not recorded
- With --cache
- not recorded
- krab
- compatible
- Built for (schema-checked)
- cert-manager 1.21.2
trust-manager 0.25.0 - Source
- certmanager-v1.0.2 ·
e4891e8fd85ca0a19ebf361e8b54fd6473fd8a2f· certmanager - Binaries
- none
- Output capabilities
- none
- Digest
sha256:ba7632e9e06a593fbe20e9fa6774139203d7df65992adff9db94779606888ad9
Checks
Checked by the release run on , gate at 6f0242aa6a3c.
- Secrets gitleaks 8.30.1
No secret matched the marketplace's gitleaks rules. - Malware ClamAV 1.5.4
No file matched a ClamAV signature. - Malicious package heuristics GuardDog 3.2.0
No GuardDog threat rule matched. - Dangerous code Semgrep 1.180.0
No marketplace Semgrep rule matched, such as eval, subprocess or network calls. - Python errors Ruff 0.17.0
No syntax error or undefined name (Ruff, error rules only). - File tree tree_check.py
No symlink, executable or banned file; imports within the allowlist. - Sandboxed compile gVisor 20261005, Kapitan 0.36.3
The fixture compiled without network, with decoy credentials; no undeclared program ran, no decoy was read. - Output capabilities Conftest 0.71.1
The compiled output uses only the capabilities the manifest declares. - CI detection Kapitan 0.36.3
The output is the same with CI variables set.
Output diff
No output diff recorded: this version was published before the release run recorded one.
1.0.1#
Inventory
parameters:
kapitan:
dependencies:
- type: oci
source: ghcr.io/kadet-hub/certmanager:1.0.1@sha256:ee081b9155fbeb038e56c0a438f539c21df06b3a9a5e882500390abe1179a623
output_path: lib/certmanager
Verify
gh attestation verify \
oci://ghcr.io/kadet-hub/certmanager@sha256:ee081b9155fbeb038e56c0a438f539c21df06b3a9a5e882500390abe1179a623 \
--owner kadet-hub \
--cert-identity https://github.com/kadet-hub/registry/.github/workflows/release.yml@refs/heads/main
Transparency log: Rekor entry 3244063021, in Sigstore's public, append-only log, so the attestation stays checkable independent of this site.
- Kapitan declared
- >=0.36.3,<0.37
- Kapitan checked
- 0.36.3
- Backends checked
- not recorded
- With --cache
- not recorded
- krab
- compatible
- Built for (schema-checked)
- cert-manager 1.21.2
trust-manager 0.25.0 - Source
- certmanager-v1.0.1 ·
9166cb30e0ae4874bc8f229c6a6823eff7451d04· certmanager - Binaries
- none
- Output capabilities
- none
- Digest
sha256:ee081b9155fbeb038e56c0a438f539c21df06b3a9a5e882500390abe1179a623
Checks
Checked by the release run on , gate at cc653998a763.
- Secrets gitleaks 8.30.1
No secret matched the marketplace's gitleaks rules. - Malware ClamAV 1.5.4
No file matched a ClamAV signature. - Malicious package heuristics GuardDog 3.2.0
No GuardDog threat rule matched. - Dangerous code Semgrep 1.180.0
No marketplace Semgrep rule matched, such as eval, subprocess or network calls. - Python errors Ruff 0.17.0
No syntax error or undefined name (Ruff, error rules only). - File tree tree_check.py
No symlink, executable or banned file; imports within the allowlist. - Sandboxed compile gVisor 20261005, Kapitan 0.36.3
The fixture compiled without network, with decoy credentials; no undeclared program ran, no decoy was read. - Output capabilities Conftest 0.71.1
The compiled output uses only the capabilities the manifest declares. - CI detection Kapitan 0.36.3
The output is the same with CI variables set.
Output diff
No output diff recorded: this version was published before the release run recorded one.
1.0.0#
Inventory
parameters:
kapitan:
dependencies:
- type: oci
source: ghcr.io/kadet-hub/certmanager:1.0.0@sha256:380f4d9477cff958a194deecb0c049974e56e9c43371e152dcb23f154799f99d
output_path: lib/certmanager
Verify
gh attestation verify \
oci://ghcr.io/kadet-hub/certmanager@sha256:380f4d9477cff958a194deecb0c049974e56e9c43371e152dcb23f154799f99d \
--owner kadet-hub \
--cert-identity https://github.com/kadet-hub/registry/.github/workflows/release.yml@refs/heads/main
Transparency log: Rekor entry 3210093542, in Sigstore's public, append-only log, so the attestation stays checkable independent of this site.
- Kapitan declared
- >=0.36.3,<0.37
- Kapitan checked
- 0.36.3
- Backends checked
- not recorded
- With --cache
- not recorded
- krab
- compatible
- Built for (schema-checked)
- cert-manager 1.21.2
trust-manager 0.25.0 - Source
- certmanager-v1.0.0 ·
cd660d06c2e97a2bc842f0e75475f639a82f128d· certmanager - Binaries
- none
- Output capabilities
- none
- Digest
sha256:380f4d9477cff958a194deecb0c049974e56e9c43371e152dcb23f154799f99d
Checks
Checked by the release run on , gate at a6abb26ac69c.
- Secrets gitleaks 8.30.1
No secret matched the marketplace's gitleaks rules. - Malware ClamAV 1.5.4
No file matched a ClamAV signature. - Malicious package heuristics GuardDog 3.2.0
No GuardDog threat rule matched. - Dangerous code Semgrep 1.180.0
No marketplace Semgrep rule matched, such as eval, subprocess or network calls. - Python errors Ruff 0.17.0
No syntax error or undefined name (Ruff, error rules only). - File tree tree_check.py
No symlink, executable or banned file; imports within the allowlist. - Sandboxed compile gVisor 20261005, Kapitan 0.36.3
The fixture compiled without network, with decoy credentials; no undeclared program ran, no decoy was read. - Output capabilities Conftest 0.71.1
The compiled output uses only the capabilities the manifest declares. - CI detection Kapitan 0.36.3
The output is the same with CI variables set.
Output diff
No output diff recorded: this version was published before the release run recorded one.