From ace595abb796f545f19e9ff25544ae31fecd0c82 Mon Sep 17 00:00:00 2001 From: viktorbarzin Date: Sun, 19 Sep 2021 00:03:30 +0000 Subject: [PATCH] Drone CI Update TLS Certificates Commit --- main.tf | 8 +- modules/kubernetes/city-guesser/main.tf | 179 ++++++++++++++++++++++++ modules/kubernetes/main.tf | 24 ++-- modules/kubernetes/oauth-proxy/main.tf | 44 +++--- terraform.tfvars | Bin 13991 -> 13920 bytes 5 files changed, 220 insertions(+), 35 deletions(-) create mode 100644 modules/kubernetes/city-guesser/main.tf diff --git a/main.tf b/main.tf index d5b1e3ce..df3298ab 100644 --- a/main.tf +++ b/main.tf @@ -31,8 +31,8 @@ variable "drone_github_client_id" {} variable "drone_github_client_secret" {} variable "drone_rpc_secret" {} # variable "dockerhub_password" {} -variable "oauth_client_id" {} -variable "oauth_client_secret" {} +# variable "oauth_client_id" {} +# variable "oauth_client_secret" {} variable "url_shortener_mysql_password" {} variable "url_shortener_geolite_license_key" {} variable "url_shortener_api_key" {} @@ -218,8 +218,8 @@ module "kubernetes_cluster" { drone_rpc_secret = var.drone_rpc_secret # Oauth proxy - oauth_client_id = var.oauth_client_id - oauth_client_secret = var.oauth_client_secret + # oauth_client_id = var.oauth_client_id + # oauth_client_secret = var.oauth_client_secret # depends_on = [module.k8s_master, module.k8s_node1, module.k8s_node2] # wait until master and at least 2 nodes are up idrac_username = var.monitoring_idrac_username diff --git a/modules/kubernetes/city-guesser/main.tf b/modules/kubernetes/city-guesser/main.tf new file mode 100644 index 00000000..5a2e1a18 --- /dev/null +++ b/modules/kubernetes/city-guesser/main.tf @@ -0,0 +1,179 @@ +variable "tls_secret_name" {} +# variable "dockerhub_password" {} + +resource "kubernetes_namespace" "city-guesser" { + metadata { + name = "city-guesser" + } +} + +module "tls_secret" { + source = "../setup_tls_secret" + namespace = "city-guesser" + tls_secret_name = var.tls_secret_name +} + +# module "dockerhub_creds" { +# source = "../dockerhub_secret" +# namespace = "website" +# password = var.dockerhub_password +# } + +resource "kubernetes_deployment" "city-guesser" { + metadata { + name = "city-guesser" + namespace = "city-guesser" + labels = { + run = "city-guesser" + } + } + spec { + replicas = 1 + selector { + match_labels = { + run = "city-guesser" + } + } + template { + metadata { + labels = { + run = "city-guesser" + } + } + spec { + container { + image = "viktorbarzin/city-guesser:latest" + name = "city-guesser" + resources { + limits = { + cpu = "0.5" + memory = "512Mi" + } + requests = { + cpu = "250m" + memory = "50Mi" + } + } + port { + container_port = 80 + } + } + } + } + } +} + +resource "kubernetes_service" "city-guesser" { + metadata { + name = "city-guesser" + namespace = "city-guesser" + labels = { + "run" = "city-guesser" + } + } + + spec { + selector = { + run = "city-guesser" + } + port { + name = "http" + port = "80" + target_port = "80" + } + } +} +# resource "kubernetes_service" "city-guesser-oauth" { +# metadata { +# name = "city-guesser-oauth" +# namespace = "city-guesser" +# labels = { +# "run" = "city-guesser-oauth" +# } +# } + +# spec { +# type = "ExternalName" +# external_name = "oauth-proxy.oauth.svc.cluster.local" + +# # port { +# # name = "tcp" +# # port = "80" +# # target_port = "80" +# # } +# } +# } + +resource "kubernetes_ingress" "city-guesser" { + metadata { + name = "city-guesser-ingress" + namespace = "city-guesser" + annotations = { + "kubernetes.io/ingress.class" = "nginx" + # "nginx.ingress.kubernetes.io/auth-url" = "https://$host/oauth2/auth" + # "nginx.ingress.kubernetes.io/auth-signin" = "https://$host/oauth2/start?rd=$escaped_request_uri" + # "nginx.ingress.kubernetes.io/auth-response-headers" = "X-Auth-Request-User,X-Auth-Request-Email" + } + } + + spec { + tls { + hosts = ["city-guesser.viktorbarzin.me"] + secret_name = var.tls_secret_name + } + rule { + host = "city-guesser.viktorbarzin.me" + http { + path { + path = "/" + backend { + service_name = "city-guesser" + service_port = "80" + } + } + } + } + } +} + +# resource "kubernetes_ingress" "city-guesser-oauth" { +# metadata { +# name = "city-guesser-ingress-oauth" +# namespace = "city-guesser" +# annotations = { +# "kubernetes.io/ingress.class" = "nginx" +# } +# } + +# spec { +# tls { +# hosts = ["city-guesser.viktorbarzin.me"] +# secret_name = var.tls_secret_name +# } +# rule { +# host = "city-guesser.viktorbarzin.me" +# http { +# path { +# path = "/oauth2" +# backend { +# service_name = "city-guesser-oauth" +# service_port = "80" +# } +# } +# } +# } +# } +# } + + +module "oauth" { + source = "../oauth-proxy" + # oauth_client_id = "3d8ce4bf7b893899d967" + # oauth_client_secret = "08dca09b05e511cfa7f85cd7f85c332fd0768113" + client_id = "3d8ce4bf7b893899d967" + client_secret = "08dca09b05e511cfa7f85cd7f85c332fd0768113" + namespace = "city-guesser" + host = "city-guesser.viktorbarzin.me" + tls_secret_name = var.tls_secret_name + svc_name = "city-guesser-oauth" +} diff --git a/modules/kubernetes/main.tf b/modules/kubernetes/main.tf index 1c583373..a8cd555b 100644 --- a/modules/kubernetes/main.tf +++ b/modules/kubernetes/main.tf @@ -19,8 +19,8 @@ variable "drone_github_client_id" {} variable "drone_github_client_secret" {} variable "drone_rpc_secret" {} # variable "dockerhub_password" {} -variable "oauth_client_id" {} -variable "oauth_client_secret" {} +# variable "oauth_client_id" {} +# variable "oauth_client_secret" {} variable "url_shortener_geolite_license_key" {} variable "url_shortener_api_key" {} variable "url_shortener_mysql_password" {} @@ -147,14 +147,14 @@ module "monitoring" { depends_on = [null_resource.core_services] } -module "oauth" { - source = "./oauth-proxy" - tls_secret_name = var.tls_secret_name - client_id = var.oauth_client_id - client_secret = var.oauth_client_secret +# module "oauth" { +# source = "./oauth-proxy" +# tls_secret_name = var.tls_secret_name +# client_id = var.oauth_client_id +# client_secret = var.oauth_client_secret - depends_on = [null_resource.core_services] -} +# depends_on = [null_resource.core_services] +# } module "openid_help_page" { source = "./openid_help_page" @@ -188,6 +188,12 @@ module "reloader" { source = "./reloader" } +module "city-guesser" { + source = "./city-guesser" + tls_secret_name = var.tls_secret_name + depends_on = [null_resource.core_services] +} + module "url" { source = "./url-shortener" tls_secret_name = var.tls_secret_name diff --git a/modules/kubernetes/oauth-proxy/main.tf b/modules/kubernetes/oauth-proxy/main.tf index fc3145f6..25d25363 100644 --- a/modules/kubernetes/oauth-proxy/main.tf +++ b/modules/kubernetes/oauth-proxy/main.tf @@ -1,19 +1,18 @@ -variable "tls_secret_name" {} +variable "namespace" { + type = string +} +variable "host" { + type = string +} +variable "tls_secret_name" { + type = string +} +variable "svc_name" { + type = string +} variable "client_id" {} variable "client_secret" {} -resource "kubernetes_namespace" "oauth" { - metadata { - name = "oauth" - } -} - -module "tls_secret" { - source = "../setup_tls_secret" - namespace = "oauth" - tls_secret_name = var.tls_secret_name -} - resource "random_password" "cookie" { length = 16 special = true @@ -23,7 +22,7 @@ resource "random_password" "cookie" { resource "kubernetes_deployment" "oauth_proxy" { metadata { name = "oauth-proxy" - namespace = "oauth" + namespace = var.namespace labels = { run = "oauth-proxy" } @@ -80,8 +79,8 @@ resource "kubernetes_deployment" "oauth_proxy" { resource "kubernetes_service" "oauth_proxy" { metadata { - name = "oauth-proxy" - namespace = "oauth" + name = var.svc_name + namespace = var.namespace labels = { run = "oauth-proxy" } @@ -102,24 +101,25 @@ resource "kubernetes_service" "oauth_proxy" { resource "kubernetes_ingress" "oauth" { metadata { name = "oauth-ingress" - namespace = "oauth" + namespace = var.namespace annotations = { - "kubernetes.io/ingress.class" = "nginx" + "kubernetes.io/ingress.class" = "nginx" + "nginx.ingress.kubernetes.io/use-regex" = "true" } } spec { tls { - hosts = ["oauth.viktorbarzin.me"] + hosts = [var.host] secret_name = var.tls_secret_name } rule { - host = "oauth.viktorbarzin.me" + host = var.host http { path { - path = "/" + path = "/oauth2/.*" backend { - service_name = "oauth-proxy" + service_name = var.svc_name service_port = "80" } } diff --git a/terraform.tfvars b/terraform.tfvars index b9fdc46d33c079bca7eea27e940ba0b912e49860..886bbf07c66a5ebfa1ce7235e2be26fe7ca7b7fe 100644 GIT binary patch literal 13920 zcmV-mHlN7=M@dveQdv+`0N3q{vb~7oj?H0_CFtG(=v25fPWR(*$KEv}9y0#1{SG<> zA7UHPxv-8v(n1dpxH^qS+gYie=yC3JeTam569bJ)Q$6RViVs-K%8QCQjfU5T@M4Hqqm&+hVqg~vfZdSPOX7|A;{Wfh@;X^y-QOn7Mz3l+fo6Q2H zga(5~4lhM794h0qQEOJ9ikgUkoQ)8b9PLS%0AlDv9pgp#X){BeoX~M4$vG6Az;HM! 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 literal 13991 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 N{vm6lQ5yI9{<|w#I}rc?