0

我使用 Terraform 在 GCP 中创建了一个 VPC,现在我想添加两个子网公共和私有。在创建虚拟机时。如果我通过了公共子网,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")}"
    }
}
4

1 回答 1

0

我知道这是一个老问题,但我最近遇到了同样的问题。您的代码的问题是您有一个

access_config { }

阻止您的 network_interface 定义。当它存在时,外部 IP 将分配给正在创建的网络接口。对于“私有”子网中的虚拟机,您需要有一个不带 access_config 参数的不同 network_interface 块。与 AWS 不同,子网并不是真正私有的,因此您可以随时分配外部 IP。private_ip_google_access可能并不意味着你认为它意味着什么。

于 2020-11-21T02:10:46.800 回答