Merge branch 'feat/blackhole-non-rp-traffic' into main

This commit is contained in:
41666 2020-12-18 12:32:43 -05:00
commit 692467d47f
5 changed files with 51 additions and 14 deletions

View file

@ -14,7 +14,7 @@ resource "tls_cert_request" "web_csr" {
resource "cloudflare_origin_ca_certificate" "web" { resource "cloudflare_origin_ca_certificate" "web" {
csr = tls_cert_request.web_csr.cert_request_pem csr = tls_cert_request.web_csr.cert_request_pem
hostnames = ["web-${var.environment_tag}.roleypoly.com"] hostnames = var.ui_hostnames
request_type = "origin-rsa" request_type = "origin-rsa"
requested_validity = 365 * 15 requested_validity = 365 * 15
} }

View file

@ -41,6 +41,11 @@ variable "ui_public_uri" {
description = "UI Public Base Path" description = "UI Public Base Path"
} }
variable "ui_hostnames" {
type = list(string)
description = "Hostnames to allow web UI requests from, e.g. roleypoly.com, web-prod.roleypoly.com"
}
variable "api_public_uri" { variable "api_public_uri" {
type = string type = string
description = "API Public Base Path" description = "API Public Base Path"

View file

@ -11,3 +11,7 @@ ui_regions = [
] ]
deploy_bot = true deploy_bot = true
bot_instance_size = "e2-micro" bot_instance_size = "e2-micro"
ui_hostnames = [
"next.roleypoly.com",
"web-prod.roleypoly.com"
]

View file

@ -2,5 +2,9 @@ environment_tag = "stage"
ui_regions = [ ui_regions = [
"us-east4" "us-east4"
] ]
deploy_bot = true deploy_bot = false
bot_instance_size = "f1-micro" bot_instance_size = "f1-micro"
ui_hostnames = [
"stage.roleypoly.com",
"web-stage.roleypoly.com"
]

View file

@ -2,9 +2,25 @@
resource "google_compute_url_map" "web_lb" { resource "google_compute_url_map" "web_lb" {
name = "lb-um-web-${var.environment_tag}" name = "lb-um-web-${var.environment_tag}"
host_rule {
hosts = var.ui_hostnames
path_matcher = "web"
}
path_matcher {
name = "web"
default_service = google_compute_backend_service.web_lb.id default_service = google_compute_backend_service.web_lb.id
} }
// Blackhole. No addresses will ever be this, and hosts without IPv6 will fail regardless.
// Not matching the host_rule should be seen as treason.
default_url_redirect {
host_redirect = "[100::]"
path_redirect = "/"
strip_query = true
}
}
// Regional load balancer // Regional load balancer
resource "google_compute_backend_service" "web_lb" { resource "google_compute_backend_service" "web_lb" {
name = "lb-rbes-web-${var.environment_tag}" name = "lb-rbes-web-${var.environment_tag}"
@ -67,17 +83,25 @@ resource "google_compute_global_forwarding_rule" "web_lb-ipv6" {
} }
// Cloudflare DNS records // Cloudflare DNS records
locals {
// for web-example.roleypoly.com, grab the .roleypoly.com. This may break for .co.uk, etc, so don't use that. :)
uiDNSReplace = regex("/\\.[a-z0-9-]+\\.[a-z\\.]+$/", var.ui_hostnames[0])
}
resource "cloudflare_record" "web-ipv4" { resource "cloudflare_record" "web-ipv4" {
for_each = toset(var.ui_hostnames)
zone_id = var.cloudflare_zone_id zone_id = var.cloudflare_zone_id
name = "web-${var.environment_tag}" name = replace(each.value, uiDNSReplace, "")
type = "A" type = "A"
value = google_compute_global_forwarding_rule.web_lb-ipv4.ip_address value = google_compute_global_forwarding_rule.web_lb-ipv4.ip_address
proxied = true proxied = true
} }
resource "cloudflare_record" "web-ipv6" { resource "cloudflare_record" "web-ipv6" {
for_each = toset(var.ui_hostnames)
zone_id = var.cloudflare_zone_id zone_id = var.cloudflare_zone_id
name = "web-${var.environment_tag}" name = replace(each.value, uiDNSReplace, "")
type = "AAAA" type = "AAAA"
value = google_compute_global_forwarding_rule.web_lb-ipv6.ip_address value = google_compute_global_forwarding_rule.web_lb-ipv6.ip_address
proxied = true proxied = true