Skip to content

Commit 3f0b753

Browse files
committed
Add K8s Cron Job to automatically renew certificates
1 parent e705ebe commit 3f0b753

File tree

5 files changed

+131
-0
lines changed

5 files changed

+131
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
resource "kubernetes_cron_job_v1" "automatic_certificate_regeneration" {
2+
metadata {
3+
name = "certificate-regeneration"
4+
namespace = "concourse"
5+
}
6+
spec {
7+
schedule = "@monthly"
8+
failed_jobs_history_limit = 2
9+
successful_jobs_history_limit = 2
10+
job_template {
11+
metadata {}
12+
spec {
13+
template {
14+
metadata {}
15+
spec {
16+
restart_policy = "OnFailure"
17+
container {
18+
name = "cert-regen"
19+
image = "yatzek/credhub-cli:2.9.0"
20+
image_pull_policy = "IfNotPresent"
21+
command = ["bash", "-c", "IFS=',' read -r -a CERTIFICATES <<< \"$CERTS_TO_RENEW\"; for cert in \"$${CERTIFICATES[@]}\"; do credhub regenerate -n \"$cert\"; done"]
22+
env {
23+
name = "CERTS_TO_RENEW"
24+
value = var.certificates_to_regenerate
25+
}
26+
env {
27+
name = "CREDHUB_SERVER"
28+
value = "https://credhub.concourse.svc.cluster.local:9000"
29+
}
30+
env {
31+
name = "CREDHUB_CA_CERT"
32+
value_from {
33+
secret_key_ref {
34+
key = "certificate"
35+
name = "credhub-root-ca"
36+
}
37+
}
38+
}
39+
env {
40+
name = "CREDHUB_CLIENT"
41+
value = "credhub_admin_client"
42+
}
43+
env {
44+
name = "CREDHUB_SECRET"
45+
value_from {
46+
secret_key_ref {
47+
key = "password"
48+
name = "credhub-admin-client-credentials"
49+
}
50+
}
51+
}
52+
}
53+
}
54+
}
55+
}
56+
}
57+
}
58+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
terraform {
2+
required_providers {
3+
kubernetes = {
4+
source = "hashicorp/kubernetes"
5+
}
6+
}
7+
}
8+
9+
provider "google" {
10+
project = var.project
11+
region = var.region
12+
zone = var.zone
13+
}
14+
15+
data "google_client_config" "provider" {}
16+
17+
data "google_container_cluster" "wg_ci" {
18+
project = var.project
19+
name = var.gke_name
20+
location = var.zone
21+
}
22+
23+
provider "kubernetes" {
24+
host = "https://${data.google_container_cluster.wg_ci.endpoint}"
25+
token = data.google_client_config.provider.access_token
26+
cluster_ca_certificate = base64decode(data.google_container_cluster.wg_ci.master_auth[0].cluster_ca_certificate)
27+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
variable "project" { nullable = false }
2+
variable "region" { nullable = false }
3+
variable "zone" { nullable = false }
4+
5+
variable "gke_name" { nullable = false }
6+
7+
variable "certificates_to_regenerate" { nullable = false }
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
locals {
2+
config = yamldecode(file("../config.yaml"))
3+
}
4+
5+
remote_state {
6+
backend = "gcs"
7+
generate = {
8+
path = "backend.tf"
9+
if_exists = "overwrite"
10+
}
11+
config = {
12+
bucket = "${local.config.gcs_bucket}"
13+
prefix = "${local.config.gcs_prefix}/automatic-certificate-regeneration"
14+
project = "${local.config.project}"
15+
location = "${local.config.region}"
16+
# use for uniform bucket-level access
17+
# (https://cloud.google.com/storage/docs/uniform-bucket-level-access)
18+
enable_bucket_policy_only = false
19+
}
20+
}
21+
22+
terraform {
23+
source = local.config.tf_modules.automatic_certificate_regeneration
24+
}
25+
26+
inputs = {
27+
project = local.config.project
28+
region = local.config.region
29+
zone = local.config.zone
30+
31+
gke_name = local.config.gke_name
32+
33+
certificates_to_regenerate = local.config.certificates_to_regenerate
34+
}

terragrunt/concourse-wg-ci-test/config.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ tf_modules:
4444
dr_restore: "../../..//terraform-modules/concourse/dr_restore"
4545
e2e_test: "../../..//terraform-modules/concourse/e2e_test"
4646
secret_rotation_postgresql: "../../..//terraform-modules/concourse/secret_rotation_postgresql"
47+
automatic_certificate_regeneration: "../../..//terraform-modules/concourse/automatic_certificate_regeneration"
4748

4849

4950
fly_team: main
@@ -122,3 +123,7 @@ wg_ci_cnrm_service_account_permissions: [
122123
"cloudsql.databases.list",
123124
"cloudsql.databases.update"
124125
]
126+
127+
# list of certificates that shall be automatically renewed every month
128+
# enter as one string with a comma-separated list of CredHub certificate names
129+
certificates_to_regenerate: "/concourse/main/test_cert"

0 commit comments

Comments
 (0)