Add networking settings for canary proxies

Canary proxies are not receiving real traffic but can be useful when testing Nomulus deployment (probers will probe canary proxy and compare metrics with production proxy). This CL added a separate load balancer for a canary proxy, running on the same clusters as production proxy.

The canary proxies have their own IP addresses, but are not assigned domain names. Probers will directly connect to these endpoints by IP.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=193234937
This commit is contained in:
jianglai 2018-04-17 12:08:15 -07:00
parent d036d72dda
commit eab6fcc8e6
8 changed files with 38 additions and 152 deletions

View file

@ -28,8 +28,5 @@ output "proxy_instance_groups" {
} }
output "proxy_ip_addresses" { output "proxy_ip_addresses" {
value = { value = "${module.proxy.proxy_ip_addresses}"
ipv4 = "${module.proxy.proxy_ipv4_address}"
ipv6 = "${module.proxy.proxy_ipv6_address}"
}
} }

View file

@ -8,7 +8,7 @@ resource "google_dns_record_set" "proxy_epp_a_record" {
type = "A" type = "A"
ttl = 300 ttl = 300
managed_zone = "${google_dns_managed_zone.proxy_domain.name}" managed_zone = "${google_dns_managed_zone.proxy_domain.name}"
rrdatas = ["${google_compute_global_address.proxy_ipv4_address.address}"] rrdatas = ["${module.proxy_networking.proxy_ipv4_address}"]
} }
resource "google_dns_record_set" "proxy_epp_aaaa_record" { resource "google_dns_record_set" "proxy_epp_aaaa_record" {
@ -16,7 +16,7 @@ resource "google_dns_record_set" "proxy_epp_aaaa_record" {
type = "AAAA" type = "AAAA"
ttl = 300 ttl = 300
managed_zone = "${google_dns_managed_zone.proxy_domain.name}" managed_zone = "${google_dns_managed_zone.proxy_domain.name}"
rrdatas = ["${google_compute_global_address.proxy_ipv6_address.address}"] rrdatas = ["${module.proxy_networking.proxy_ipv6_address}"]
} }
resource "google_dns_record_set" "proxy_whois_a_record" { resource "google_dns_record_set" "proxy_whois_a_record" {
@ -24,7 +24,7 @@ resource "google_dns_record_set" "proxy_whois_a_record" {
type = "A" type = "A"
ttl = 300 ttl = 300
managed_zone = "${google_dns_managed_zone.proxy_domain.name}" managed_zone = "${google_dns_managed_zone.proxy_domain.name}"
rrdatas = ["${google_compute_global_address.proxy_ipv4_address.address}"] rrdatas = ["${module.proxy_networking.proxy_ipv4_address}"]
} }
resource "google_dns_record_set" "proxy_whois_aaaa_record" { resource "google_dns_record_set" "proxy_whois_aaaa_record" {
@ -32,5 +32,5 @@ resource "google_dns_record_set" "proxy_whois_aaaa_record" {
type = "AAAA" type = "AAAA"
ttl = 300 ttl = 300
managed_zone = "${google_dns_managed_zone.proxy_domain.name}" managed_zone = "${google_dns_managed_zone.proxy_domain.name}"
rrdatas = ["${google_compute_global_address.proxy_ipv6_address.address}"] rrdatas = ["${module.proxy_networking.proxy_ipv6_address}"]
} }

View file

@ -2,21 +2,18 @@ module "proxy_gke_americas" {
source = "./gke" source = "./gke"
proxy_cluster_region = "americas" proxy_cluster_region = "americas"
proxy_service_account_email = "${google_service_account.proxy_service_account.email}" proxy_service_account_email = "${google_service_account.proxy_service_account.email}"
proxy_ports = "${var.proxy_ports}"
} }
module "proxy_gke_emea" { module "proxy_gke_emea" {
source = "./gke" source = "./gke"
proxy_cluster_region = "emea" proxy_cluster_region = "emea"
proxy_service_account_email = "${google_service_account.proxy_service_account.email}" proxy_service_account_email = "${google_service_account.proxy_service_account.email}"
proxy_ports = "${var.proxy_ports}"
} }
module "proxy_gke_apac" { module "proxy_gke_apac" {
source = "./gke" source = "./gke"
proxy_cluster_region = "apac" proxy_cluster_region = "apac"
proxy_service_account_email = "${google_service_account.proxy_service_account.email}" proxy_service_account_email = "${google_service_account.proxy_service_account.email}"
proxy_ports = "${var.proxy_ports}"
} }
locals { locals {
@ -26,7 +23,3 @@ locals {
apac = "${module.proxy_gke_apac.proxy_instance_group}" apac = "${module.proxy_gke_apac.proxy_instance_group}"
} }
} }
output "proxy_instance_groups" {
value = "${local.proxy_instance_groups}"
}

View file

@ -11,7 +11,3 @@ variable "proxy_cluster_zones" {
apac = "asia-northeast1-c" apac = "asia-northeast1-c"
} }
} }
variable "proxy_ports" {
type = "map"
}

View file

@ -33,3 +33,14 @@ variable "proxy_ports" {
epp = 30002 epp = 30002
} }
} }
# Node ports exposed by the canary proxy.
variable "proxy_ports_canary" {
type = "map"
default = {
health_check = 40000
whois = 40001
epp = 40002
}
}

View file

@ -1,129 +1,12 @@
resource "google_compute_global_address" "proxy_ipv4_address" { module "proxy_networking" {
name = "proxy-ipv4-address" source = "./networking"
ip_version = "IPV4" proxy_instance_groups = "${local.proxy_instance_groups}"
proxy_ports = "${var.proxy_ports}"
} }
resource "google_compute_global_address" "proxy_ipv6_address" { module "proxy_networking_canary" {
name = "proxy-ipv6-address" source = "./networking"
ip_version = "IPV6" proxy_instance_groups = "${local.proxy_instance_groups}"
} suffix = "-canary"
proxy_ports = "${var.proxy_ports_canary}"
resource "google_compute_firewall" "proxy_firewall" {
name = "proxy-firewall"
network = "default"
allow {
protocol = "tcp"
ports = [
"${var.proxy_ports["epp"]}",
"${var.proxy_ports["whois"]}",
"${var.proxy_ports["health_check"]}",
]
}
source_ranges = [
"130.211.0.0/22",
"35.191.0.0/16",
]
target_tags = [
"proxy-cluster",
]
}
resource "google_compute_health_check" "proxy_health_check" {
name = "proxy-health-check"
tcp_health_check {
port = "${var.proxy_ports["health_check"]}"
request = "HEALTH_CHECK_REQUEST"
response = "HEALTH_CHECK_RESPONSE"
}
}
resource "google_compute_backend_service" "epp_backend_service" {
name = "epp-backend-service"
protocol = "TCP"
timeout_sec = 3600
port_name = "epp"
backend {
group = "${local.proxy_instance_groups["americas"]}"
}
backend {
group = "${local.proxy_instance_groups["emea"]}"
}
backend {
group = "${local.proxy_instance_groups["apac"]}"
}
health_checks = [
"${google_compute_health_check.proxy_health_check.self_link}",
]
}
resource "google_compute_backend_service" "whois_backend_service" {
name = "whois-backend-service"
protocol = "TCP"
timeout_sec = 60
port_name = "whois"
backend {
group = "${local.proxy_instance_groups["americas"]}"
}
backend {
group = "${local.proxy_instance_groups["emea"]}"
}
backend {
group = "${local.proxy_instance_groups["apac"]}"
}
health_checks = [
"${google_compute_health_check.proxy_health_check.self_link}",
]
}
resource "google_compute_target_tcp_proxy" "epp_tcp_proxy" {
name = "epp-tcp-proxy"
proxy_header = "PROXY_V1"
backend_service = "${google_compute_backend_service.epp_backend_service.self_link}"
}
resource "google_compute_target_tcp_proxy" "whois_tcp_proxy" {
name = "whois-tcp-proxy"
proxy_header = "PROXY_V1"
backend_service = "${google_compute_backend_service.whois_backend_service.self_link}"
}
resource "google_compute_global_forwarding_rule" "epp_ipv4_forwarding_rule" {
name = "epp-ipv4-forwarding-rule"
ip_address = "${google_compute_global_address.proxy_ipv4_address.address}"
target = "${google_compute_target_tcp_proxy.epp_tcp_proxy.self_link}"
port_range = "700"
}
resource "google_compute_global_forwarding_rule" "epp_ipv6_forwarding_rule" {
name = "epp-ipv6-forwarding-rule"
ip_address = "${google_compute_global_address.proxy_ipv6_address.address}"
target = "${google_compute_target_tcp_proxy.epp_tcp_proxy.self_link}"
port_range = "700"
}
resource "google_compute_global_forwarding_rule" "whois_ipv4_forwarding_rule" {
name = "whois-ipv4-forwarding-rule"
ip_address = "${google_compute_global_address.proxy_ipv4_address.address}"
target = "${google_compute_target_tcp_proxy.whois_tcp_proxy.self_link}"
port_range = "43"
}
resource "google_compute_global_forwarding_rule" "whois_ipv6_forwarding_rule" {
name = "whois-ipv6-forwarding-rule"
ip_address = "${google_compute_global_address.proxy_ipv6_address.address}"
target = "${google_compute_target_tcp_proxy.whois_tcp_proxy.self_link}"
port_range = "43"
} }

View file

@ -2,14 +2,19 @@ output "proxy_name_servers" {
value = "${google_dns_managed_zone.proxy_domain.name_servers}" value = "${google_dns_managed_zone.proxy_domain.name_servers}"
} }
output "proxy_instance_groups" {
value = "${local.proxy_instance_groups}"
}
output "proxy_service_account_client_id" { output "proxy_service_account_client_id" {
value = "${google_service_account.proxy_service_account.unique_id}" value = "${google_service_account.proxy_service_account.unique_id}"
} }
output "proxy_ipv4_address" { output "proxy_ip_addresses" {
value = "${google_compute_global_address.proxy_ipv4_address.address}" value = {
} ipv4 = "${module.proxy_networking.proxy_ipv4_address}"
ipv6 = "${module.proxy_networking.proxy_ipv6_address}"
output "proxy_ipv6_address" { ipv4_canary = "${module.proxy_networking_canary.proxy_ipv4_address}"
value = "${google_compute_global_address.proxy_ipv6_address.address}" ipv6_canary = "${module.proxy_networking_canary.proxy_ipv6_address}"
}
} }

View file

@ -21,6 +21,7 @@
while read line while read line
do do
gcloud compute instance-groups set-named-ports \ gcloud compute instance-groups set-named-ports \
--named-ports whois:30001,epp:30002 $line --named-ports whois:30001,epp:30002,whois-canary:40001,epp-canary:40002 \
$line
done < <(terraform output proxy_instance_groups | awk '{print $3}' | \ done < <(terraform output proxy_instance_groups | awk '{print $3}' | \
awk -F '/' '{print "--project", $7, "--zone", $9, $11}') awk -F '/' '{print "--project", $7, "--zone", $9, $11}')