Skip to content

Commit 18f106e

Browse files
authored
feat: each helm release has its own namespace (#164)
1 parent 4ef82bd commit 18f106e

18 files changed

+131
-213
lines changed

docs/FAQ.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,60 @@ module "test_namespace" {
152152
}
153153
```
154154

155+
## How to add more restrictions for Gitlab-Runner
156+
By default Gitlab-Runner can deploy into any namespaces. If you want to allow Gitlab-Runner to deploy only into specific namespaces, then do these:
157+
* Create new Service Account:
158+
```
159+
resource "kubernetes_service_account" "gitlab_runner" {
160+
metadata {
161+
name = "my-gitlab-runners-sa"
162+
namespace = module.gitlab_runner_namespace.name
163+
annotations = {
164+
"eks.amazonaws.com/role-arn" = module.aws_iam_gitlab_runner.role_arn
165+
}
166+
}
167+
automount_service_account_token = true
168+
}
169+
```
170+
* Create a new Kubernetes Role and RoleBinding. For example, these role and rolebinding will allow to deploy into dev namespace only:
171+
```
172+
resource "kubernetes_role" "dev" {
173+
metadata {
174+
name = "${local.name}-dev"
175+
namespace = "dev"
176+
}
177+
178+
rule {
179+
api_groups = ["", "apps", "extensions", "batch", "networking.k8s.io", "kubernetes-client.io"]
180+
resources = ["*"]
181+
verbs = ["*"]
182+
}
183+
}
184+
185+
resource "kubernetes_role_binding" "dev" {
186+
metadata {
187+
name = "${local.name}-dev"
188+
namespace = "dev"
189+
}
190+
191+
role_ref {
192+
api_group = "rbac.authorization.k8s.io"
193+
kind = "Role"
194+
name = kubernetes_role.dev.metadata.0.name
195+
}
196+
197+
subject {
198+
kind = "ServiceAccount"
199+
name = kubernetes_service_account.gitlab_runner.metadata.0.name
200+
namespace = module.gitlab_runner_namespace.name
201+
}
202+
}
203+
```
204+
* Set the name of a new created account in layer2-k8s/templates/gitlab-runner-values.yaml
205+
```
206+
...
207+
runners:
208+
serviceAccountName: my-gitlab-runners-sa
209+
image: ubuntu:18.04
210+
...
211+
```

terraform/layer2-k8s/eks-aws-loadbalancer-controller.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,19 @@ locals {
1313
})
1414
}
1515

16+
module "aws_load_balancer_controller_namespace" {
17+
source = "../modules/kubernetes-namespace"
18+
name = "aws-load-balancer-controller"
19+
}
20+
1621
resource "helm_release" "aws_loadbalancer_controller" {
1722
count = var.aws_loadbalancer_controller_enable ? 1 : 0
1823

1924
name = "aws-load-balancer-controller"
2025
chart = local.aws-load-balancer-controller.chart
2126
repository = local.aws-load-balancer-controller.repository
2227
version = local.aws-load-balancer-controller.chart_version
23-
namespace = module.ing_namespace.name
28+
namespace = module.aws_load_balancer_controller_namespace.name
2429
max_history = var.helm_release_history_size
2530

2631
values = [

terraform/layer2-k8s/eks-aws-node-termination-handler.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@ locals {
66
}
77
}
88

9+
module "aws_node_termination_handler_namespace" {
10+
source = "../modules/kubernetes-namespace"
11+
name = "aws-node-termination-handler"
12+
}
13+
914
resource "helm_release" "aws_node_termination_handler" {
1015
name = "aws-node-termination-handler"
1116
chart = local.aws-node-termination-handler.chart
1217
repository = local.aws-node-termination-handler.repository
1318
version = local.aws-node-termination-handler.chart_version
14-
namespace = module.sys_namespace.name
19+
namespace = module.aws_node_termination_handler_namespace.name
1520
wait = false
1621
max_history = var.helm_release_history_size
1722

terraform/layer2-k8s/eks-cert-manager-certificate.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ resource "helm_release" "certificate" {
2020
chart = local.cert-mananger-certificate.chart
2121
repository = local.cert-mananger-certificate.repository
2222
version = local.cert-mananger-certificate.chart_version
23-
namespace = module.ing_namespace.name
23+
namespace = module.ingress_nginx_namespace.name
2424
wait = false
2525
max_history = var.helm_release_history_size
2626

terraform/layer2-k8s/eks-cluster-autoscaler.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,17 @@ data "template_file" "cluster_autoscaler" {
1717
}
1818
}
1919

20+
module "cluster_autoscaler_namespace" {
21+
source = "../modules/kubernetes-namespace"
22+
name = "cluster-autoscaler"
23+
}
24+
2025
resource "helm_release" "cluster_autoscaler" {
2126
name = "cluster-autoscaler"
2227
chart = local.cluster-autoscaler.chart
2328
repository = local.cluster-autoscaler.repository
2429
version = local.cluster-autoscaler.chart_version
25-
namespace = module.sys_namespace.name
30+
namespace = module.cluster_autoscaler_namespace.name
2631
max_history = var.helm_release_history_size
2732

2833
values = [

terraform/layer2-k8s/eks-external-dns.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,17 @@ data "template_file" "external_dns" {
1616
}
1717
}
1818

19+
module "external_dns_namespace" {
20+
source = "../modules/kubernetes-namespace"
21+
name = "external-dns"
22+
}
23+
1924
resource "helm_release" "external_dns" {
2025
name = "external-dns"
2126
chart = local.external-dns.chart
2227
repository = local.external-dns.repository
2328
version = local.external-dns.chart_version
24-
namespace = module.dns_namespace.name
29+
namespace = module.external_dns_namespace.name
2530
max_history = var.helm_release_history_size
2631

2732
values = [

terraform/layer2-k8s/eks-external-secrets.tf

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,35 @@ data "template_file" "external_secrets" {
2020
}
2121
}
2222

23+
module "external_secrets_namespace" {
24+
source = "../modules/kubernetes-namespace"
25+
name = "external-secrets"
26+
}
27+
2328
resource "helm_release" "external_secrets" {
2429
name = "external-secrets"
2530
chart = local.external-secrets.chart
2631
repository = local.external-secrets.repository
2732
version = local.external-secrets.chart_version
28-
namespace = module.sys_namespace.name
33+
namespace = module.external_secrets_namespace.name
2934
max_history = var.helm_release_history_size
3035

3136
values = [
3237
data.template_file.external_secrets.rendered,
3338
]
3439
}
3540

41+
module "reloader_namespace" {
42+
source = "../modules/kubernetes-namespace"
43+
name = "reloader"
44+
}
45+
3646
resource "helm_release" "reloader" {
3747
name = "reloader"
3848
chart = local.reloader.chart
3949
repository = local.reloader.repository
4050
version = local.reloader.chart_version
41-
namespace = module.sys_namespace.name
51+
namespace = module.reloader_namespace.name
4252
wait = false
4353
max_history = var.helm_release_history_size
4454
}

terraform/layer2-k8s/eks-kube-prometheus-stack.tf

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ locals {
2626
})
2727
}
2828

29-
resource "random_string" "grafana_password" {
30-
length = 20
31-
special = true
29+
module "monitoring_namespace" {
30+
source = "../modules/kubernetes-namespace"
31+
name = "monitoring"
3232
}
3333

3434
resource "helm_release" "prometheus_operator" {
@@ -45,6 +45,11 @@ resource "helm_release" "prometheus_operator" {
4545
]
4646
}
4747

48+
resource "random_string" "grafana_password" {
49+
length = 20
50+
special = true
51+
}
52+
4853
module "aws_iam_grafana" {
4954
source = "../modules/aws-iam-eks-trusted"
5055

terraform/layer2-k8s/eks-loki-stack.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,17 @@ locals {
1616
})
1717
}
1818

19+
module "loki_namespace" {
20+
source = "../modules/kubernetes-namespace"
21+
name = "loki"
22+
}
23+
1924
resource "helm_release" "loki_stack" {
2025
name = "loki-stack"
2126
chart = local.loki-stack.chart
2227
repository = local.loki-stack.repository
2328
version = local.loki-stack.chart_version
24-
namespace = module.monitoring_namespace.name
29+
namespace = module.loki_namespace.name
2530
wait = false
2631
max_history = var.helm_release_history_size
2732

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,4 @@
1-
module "dns_namespace" {
2-
source = "../modules/kubernetes-namespace"
3-
name = "dns"
4-
}
5-
6-
module "ing_namespace" {
7-
source = "../modules/kubernetes-namespace"
8-
name = "ing"
9-
}
10-
11-
module "elk_namespace" {
12-
source = "../modules/kubernetes-namespace"
13-
name = "elk"
14-
}
15-
161
module "fargate_namespace" {
172
source = "../modules/kubernetes-namespace"
183
name = "fargate"
194
}
20-
21-
module "ci_namespace" {
22-
source = "../modules/kubernetes-namespace"
23-
name = "ci"
24-
}
25-
26-
module "sys_namespace" {
27-
source = "../modules/kubernetes-namespace"
28-
name = "sys"
29-
}
30-
31-
module "monitoring_namespace" {
32-
source = "../modules/kubernetes-namespace"
33-
name = "monitoring"
34-
}

0 commit comments

Comments
 (0)