Skip to content

Commit 1ae8688

Browse files
committed
docs: Certificate Defaulting with Kyverno
- Add a turotial using Kyverno to override Certificate defaults - YAML resources with public links for easy downloading - Add tutorial to main page list - Rewritten from the original draft to ensure it is a tutorial and flows well Signed-off-by: Peter Fiddes <[email protected]>
1 parent 5198acc commit 1ae8688

12 files changed

+768
-0
lines changed

.spelling

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,8 @@ v1.13.
634634
v1.12.5
635635
v1.12.6
636636
v1.12.7
637+
v1.14.0
638+
v1.14.X
637639
liveness
638640
apiservices
639641
arm64

content/docs/manifest.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,10 @@
578578
{
579579
"title": "Managing public trust in kubernetes with trust-manager",
580580
"path": "/docs/tutorials/getting-started-with-trust-manager/README.md"
581+
},
582+
{
583+
"title": "Setting default certificate values",
584+
"path": "/docs/tutorials/certificate-defaults/README.md"
581585
}
582586
]
583587
},

content/docs/tutorials/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ for you to learn from. Take a look!
2525
- [Securing an Istio service mesh with cert-manager](./istio-csr/istio-csr.md): Tutorial for
2626
securing an Istio service mesh using a cert-manager issuer.
2727
- [Obtaining SSL certificates with the ZeroSSL](./zerossl/zerossl.md): Tutorial describing usage of the ZeroSSL as external ACME server.
28+
- [Managing public trust in Kubernetes with trust-manager](./getting-started-with-trust-manager/README.md): Learn how to deploy and configure trust-manager to automatically distribute your approved Public CA configuration to your Kubernetes cluster.
29+
- [Learn how to set Certificate defaults automatically](./certificate-defaults/README.md): Learn how to use Kyverno `ClusterPolicy` to set default values for cert-manager `Certificates`.
2830

2931
### External Tutorials
3032

content/docs/tutorials/certificate-defaults/README.md

Lines changed: 580 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: cert-manager.io/v1
2+
kind: Certificate
3+
metadata:
4+
name: test-minimal
5+
namespace: default
6+
spec:
7+
dnsNames:
8+
- example.com
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
apiVersion: cert-manager.io/v1
2+
kind: Certificate
3+
metadata:
4+
name: test-revision-override
5+
namespace: default
6+
spec:
7+
dnsNames:
8+
- example.com
9+
issuerRef:
10+
group: cert-manager.io
11+
kind: ClusterIssuer
12+
name: not-my-corp-issuer
13+
privateKey:
14+
algorithm: RSA
15+
encoding: PKCS8
16+
rotationPolicy: Never
17+
size: 4096
18+
revisionHistoryLimit: 44
19+
secretName: test-revision-override-cert
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: cert-manager.io/v1
2+
kind: Certificate
3+
metadata:
4+
name: test-revision
5+
namespace: default
6+
spec:
7+
dnsNames:
8+
- example.com
9+
issuerRef:
10+
group: cert-manager.io
11+
kind: ClusterIssuer
12+
name: not-my-corp-issuer
13+
secretName: test-revision-cert
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
apiVersion: kyverno.io/v1
2+
kind: ClusterPolicy
3+
metadata:
4+
name: 0-mutate-certificate-defaults
5+
spec:
6+
failurePolicy: Fail
7+
rules:
8+
# Set a sane default for the history field if not already present
9+
- name: set-revisionHistoryLimit
10+
match:
11+
any:
12+
- resources:
13+
kinds:
14+
- Certificate
15+
mutate:
16+
patchStrategicMerge:
17+
spec:
18+
# +(...) This is the clever syntax for if not already set
19+
+(revisionHistoryLimit): 2
20+
# Set rotation to always if not already set
21+
- name: set-privateKey-rotationPolicy
22+
match:
23+
any:
24+
- resources:
25+
kinds:
26+
- Certificate
27+
mutate:
28+
patchStrategicMerge:
29+
spec:
30+
privateKey:
31+
+(rotationPolicy): Always
32+
# Set private key details for algorithm an size
33+
- name: set-privateKey-details
34+
match:
35+
any:
36+
- resources:
37+
kinds:
38+
- Certificate
39+
mutate:
40+
patchStrategicMerge:
41+
spec:
42+
privateKey:
43+
+(algorithm): ECDSA
44+
+(size): 521
45+
+(encoding): PKCS1
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
apiVersion: kyverno.io/v1
2+
kind: ClusterPolicy
3+
metadata:
4+
name: 1-mutate-certificate-required
5+
spec:
6+
rules:
7+
# Test if we can set a secretName when one is not provided
8+
- name: set-default-secret-name
9+
match:
10+
any:
11+
- resources:
12+
kinds:
13+
- Certificate
14+
mutate:
15+
patchStrategicMerge:
16+
spec:
17+
+(secretName): "{{request.object.metadata.name}}-cert"
18+
# Test if we can set a default issuerRef
19+
- name: set-default-issuer-ref
20+
match:
21+
any:
22+
- resources:
23+
kinds:
24+
- Certificate
25+
mutate:
26+
patchStrategicMerge:
27+
spec:
28+
+(issuerRef):
29+
name: our-corp-issuer
30+
kind: ClusterIssuer
31+
group: cert-manager.io
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
apiVersion: kyverno.io/v1
2+
kind: ClusterPolicy
3+
metadata:
4+
name: validate-certificate
5+
spec:
6+
rules:
7+
# Test from the kyverno examples to validate any subdomain of corp.com applied the correct issuer
8+
- name: restrict-corp-cert-issuer
9+
match:
10+
any:
11+
- resources:
12+
kinds:
13+
- Certificate
14+
validate:
15+
message: When requesting a cert for this domain, you must use our corporate issuer.
16+
pattern:
17+
spec:
18+
(dnsNames): ["*.corp.com"]
19+
issuerRef:
20+
name: our-corp-issuer
21+
kind: ClusterIssuer
22+
group: cert-manager.io
23+
validationFailureAction: Enforce
24+
background: true

0 commit comments

Comments
 (0)