add Kyverno TLS secret sync + enhance renewal pipeline
Kyverno ClusterPolicy clones tls-secret from kyverno namespace to all namespaces with synchronize=true. Renewal pipeline now updates the source secret via kubectl, verifies cert validity, and sends Slack notification.
This commit is contained in:
parent
6a2bee93b5
commit
16cde1eab5
2 changed files with 101 additions and 0 deletions
72
stacks/kyverno/modules/kyverno/tls-secret-sync.tf
Normal file
72
stacks/kyverno/modules/kyverno/tls-secret-sync.tf
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
|
||||
# =============================================================================
|
||||
# TLS Certificate — Auto-sync to all namespaces
|
||||
# =============================================================================
|
||||
# Source wildcard cert (*.viktorbarzin.me) in kyverno namespace, cloned by
|
||||
# ClusterPolicy into every NS. Renewal pipeline updates this source secret,
|
||||
# Kyverno propagates to all namespaces within seconds.
|
||||
|
||||
resource "kubernetes_secret" "tls_secret" {
|
||||
metadata {
|
||||
name = "tls-secret"
|
||||
namespace = kubernetes_namespace.kyverno.metadata[0].name
|
||||
}
|
||||
type = "kubernetes.io/tls"
|
||||
data = {
|
||||
"tls.crt" = file("${path.root}/secrets/fullchain.pem")
|
||||
"tls.key" = file("${path.root}/secrets/privkey.pem")
|
||||
}
|
||||
}
|
||||
|
||||
resource "kubernetes_manifest" "sync_tls_secret" {
|
||||
manifest = {
|
||||
apiVersion = "kyverno.io/v1"
|
||||
kind = "ClusterPolicy"
|
||||
metadata = {
|
||||
name = "sync-tls-secret"
|
||||
}
|
||||
spec = {
|
||||
rules = [
|
||||
{
|
||||
name = "sync-tls-secret"
|
||||
match = {
|
||||
any = [
|
||||
{
|
||||
resources = {
|
||||
kinds = ["Namespace"]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
exclude = {
|
||||
any = [
|
||||
{
|
||||
resources = {
|
||||
namespaces = ["kube-system", "kube-public", "kube-node-lease"]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
generate = {
|
||||
apiVersion = "v1"
|
||||
kind = "Secret"
|
||||
name = "tls-secret"
|
||||
namespace = "{{request.object.metadata.name}}"
|
||||
synchronize = true
|
||||
clone = {
|
||||
namespace = "kyverno"
|
||||
name = "tls-secret"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
depends_on = [
|
||||
helm_release.kyverno,
|
||||
kubernetes_secret.tls_secret,
|
||||
kubernetes_cluster_role_binding.kyverno_admission_secret_manager,
|
||||
kubernetes_cluster_role_binding.kyverno_background_secret_manager,
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue