Compare commits
2 Commits
f5f670e5f2
...
ee23406f49
Author | SHA1 | Date | |
---|---|---|---|
ee23406f49 | |||
6e4982fffd |
58
infra/vultr-kubernetes/admin-services.tf
Normal file
58
infra/vultr-kubernetes/admin-services.tf
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
resource kubernetes_namespace admin-servers {
|
||||||
|
metadata {
|
||||||
|
name = var.admin_services.namespace
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource kubernetes_pod admin {
|
||||||
|
for_each = var.admin_services.configs
|
||||||
|
|
||||||
|
metadata {
|
||||||
|
name = each.key
|
||||||
|
namespace = var.admin_services.namespace
|
||||||
|
labels = {
|
||||||
|
app = each.key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
spec {
|
||||||
|
container {
|
||||||
|
image = each.value.image
|
||||||
|
name = coalesce(each.value.name, each.key)
|
||||||
|
resources {
|
||||||
|
limits = {
|
||||||
|
cpu = each.value.cpu
|
||||||
|
memory = each.value.mem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
port {
|
||||||
|
container_port = each.value.port.internal
|
||||||
|
protocol = coalesce(each.value.proto, "TCP")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource kubernetes_service admin {
|
||||||
|
for_each = var.admin_services.configs
|
||||||
|
metadata {
|
||||||
|
name = each.key
|
||||||
|
namespace = var.admin_services.namespace
|
||||||
|
labels = {
|
||||||
|
app = each.key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# TODO: don't make these NodePorts since we're gonna want them
|
||||||
|
# to be purely internal to the Cluster.
|
||||||
|
# WHY? Because we want to keep dashboards as unexposed as possible
|
||||||
|
spec {
|
||||||
|
selector = {
|
||||||
|
app = each.key
|
||||||
|
}
|
||||||
|
port {
|
||||||
|
target_port = each.value.port.internal
|
||||||
|
port = each.value.port.expose
|
||||||
|
}
|
||||||
|
type = "NodePort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -17,3 +17,16 @@ resource vultr_firewall_rule game-server-inbound {
|
|||||||
subnet_size = 0
|
subnet_size = 0
|
||||||
port = each.value.port.expose
|
port = each.value.port.expose
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
resource vultr_firewall_rule admin-service-inbound {
|
||||||
|
for_each = var.admin_services.configs
|
||||||
|
firewall_group_id = vultr_kubernetes.athens.firewall_group_id
|
||||||
|
protocol = "tcp"
|
||||||
|
ip_type = "v4"
|
||||||
|
subnet = "0.0.0.0"
|
||||||
|
subnet_size = 0
|
||||||
|
notes = each.value.port.notes
|
||||||
|
port = each.value.port.expose
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -52,3 +52,21 @@ variable game_servers {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable admin_services {
|
||||||
|
type = object({
|
||||||
|
namespace = string
|
||||||
|
configs = map(object({
|
||||||
|
name = string
|
||||||
|
image = string
|
||||||
|
cpu = string
|
||||||
|
mem = string
|
||||||
|
port = object({
|
||||||
|
notes = optional(string)
|
||||||
|
internal = number
|
||||||
|
expose = number
|
||||||
|
})
|
||||||
|
proto = optional(string)
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -23,4 +23,21 @@ game_servers = {
|
|||||||
# }
|
# }
|
||||||
# }
|
# }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
admin_services = {
|
||||||
|
namespace = "admin-services"
|
||||||
|
configs = {
|
||||||
|
health = {
|
||||||
|
image = "nginx:latest"
|
||||||
|
name = "health"
|
||||||
|
cpu = "200m"
|
||||||
|
mem = "64Mi"
|
||||||
|
port = {
|
||||||
|
notes = "Basic nginx sanity check service"
|
||||||
|
expose = 30800
|
||||||
|
internal = 80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user