159 lines
3.6 KiB
Terraform
159 lines
3.6 KiB
Terraform
variable "livekit" {
|
|
type = object({
|
|
app_name = optional(string, "livekit")
|
|
api_key = string
|
|
image = string
|
|
version = string
|
|
http_port = optional(number, 7880)
|
|
tcp_port = optional(number, 7881)
|
|
udp_port = optional(number, 7882)
|
|
subdomain = optional(string, "livekit")
|
|
})
|
|
}
|
|
|
|
resource "random_password" "livekit_api_secret" {
|
|
length = 44
|
|
special = false
|
|
}
|
|
|
|
resource "kubernetes_config_map_v1" "livekit" {
|
|
metadata {
|
|
name = var.livekit.app_name
|
|
namespace = kubernetes_namespace_v1.stoat.metadata[0].name
|
|
}
|
|
|
|
data = {
|
|
"livekit.yml" = templatefile("${path.module}/templates/livekit.yml.tftpl",
|
|
{
|
|
domain = var.domain
|
|
voice_ingress_url = "http://${var.stoat.voice_ingress.name}:8500/worldwide"
|
|
livekit = {
|
|
http_port = var.livekit.http_port
|
|
tcp_port = var.livekit.tcp_port
|
|
api_key = var.livekit.api_key
|
|
api_secret = random_password.livekit_api_secret.result
|
|
subdomain = var.livekit.subdomain
|
|
}
|
|
redis = {
|
|
host = "${var.redis.app_name}"
|
|
port = 6379
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_service_v1" "livekit" {
|
|
metadata {
|
|
name = "${var.livekit.app_name}-service"
|
|
namespace = kubernetes_namespace_v1.stoat.metadata[0].name
|
|
}
|
|
|
|
spec {
|
|
selector = {
|
|
app = var.livekit.app_name
|
|
}
|
|
|
|
type = "NodePort"
|
|
port {
|
|
name = "http"
|
|
port = var.livekit.http_port
|
|
target_port = var.livekit.http_port
|
|
}
|
|
port {
|
|
name = "tcp"
|
|
port = var.livekit.tcp_port
|
|
target_port = var.livekit.tcp_port
|
|
}
|
|
port {
|
|
name = "udp"
|
|
port = var.livekit.udp_port
|
|
target_port = var.livekit.udp_port
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_ingress_v1" "livekit" {
|
|
metadata {
|
|
name = "${var.livekit.app_name}-service"
|
|
namespace = kubernetes_namespace_v1.stoat.metadata[0].name
|
|
|
|
annotations = {
|
|
"cert-manager.io/cluster-issuer" = "letsencrypt"
|
|
}
|
|
}
|
|
|
|
spec {
|
|
tls {
|
|
hosts = [
|
|
"${var.livekit.subdomain}.${var.domain}"
|
|
]
|
|
secret_name = "livekit-tls"
|
|
}
|
|
|
|
rule {
|
|
host = "${var.livekit.subdomain}.${var.domain}"
|
|
http {
|
|
path {
|
|
path = "/"
|
|
path_type = "Prefix"
|
|
backend {
|
|
service {
|
|
name = kubernetes_service_v1.livekit.metadata[0].name
|
|
port {
|
|
number = var.livekit.http_port
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "kubernetes_deployment_v1" "livekit" {
|
|
metadata {
|
|
name = var.livekit.app_name
|
|
namespace = kubernetes_namespace_v1.stoat.metadata[0].name
|
|
}
|
|
|
|
spec {
|
|
replicas = 1
|
|
selector {
|
|
match_labels = {
|
|
app = var.livekit.app_name
|
|
}
|
|
}
|
|
|
|
template {
|
|
metadata {
|
|
labels = {
|
|
"app" = var.livekit.app_name
|
|
}
|
|
}
|
|
|
|
spec {
|
|
host_network = true
|
|
dns_policy = "ClusterFirstWithHostNet"
|
|
container {
|
|
name = var.livekit.app_name
|
|
image = "${var.livekit.image}:${var.livekit.version}"
|
|
# command = [ "/bin/sh", "-c", "--", "while true; do sleep 5; done;"]
|
|
args = ["--config", "/etc/livekit.yml"]
|
|
volume_mount {
|
|
name = "livekit-config"
|
|
mount_path = "/etc/livekit.yml"
|
|
sub_path = "livekit.yml"
|
|
}
|
|
}
|
|
|
|
volume {
|
|
name = "livekit-config"
|
|
config_map {
|
|
name = kubernetes_config_map_v1.livekit.metadata[0].name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|