Skip to content

Commit bd12123

Browse files
TG-598 Add route metrics and healthz paths (#197)
* TG-598 Add route metrics and healthz paths * TG-598 Refactor routing metrics paths Co-authored-by: Filippo Morelli <filippo@20tab.com>
1 parent 500a816 commit bd12123

File tree

7 files changed

+170
-7
lines changed

7 files changed

+170
-7
lines changed

{{cookiecutter.project_dirname}}/terraform/environment/digitalocean-k8s/main.tf

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,23 @@ module "routing" {
184184
monitoring_subdomain = var.monitoring_subdomain
185185
}
186186

187+
188+
/* Routing Metrics */
189+
190+
module "metrics" {
191+
count = var.stack_slug == "main" ? 1 : 0
192+
193+
source = "../modules/kubernetes/metrics"
194+
195+
project_domain = var.project_domain
196+
197+
basic_auth_enabled = var.basic_auth_enabled
198+
basic_auth_username = var.basic_auth_username
199+
basic_auth_password = var.basic_auth_password
200+
201+
tls_secret_name = module.routing.tls_secret_name
202+
}
203+
187204
/* Secrets */
188205

189206
resource "kubernetes_secret_v1" "regcred" {
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
locals {
2+
basic_auth_ready = alltrue(
3+
[
4+
var.basic_auth_enabled,
5+
var.basic_auth_username != "",
6+
var.basic_auth_password != ""
7+
]
8+
)
9+
}
10+
11+
terraform {
12+
required_providers {
13+
kubernetes = {
14+
source = "hashicorp/kubernetes"
15+
version = "2.9.0"
16+
}
17+
}
18+
}
19+
20+
/* Metrics Ingress Route */
21+
22+
resource "kubernetes_secret_v1" "metrics_basic_auth" {
23+
count = local.basic_auth_ready ? 1 : 0
24+
25+
metadata {
26+
name = "metrics-basic-auth"
27+
namespace = "kube-system"
28+
}
29+
30+
data = {
31+
username = var.basic_auth_username
32+
password = var.basic_auth_password
33+
}
34+
35+
type = "kubernetes.io/basic-auth"
36+
}
37+
38+
resource "kubernetes_manifest" "metrics_basic_auth_middleware" {
39+
count = local.basic_auth_ready ? 1 : 0
40+
41+
manifest = {
42+
apiVersion = "traefik.containo.us/v1alpha1"
43+
kind = "Middleware"
44+
metadata = {
45+
name = "metrics-basic-auth-middleware"
46+
namespace = "kube-system"
47+
}
48+
spec = {
49+
basicAuth = {
50+
removeHeader = true
51+
secret = kubernetes_secret_v1.metrics_basic_auth[0].metadata[0].name
52+
}
53+
}
54+
}
55+
}
56+
57+
resource "kubernetes_manifest" "metrics_ingress_route" {
58+
59+
manifest = {
60+
apiVersion = "traefik.containo.us/v1alpha1"
61+
kind = "IngressRoute"
62+
metadata = {
63+
name = "metrics-ingress-route"
64+
namespace = "kube-system"
65+
}
66+
spec = merge(
67+
{
68+
entryPoints = var.tls_secret_name != "" ? ["websecure"] : ["web"]
69+
routes = concat(
70+
local.basic_auth_ready ? [
71+
{
72+
kind = "Rule"
73+
match = "Host(`${var.project_domain}`) && PathPrefix(`/metrics`)"
74+
middlewares = [{ "name" : "metrics-basic-auth-middleware" }]
75+
services = [
76+
{
77+
name = "kube-state-metrics"
78+
port = 8080
79+
}
80+
]
81+
}] : [],
82+
[{
83+
kind = "Rule"
84+
match = "Host(`${var.project_domain}`) && PathPrefix(`/healthz`)"
85+
middlewares = []
86+
services = [
87+
{
88+
name = "kube-state-metrics"
89+
port = 8080
90+
}
91+
]
92+
}
93+
])
94+
},
95+
var.tls_secret_name != "" ? {
96+
tls = {
97+
secretName = var.tls_secret_name
98+
}
99+
} : {}
100+
)
101+
}
102+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
variable "basic_auth_password" {
2+
description = "The basic_auth password."
3+
type = string
4+
sensitive = true
5+
default = ""
6+
}
7+
8+
variable "basic_auth_username" {
9+
description = "The basic_auth username."
10+
type = string
11+
default = ""
12+
}
13+
14+
variable "project_domain" {
15+
description = "The project domain."
16+
type = string
17+
}
18+
19+
variable "tls_secret_name" {
20+
description = "The tls secret name"
21+
type = string
22+
default = ""
23+
}

{{cookiecutter.project_dirname}}/terraform/environment/modules/kubernetes/routing/main.tf

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
locals {
2-
basic_auth_enabled = alltrue(
2+
basic_auth_ready = alltrue(
33
[
44
var.basic_auth_enabled,
55
var.basic_auth_username != "",
@@ -12,11 +12,13 @@ locals {
1212

1313
traefik_hosts = join(", ", [for i in local.domains : "`${i}`"])
1414

15-
base_middlewares = local.basic_auth_enabled ? [{ "name" : "traefik-basic-auth-middleware" }] : []
15+
base_middlewares = local.basic_auth_ready ? [{ "name" : "traefik-basic-auth-middleware" }] : []
1616

1717
letsencrypt_enabled = var.letsencrypt_certificate_email != ""
1818
manual_certificate_enabled = var.tls_certificate_crt != "" && var.tls_certificate_key != ""
1919
tls_enabled = local.manual_certificate_enabled || local.letsencrypt_enabled
20+
21+
tls_secret_name = local.tls_enabled ? "tls-certificate" : ""
2022
}
2123

2224
terraform {
@@ -31,7 +33,7 @@ terraform {
3133
/* Basic Auth */
3234

3335
resource "kubernetes_secret_v1" "traefik_basic_auth" {
34-
count = local.basic_auth_enabled ? 1 : 0
36+
count = local.basic_auth_ready ? 1 : 0
3537

3638
metadata {
3739
name = "basic-auth"
@@ -47,7 +49,7 @@ resource "kubernetes_secret_v1" "traefik_basic_auth" {
4749
}
4850

4951
resource "kubernetes_manifest" "traefik_basic_auth_middleware" {
50-
count = local.basic_auth_enabled ? 1 : 0
52+
count = local.basic_auth_ready ? 1 : 0
5153

5254
manifest = {
5355
"apiVersion" = "traefik.containo.us/v1alpha1"
@@ -92,7 +94,7 @@ resource "kubernetes_secret_v1" "tls" {
9294
count = local.manual_certificate_enabled ? 1 : 0
9395

9496
metadata {
95-
name = "tls-certificate"
97+
name = local.tls_secret_name
9698
namespace = var.namespace
9799
}
98100

@@ -148,7 +150,7 @@ resource "kubernetes_manifest" "certificate" {
148150
namespace = var.namespace
149151
}
150152
spec = {
151-
secretName = "tls-certificate"
153+
secretName = local.tls_secret_name
152154
issuerRef = {
153155
name = "letsencrypt"
154156
kind = "Issuer"
@@ -225,7 +227,7 @@ resource "kubernetes_manifest" "traefik_ingress_route" {
225227
},
226228
local.tls_enabled ? {
227229
tls = {
228-
secretName = "tls-certificate"
230+
secretName = local.tls_secret_name
229231
}
230232
} : {}
231233
)
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
output "tls_secret_name" {
2+
description = "The name of the TLS certificate Kubernetes secret."
3+
value = local.tls_secret_name
4+
}

{{cookiecutter.project_dirname}}/terraform/environment/other-k8s/main.tf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,20 @@ module "routing" {
114114
monitoring_subdomain = var.monitoring_subdomain
115115
}
116116

117+
/* Metrics */
118+
119+
module "metrics" {
120+
count = var.stack_slug == "main" ? 1 : 0
121+
122+
source = "../modules/kubernetes/metrics"
123+
124+
project_domain = var.project_domain
125+
126+
basic_auth_enabled = var.basic_auth_enabled
127+
basic_auth_username = var.basic_auth_username
128+
basic_auth_password = var.basic_auth_password
129+
}
130+
117131
/* Secrets */
118132

119133
resource "kubernetes_secret_v1" "regcred" {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{% if "environment" in cookiecutter.tfvars %}{% for item in cookiecutter.tfvars.environment|sort %}{{ item }}
22
{% endfor %}{% endif %}# database_connection_pool_size=1
33
# database_dumps_enabled=true
4+
# basic_auth_enabled=false
45
# backend_service_extra_traefik_middlewares=[]
56
# frontend_service_extra_traefik_middlewares=[]

0 commit comments

Comments
 (0)