Я вижу что-то странное с google_compute_firewall
, экземпляр вычисления находится в общей подсети.
Я предполагаю, что правило брандмауэра должно быть связано с сетью, к которой принадлежит эта подсеть.Но мы не можем добавить правило брандмауэра в эту сеть, потому что:
google_compute_firewall.intacct-firewall: Error creating Firewall: googleapi: Error 400: Invalid value for field 'resource.network': 'projects/it-production-186816/global/networks/production'. Cross project referencing is not allowed for this resource., invalid
Невозможно найти что-либо задокументированное для правил брандмауэра в общих сетях.Должны ли мы добавить брандмауэр в локальный VPC, а не в общий VPC?
Образ для вычисления имеет следующую сетевую конфигурацию:
network_interface {
subnetwork = "${var.subnetwork}"
subnetwork_project = "${var.vpc_parent}"
access_config = {
nat_ip = "${google_compute_address.dokku.address}"
}
}
Так что, хотя экземпляр вычисления находится в project-1
,Используемая сеть находится в project-2
РЕДАКТИРОВАТЬ:
Мой main.tf:
# Backend config
terraform {
backend "gcs" {
bucket = "intacct-staging-remote-backend"
project = "fr-intacct-staging"
credentials = "./creds/serviceaccount.json"
}
}
#
# Provider config
provider "google" {
region = "${var.gcp_region}"
project = "${var.gcp_project}"
credentials = "${file("./creds/serviceaccount.json")}"
}
#
# Static IP Address for the app
resource "google_compute_address" "dokku" {
name = "fr-intacct-staging-ip"
address_type = "EXTERNAL"
}
#
# Compute Instance Config
resource "google_compute_instance" "dokku" {
project = "${var.gcp_project}"
name = "dokku-host1"
machine_type = "${var.comp_type}"
zone = "${var.gcp_zone}"
allow_stopping_for_update = "true"
tags = ["intacct"]
# Install Dokku
metadata_startup_script = <<SCRIPT
sudo yum install -y wget
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.5/bootstrap.sh
sudo DOKKU_TAG=${var.dokku_version} bash bootstrap.sh
sudo dokku apps:create fr-intacct-staging
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sudo systemctl restart network
setenforce 0
SCRIPT
boot_disk {
initialize_params {
image = "${var.compute_image}"
}
}
network_interface {
subnetwork = "${var.subnetwork}"
subnetwork_project = "${var.vpc_parent}"
access_config = {
nat_ip = "${google_compute_address.dokku.address}"
}
}
}
#
# Firewall rule for app access
resource "google_compute_firewall" "intacct-firewall" {
name = "intacct-firewall"
network = "projects/it-production-186816/global/networks/production"
allow {
protocol = "tcp"
ports = [ "80" ]
}
source_ranges = [ "0.0.0.0/0" ]
target_tags = [ "intacct" ]
}
Кажется неправильным использовать конфигурацию другого провайдера для другого проектадобавить правило брандмауэра.
Если это так, то так и будет ... но поскольку используемая учетная запись службы имеет разрешение на другой проект, кажется неправильным, что нам придется использовать другойпровайдер для другого проекта?