feat: CertManager | update to latest version
Also improve pki
This commit is contained in:
@@ -6,7 +6,6 @@ import { Construct } from "constructs";
|
|||||||
|
|
||||||
type CertManagerOptions = {
|
type CertManagerOptions = {
|
||||||
provider: HelmProvider;
|
provider: HelmProvider;
|
||||||
version: string;
|
|
||||||
name: string;
|
name: string;
|
||||||
namespace: string;
|
namespace: string;
|
||||||
};
|
};
|
||||||
@@ -15,13 +14,12 @@ export class CertManager extends Construct {
|
|||||||
constructor(scope: Construct, id: string, options: CertManagerOptions) {
|
constructor(scope: Construct, id: string, options: CertManagerOptions) {
|
||||||
super(scope, id);
|
super(scope, id);
|
||||||
|
|
||||||
const { namespace, name, version, provider } = options;
|
const { namespace, name, provider } = options;
|
||||||
|
|
||||||
new Release(this, id, {
|
new Release(this, id, {
|
||||||
provider,
|
provider,
|
||||||
name,
|
name,
|
||||||
namespace,
|
namespace,
|
||||||
version,
|
|
||||||
repository: "https://charts.jetstack.io",
|
repository: "https://charts.jetstack.io",
|
||||||
chart: "cert-manager",
|
chart: "cert-manager",
|
||||||
createNamespace: true,
|
createNamespace: true,
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
crds:
|
crds:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
keep: true
|
||||||
prometheus:
|
prometheus:
|
||||||
enabled: true
|
enabled: true
|
||||||
webhook:
|
webhook:
|
||||||
timeoutSeconds: 4
|
timeoutSeconds: 4
|
||||||
|
enableCertificateOwnerRef: true
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ export class CoreServices extends TerraformStack {
|
|||||||
provider: helm,
|
provider: helm,
|
||||||
name: "cert-manager",
|
name: "cert-manager",
|
||||||
namespace,
|
namespace,
|
||||||
version: "1.18.2",
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,12 +52,9 @@ export class PKI extends TerraformStack {
|
|||||||
provider: kubernetes,
|
provider: kubernetes,
|
||||||
namespace,
|
namespace,
|
||||||
apiVersion: "cert-manager.io/v1",
|
apiVersion: "cert-manager.io/v1",
|
||||||
secretName: "root-secret",
|
rootSecretName: "root-secret",
|
||||||
|
intermediateSecretName: `${namespace}-ca-secret`,
|
||||||
commonName: "Homelab Root CA",
|
commonName: "Homelab Root CA",
|
||||||
privateKey: {
|
|
||||||
algorithm: "Ed25519",
|
|
||||||
size: 256,
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
new PublicIssuer(this, "public-issuer", {
|
new PublicIssuer(this, "public-issuer", {
|
||||||
|
|||||||
@@ -7,11 +7,8 @@ type PrivateIssuerOptions = {
|
|||||||
namespace: string;
|
namespace: string;
|
||||||
apiVersion: string;
|
apiVersion: string;
|
||||||
commonName: string;
|
commonName: string;
|
||||||
secretName: string;
|
rootSecretName: string;
|
||||||
privateKey: {
|
intermediateSecretName: string;
|
||||||
algorithm: "RSA" | "ECDSA" | "Ed25519";
|
|
||||||
size: number;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export class PrivateIssuer extends Construct {
|
export class PrivateIssuer extends Construct {
|
||||||
@@ -21,44 +18,41 @@ export class PrivateIssuer extends Construct {
|
|||||||
const {
|
const {
|
||||||
provider,
|
provider,
|
||||||
namespace,
|
namespace,
|
||||||
commonName,
|
|
||||||
privateKey,
|
|
||||||
secretName,
|
|
||||||
apiVersion,
|
apiVersion,
|
||||||
|
commonName,
|
||||||
|
rootSecretName,
|
||||||
|
intermediateSecretName,
|
||||||
} = options;
|
} = options;
|
||||||
|
|
||||||
// Self-signed ClusterIssuer for initial CA
|
//
|
||||||
new Manifest(this, "ca-issuer", {
|
// 1. Root CA (self-signed)
|
||||||
|
//
|
||||||
|
new Manifest(this, "root-ca-issuer", {
|
||||||
provider,
|
provider,
|
||||||
manifest: {
|
manifest: {
|
||||||
apiVersion,
|
apiVersion,
|
||||||
kind: "ClusterIssuer",
|
kind: "ClusterIssuer",
|
||||||
metadata: {
|
metadata: { name: "root-ca-selfsigned" },
|
||||||
name: "ca-issuer",
|
spec: { selfSigned: {} },
|
||||||
},
|
|
||||||
spec: {
|
|
||||||
selfSigned: {},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Self-signed CA Certificate
|
new Manifest(this, "root-ca", {
|
||||||
new Manifest(this, "selfsigned-ca", {
|
|
||||||
provider,
|
provider,
|
||||||
manifest: {
|
manifest: {
|
||||||
apiVersion,
|
apiVersion,
|
||||||
kind: "Certificate",
|
kind: "Certificate",
|
||||||
metadata: {
|
metadata: { name: "root-ca", namespace },
|
||||||
name: "selfsigned-ca",
|
|
||||||
namespace,
|
|
||||||
},
|
|
||||||
spec: {
|
spec: {
|
||||||
isCA: true,
|
isCA: true,
|
||||||
commonName,
|
commonName: `${commonName} Root CA`,
|
||||||
secretName,
|
secretName: rootSecretName,
|
||||||
privateKey,
|
privateKey: {
|
||||||
|
algorithm: "RSA",
|
||||||
|
size: 4096,
|
||||||
|
},
|
||||||
issuerRef: {
|
issuerRef: {
|
||||||
name: "ca-issuer",
|
name: "root-ca-selfsigned",
|
||||||
kind: "ClusterIssuer",
|
kind: "ClusterIssuer",
|
||||||
group: "cert-manager.io",
|
group: "cert-manager.io",
|
||||||
},
|
},
|
||||||
@@ -66,19 +60,55 @@ export class PrivateIssuer extends Construct {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// CA-based ClusterIssuer
|
//
|
||||||
|
// 2. Intermediate CA (signed by root CA)
|
||||||
|
//
|
||||||
|
new Manifest(this, "intermediate-ca-issuer", {
|
||||||
|
provider,
|
||||||
|
manifest: {
|
||||||
|
apiVersion,
|
||||||
|
kind: "ClusterIssuer",
|
||||||
|
metadata: { name: "root-ca-signer" },
|
||||||
|
spec: {
|
||||||
|
ca: { secretName: rootSecretName },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
new Manifest(this, "intermediate-ca", {
|
||||||
|
provider,
|
||||||
|
manifest: {
|
||||||
|
apiVersion,
|
||||||
|
kind: "Certificate",
|
||||||
|
metadata: { name: "intermediate-ca", namespace },
|
||||||
|
spec: {
|
||||||
|
isCA: true,
|
||||||
|
commonName: `${commonName} Intermediate CA`,
|
||||||
|
secretName: intermediateSecretName,
|
||||||
|
privateKey: {
|
||||||
|
algorithm: "ECDSA",
|
||||||
|
size: 384,
|
||||||
|
},
|
||||||
|
issuerRef: {
|
||||||
|
name: "root-ca-signer",
|
||||||
|
kind: "ClusterIssuer",
|
||||||
|
group: "cert-manager.io",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// 3. Final public cluster issuer (used by your apps)
|
||||||
|
//
|
||||||
new Manifest(this, "cluster-issuer", {
|
new Manifest(this, "cluster-issuer", {
|
||||||
provider,
|
provider,
|
||||||
manifest: {
|
manifest: {
|
||||||
apiVersion,
|
apiVersion,
|
||||||
kind: "ClusterIssuer",
|
kind: "ClusterIssuer",
|
||||||
metadata: {
|
metadata: { name: "cluster-issuer" },
|
||||||
name: "cluster-issuer",
|
|
||||||
},
|
|
||||||
spec: {
|
spec: {
|
||||||
ca: {
|
ca: { secretName: intermediateSecretName },
|
||||||
secretName,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -32,9 +32,10 @@ export class PrivateCertificate extends Certificate {
|
|||||||
kind: "ClusterIssuer",
|
kind: "ClusterIssuer",
|
||||||
},
|
},
|
||||||
privateKey: {
|
privateKey: {
|
||||||
algorithm: "Ed25519",
|
algorithm: "ECDSA",
|
||||||
size: 384,
|
size: 384,
|
||||||
},
|
},
|
||||||
|
usages: ["digital signature", "key encipherment", "server auth"],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user