Skip to content

Commit 7aecc97

Browse files
committedAug 6, 2022
EXO-6: [NEW] add kubernetes_deployment_v1, ingress, service - initial commit
1 parent faa7e8b commit 7aecc97

File tree

14 files changed

+232
-1
lines changed

14 files changed

+232
-1
lines changed
 

‎.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ crash.log
1212
# .tfvars files are managed as part of configuration and so should be included in
1313
# version control.
1414
#
15-
# example.tfvars
15+
local.tfvars
1616

1717
# Ignore override files as they are usually used to override resources locally and so
1818
# are not checked in

‎kubernetes/deployment_v1/main.tf

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
resource "kubernetes_deployment_v1" "kubernetes_deployment_v1" {
2+
metadata {
3+
name = var.name
4+
labels = {
5+
app = var.name
6+
name = var.name
7+
}
8+
}
9+
10+
spec {
11+
selector {
12+
match_labels = {
13+
app = var.name
14+
}
15+
}
16+
17+
template {
18+
metadata {
19+
labels = {
20+
app = var.name
21+
name = var.name
22+
}
23+
}
24+
25+
spec {
26+
27+
container {
28+
image = "${var.image}"
29+
image_pull_policy = "Always"
30+
name = var.name
31+
32+
resources {
33+
requests = {
34+
cpu = var.requests_cpu
35+
memory = var.requests_memory
36+
}
37+
}
38+
}
39+
}
40+
}
41+
}
42+
}

‎kubernetes/deployment_v1/variable.tf

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
variable "name" {
2+
type = string
3+
}
4+
5+
variable "image" {
6+
type = string
7+
}
8+
9+
variable "requests_cpu" {
10+
type = string
11+
}
12+
13+
variable "requests_memory" {
14+
type = string
15+
}

‎kubernetes/deployment_v1/versions.tf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
terraform {
2+
required_providers {
3+
kubernetes = {
4+
source = "hashicorp/kubernetes"
5+
}
6+
}
7+
}

‎kubernetes/ingress/main.tf

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
resource "kubernetes_ingress_v1" "generic-ingress" {
2+
for_each = toset(var.dns_names)
3+
metadata {
4+
name = "${var.name}-${each.value}"
5+
labels = {
6+
app = "${var.name}-${each.value}"
7+
}
8+
annotations = {
9+
"cert-manager.io/cluster-issuer": "letsencrypt-prod"
10+
"kubernetes.io/ingress.class" : "default"
11+
"haproxy.org/check" : "false" // todo: use http-check
12+
"haproxy.org/check-http" : "/health.txt"
13+
"haproxy.org/check-interval" : "10s"
14+
}
15+
}
16+
spec {
17+
rule {
18+
host = each.value
19+
http {
20+
path {
21+
path = "/"
22+
backend {
23+
service {
24+
name = var.name
25+
port {
26+
number = 80
27+
}
28+
}
29+
}
30+
}
31+
}
32+
}
33+
34+
tls {
35+
hosts = [each.value]
36+
secret_name = each.value
37+
}
38+
}
39+
}

‎kubernetes/ingress/variable.tf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
variable "name" {
2+
type = string
3+
}
4+
5+
variable "dns_names" {
6+
type = list(string)
7+
}

‎kubernetes/ingress/versions.tf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
terraform {
2+
required_providers {
3+
kubernetes = {
4+
source = "hashicorp/kubernetes"
5+
}
6+
}
7+
}

‎kubernetes/service/main.tf

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
resource "kubernetes_service" "ingress-service" {
2+
metadata {
3+
labels = {
4+
app = var.name
5+
}
6+
name = var.name
7+
}
8+
spec {
9+
port {
10+
port = 80
11+
protocol = "TCP"
12+
target_port = var.target_port
13+
}
14+
selector = {
15+
app = var.name
16+
}
17+
type = "NodePort"
18+
}
19+
}

‎kubernetes/service/variable.tf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
variable "name" {
2+
type = string
3+
}
4+
5+
variable "target_port" {
6+
type = number
7+
}

‎kubernetes/service/versions.tf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
terraform {
2+
required_providers {
3+
kubernetes = {
4+
source = "hashicorp/kubernetes"
5+
}
6+
}
7+
}

‎main.tf

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module "kubernetes-deployment-v1" {
2+
source = "./kubernetes/deployment_v1"
3+
image = var.image
4+
name = var.name
5+
requests_cpu = var.requests_cpu
6+
requests_memory = var.requests_memory
7+
}
8+
9+
module "kubernetes-service" {
10+
source = "./kubernetes/service"
11+
name = var.name
12+
target_port = var.target_port
13+
}
14+
15+
module "kubernetes-ingress" {
16+
source = "./kubernetes/ingress"
17+
dns_names = var.dns_names
18+
name = var.name
19+
}

‎provider.tf

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
provider "kubernetes" {
2+
host = var.host
3+
client_certificate = base64decode(var.client_certificate)
4+
client_key = base64decode(var.client_key)
5+
cluster_ca_certificate = base64decode(var.cluster_ca_certificate)
6+
}

‎variables.tf

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
variable "name" {
2+
type = string
3+
default = "deployment"
4+
}
5+
6+
variable "dns_names" {
7+
type = list(string)
8+
default = ["example.com"]
9+
}
10+
11+
variable "target_port" {
12+
type = number
13+
default = 80
14+
}
15+
16+
variable "image" {
17+
type = string
18+
default = "yeasy/simple-web"
19+
}
20+
21+
variable "requests_cpu" {
22+
default = "300m"
23+
}
24+
variable "requests_memory" {
25+
default = "64Mi"
26+
}
27+
28+
# kubectl
29+
variable "host" {
30+
description = "(Required) The hostname (in form of URI) of the Kubernetes API. Can be sourced from KUBE_HOST."
31+
type = string
32+
}
33+
34+
variable "client_certificate" {
35+
description = "(Required) PEM-encoded client certificate for TLS authentication. Can be sourced from KUBE_CLIENT_CERT_DATA."
36+
type = string
37+
}
38+
39+
variable "client_key" {
40+
description = "(Required) PEM-encoded client certificate key for TLS authentication. Can be sourced from KUBE_CLIENT_KEY_DATA."
41+
type = string
42+
}
43+
44+
variable "cluster_ca_certificate" {
45+
description = "(Required) PEM-encoded root certificates bundle for TLS authentication. Can be sourced from KUBE_CLUSTER_CA_CERT_DATA."
46+
type = string
47+
}

‎versions.tf

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
terraform {
2+
required_providers {
3+
kubernetes = {
4+
source = "hashicorp/kubernetes"
5+
version = "2.12.1"
6+
}
7+
}
8+
required_version = ">= 1.2.6"
9+
}

0 commit comments

Comments
 (0)