我使用Terraform在GCP中创建了VPC,现在我想添加两个子网Public和private。在创建虚拟机时。如果我通过公共子网,则VM应该获得公共IP;如果我通过私有子网,则VM应该获得唯一的私有内部IP地址
## Create VPC
resource "google_compute_network" "vpc" {
name = "${var.name}-vpc"
auto_create_subnetworks = "false"
}
## Create Subnet
## Create public subnet
resource "google_compute_subnetwork" "pub-subnet" {
name = "${var.name}-public-subnet"
ip_cidr_range = "${var.pub-subnet-cidr}"
network = "${var.name}-vpc"
depends_on = ["google_compute_network.vpc"]
region = "asia-south1"
}
## Create private subnet
resource "google_compute_subnetwork" "private-subnet" {
name = "${var.name}-private-subnet"
ip_cidr_range = "${var.private-subnet-cidr}"
network = "${var.name}-vpc"
depends_on = ["google_compute_network.vpc"]
region = "asia-south1"
private_ip_google_access = "true"
}
#####创建虚拟机实例
resource "google_compute_instance" "default" {
name = "qa7-web-linux-${count.index + 1}"
count = "${var.count}"
machine_type = "${var.machine_type}"
boot_disk {
initialize_params {
image = "${var.web-srv-image}"
}
}
network_interface {
subnetwork = "${var.subnet-private}"
access_config {
}
}
metadata {
sshKeys = "indra:${file(".//modules//instances//key.pub")}"
}
}
答案 0 :(得分:0)
我知道这是一个老问题,但是最近我遇到了同样的问题。您的代码存在的问题是您有一个
access_config { }
您的network_interface定义中的 block。如果存在此选项,则将外部IP分配给正在创建的网络接口。您需要为“私有”子网中的VM提供一个不同的network_interface块,而没有access_config参数。与AWS不同,该子网并不是真正的私有网络,您可以随时随地分配一个外部IP。 private_ip_google_access
可能并不代表您的意思。