terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "~> 2.26" } } backend "consul" { address = "consul:8500" path = "terraform/states/cloudmon" } } variable "app_version" { type = string default = "latest" } provider "kubernetes" { config_path = "./kind_kubeconfig" host = "https://local-k3s-platform:6443" insecure = true } # 1. DAS DASHBOARD DEPLOYMENT resource "kubernetes_deployment_v1" "cloudmon" { metadata { name = "cloudmon" namespace = "default" labels = { app = "cloudmon" } } spec { replicas = 1 selector { match_labels = { app = "cloudmon" } } template { metadata { labels = { app = "cloudmon" } } spec { container { name = "dashboard" image = "registry.local/bast/cloudmon:${var.app_version}" image_pull_policy = "Always" port { container_port = 8000 } } } } } } # 2. DER KUBERNETES SERVICE (Port 8000 intern freischalten) resource "kubernetes_service_v1" "cloudmon_service" { metadata { name = "cloudmon-service" namespace = "default" } spec { selector = { app = "cloudmon" } port { port = 80 target_port = 8000 } } } # 3. DAS INGRESS ROUTING (Macht cloudmon unter cloudmon.local über Port 8080 erreichbar!) resource "kubernetes_ingress_v1" "cloudmon_ingress" { metadata { name = "cloudmon-ingress" namespace = "default" annotations = { "kubernetes.io/ingress.class" = "nginx" } } spec { rule { host = "cloudmon.local" http { path { path = "/" path_type = "Prefix" backend { service { name = kubernetes_service_v1.cloudmon_service.metadata[0].name port { number = 80 } } } } } } } }