terraform/modules/ingress/main.tf (344 lines of code) (raw):

locals { nginx_ingress_kubernetes_io_cors_allow_origin = join(",", flatten([ "https://${var.web_app_domain}", "https://${var.ckt_app_domain}", "http://localhost:4200", var.additional_nginx_cors_allow_origin, ])) } module "cert_manager" { source = "terraform-iaac/cert-manager/kubernetes" cluster_issuer_email = var.cert_issuer_email cluster_issuer_name = "letsencrypt" cluster_issuer_private_key_secret_name = "cert-manager-private-key" additional_set = var.enable_certman_gcr_io_images ? [ { name = "repository" value = "gcr.io/cloud-marketplace/google/cert-manager" }, { name = "tag" value = "1.7" } ] : [] } resource "kubernetes_namespace" "ingress_nginx" { metadata { name = "ingress-nginx" } } resource "google_compute_address" "ingress_ip_address" { name = "nginx-controller" } module "nginx-controller" { source = "terraform-iaac/nginx-controller/helm" version = "2.0.2" namespace = "ingress-nginx" ip_address = google_compute_address.ingress_ip_address.address # TODO: does this require cert_manager up and running or can they be completed in parallel depends_on = [ module.cert_manager, resource.kubernetes_namespace.ingress_nginx ] } resource "kubectl_manifest" "ingress" { count = var.create_nginx_ingress ? 1 : 0 yaml_body = <<YAML kind: Ingress apiVersion: networking.k8s.io/v1 metadata: name: learning-platform-nginx-ingress annotations: kubernetes.io/ingress.class: "nginx" cert-manager.io/cluster-issuer: "letsencrypt" nginx.ingress.kubernetes.io/enable-cors: "true" nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE" nginx.ingress.kubernetes.io/cors-allow-origin: ${local.nginx_ingress_kubernetes_io_cors_allow_origin} nginx.ingress.kubernetes.io/cors-allow-credentials: "true" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-body-size: "500m" spec: tls: - hosts: - ${var.api_domain} secretName: learning-platform-backend-ssl-cert rules: - host: ${var.api_domain} http: paths: - path: /session pathType: Prefix backend: service: name: session port: number: 80 - path: /dashboard pathType: Prefix backend: service: name: dashboard port: number: 80 - path: /authentication pathType: Prefix backend: service: name: authentication port: number: 80 - path: /messages pathType: Prefix backend: service: name: messages port: number: 80 - path: /notes pathType: Prefix backend: service: name: notes port: number: 80 - path: /utils pathType: Prefix backend: service: name: utils port: number: 80 - path: /docs pathType: Prefix backend: service: name: api-docs port: number: 80 - path: /course_ingestion pathType: Prefix backend: service: name: course-ingestion port: number: 80 - path: /extractive_summarization pathType: Prefix backend: service: name: extractive-summarization port: number: 80 - path: /title_generation pathType: Prefix backend: service: name: title-generation port: number: 80 - path: /answer_a_question pathType: Prefix backend: service: name: answer-a-question port: number: 80 - path: /choose_the_fact pathType: Prefix backend: service: name: choose-the-fact port: number: 80 - path: /const_parsing pathType: Prefix backend: service: name: const-parsing port: number: 80 - path: /dialog_systems pathType: Prefix backend: service: name: dialog-systems port: number: 80 - path: /masked_word_prediction pathType: Prefix backend: service: name: masked-word-prediction port: number: 80 - path: /paraphrasing_practice pathType: Prefix backend: service: name: paraphrasing-practice port: number: 80 - path: /answer_a_question_evaluation pathType: Prefix backend: service: name: answer-a-question-evaluation port: number: 80 - path: /missed_text_templatize pathType: Prefix backend: service: name: feedback port: number: 80 - path: /assessment_items pathType: Prefix backend: service: name: assessment-items port: number: 80 - path: /coref_resolution pathType: Prefix backend: service: name: coref-resolution port: number: 80 - path: /grafana pathType: Prefix backend: service: name: kube-prometheus-stack-grafana port: number: 80 - path: /enhanced_feedback pathType: Prefix backend: service: name: enhanced-feedback port: number: 80 - path: /deep_knowledge_tracing pathType: Prefix backend: service: name: deep-knowledge-tracing port: number: 80 - path: /item_response_theory pathType: Prefix backend: service: name: item-response-theory port: number: 80 - path: /triple_extraction pathType: Prefix backend: service: name: triple-extraction port: number: 80 - path: /lti pathType: Prefix backend: service: name: lti port: number: 80 - path: /skill-service pathType: Prefix backend: service: name: skill-service port: number: 80 - path: /matching-engine pathType: Prefix backend: service: name: matching-engine port: number: 80 - path: /learner-profile-service pathType: Prefix backend: service: name: student-learner-profile port: number: 80 - path: /erps-store pathType: Prefix backend: service: name: erps-store port: number: 80 - path: /recommendation-service pathType: Prefix backend: service: name: recommendation-service port: number: 80 - path: /assessment-service pathType: Prefix backend: service: name: assessment-service port: number: 80 - path: /knowledge-service pathType: Prefix backend: service: name: knowledge-service port: number: 80 - path: /learning-object-service pathType: Prefix backend: service: name: learning-object-service port: number: 80 - path: /learning-record-service pathType: Prefix backend: service: name: learning-record-service port: number: 80 - path: /user-management pathType: Prefix backend: service: name: user-management port: number: 80 - path: /prior-learning-assessment pathType: Prefix backend: service: name: prior-learning-assessment port: number: 80 - path: /rules-engine pathType: Prefix backend: service: name: rules-engine port: number: 80 - path: /notification pathType: Prefix backend: service: name: notification port: number: 80 YAML depends_on = [ module.nginx-controller ] }