nlb.tf 1.47 KB
# NLB Service for EKS
resource "kubernetes_service_v1" "user_management_nlb" {
  metadata {
    name      = "${var.service_name}-nlb"
    namespace = var.namespace
    labels = {
      app     = "user-management-app"
      service = "nlb"
    }
    annotations = {
      # NLB 配置
      "service.beta.kubernetes.io/aws-load-balancer-type"            = "external"
      "service.beta.kubernetes.io/aws-load-balancer-nlb-target-type" = "ip"
      "service.beta.kubernetes.io/aws-load-balancer-scheme"          = "internet-facing"
      
      # 性能优化
      "service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled" = "true"
      "service.beta.kubernetes.io/aws-load-balancer-attributes" = join(",", [
        "load_balancing.cross_zone.enabled=true",
        "access_logs.s3.enabled=false"
      ])
    }
  }

  spec {
    selector = {
      app = "user-management-app"
    }

    port {
      name        = "http"
      port        = 80
      target_port = 8080
      protocol    = "TCP"
    }

    type = "LoadBalancer"
  }

  depends_on = [kubernetes_namespace.user_management]
}

# 确保命名空间存在
resource "kubernetes_namespace" "user_management" {
  metadata {
    name = var.namespace
    labels = {
      name = var.namespace
    }
  }
}

# 获取 NLB 信息
data "aws_lb" "nlb" {
  name = regex("^[^-]+", kubernetes_service_v1.user_management_nlb.status.0.load_balancer.0.ingress.0.hostname)
  
  depends_on = [kubernetes_service_v1.user_management_nlb]
}