我使用Terraform在GCP中创建了一个VPC,现在我想添加两个子网--公共和私有子网。在创建VM'S时,如果我通过公共子网,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"
}创建vm实例
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")}"
}
}发布于 2020-11-21 02:10:46
我知道这是个老问题,但我最近遇到了同样的问题。代码的问题在于,您有一个
access_config { }块在您的network_interface定义中。当出现此情况时,将向正在创建的网络接口分配外部IP。您需要在“私有”子网中有一个不同的network_interface块,而不需要VM的access_config参数。与AWS不同,子网并不是真正私有的,b/c您可以在任何时候指定外部IP。private_ip_google_access可能不是你所认为的意思。
发布于 2022-10-03 05:59:01
只需从代码中删除“access”部分,就不会将任何外部ip分配给vm。希望这能有所帮助。
https://stackoverflow.com/questions/57520555
复制相似问题