From 5a9881337df72e7b538206d8dece3b78ca3373cd Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Tue, 10 Mar 2026 23:46:01 +0000 Subject: [PATCH] Add terminal stack - reverse proxy to ttyd behind authentik Exposes ttyd at 10.0.10.10:7681 via terminal.viktorbarzin.me with Cloudflare DNS and Authentik forward-auth protection. --- config.tfvars | Bin 9933 -> 9945 bytes stacks/terminal/main.tf | 72 +++++++++++++++++++++++++++++++++ stacks/terminal/terragrunt.hcl | 3 ++ 3 files changed, 75 insertions(+) create mode 100644 stacks/terminal/main.tf create mode 100644 stacks/terminal/terragrunt.hcl diff --git a/config.tfvars b/config.tfvars index ca9a8141a687fa42dbb71d61baa7bfc247e0311e..b0e4b08c3deb1f2b8e77dc3360a8c636c22a2a37 100644 GIT binary patch literal 9945 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 X&Z$C7R&@?~OO6jm-&%(uST(d`J%}`f literal 9933 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 LgqXg3tE_tZD;8uA diff --git a/stacks/terminal/main.tf b/stacks/terminal/main.tf new file mode 100644 index 00000000..c6daf858 --- /dev/null +++ b/stacks/terminal/main.tf @@ -0,0 +1,72 @@ +variable "tls_secret_name" { + type = string + sensitive = true +} + +resource "kubernetes_namespace" "terminal" { + metadata { + name = "terminal" + labels = { + "istio-injection" : "disabled" + tier = local.tiers.aux + } + } +} + +module "tls_secret" { + source = "../../modules/kubernetes/setup_tls_secret" + namespace = kubernetes_namespace.terminal.metadata[0].name + tls_secret_name = var.tls_secret_name +} + +# Service + Endpoints to reverse-proxy to ttyd at 10.0.10.10:7681 +resource "kubernetes_service" "terminal" { + metadata { + name = "terminal" + namespace = kubernetes_namespace.terminal.metadata[0].name + labels = { + app = "terminal" + } + } + + spec { + port { + name = "http" + port = 80 + target_port = 7681 + } + } +} + +resource "kubernetes_endpoints" "terminal" { + metadata { + name = "terminal" + namespace = kubernetes_namespace.terminal.metadata[0].name + } + + subset { + address { + ip = "10.0.10.10" + } + port { + name = "http" + port = 7681 + } + } +} + +module "ingress" { + source = "../../modules/kubernetes/ingress_factory" + namespace = kubernetes_namespace.terminal.metadata[0].name + name = "terminal" + tls_secret_name = var.tls_secret_name + protected = true + extra_annotations = { + "gethomepage.dev/enabled" = "true" + "gethomepage.dev/name" = "Terminal" + "gethomepage.dev/description" = "Web terminal (ttyd)" + "gethomepage.dev/icon" = "mdi-console" + "gethomepage.dev/group" = "Infrastructure" + "gethomepage.dev/pod-selector" = "" + } +} diff --git a/stacks/terminal/terragrunt.hcl b/stacks/terminal/terragrunt.hcl new file mode 100644 index 00000000..e147285f --- /dev/null +++ b/stacks/terminal/terragrunt.hcl @@ -0,0 +1,3 @@ +include "root" { + path = find_in_parent_folders() +}