如何通过Terraform为GCP云实例配置区域静态IPv6地址
解决Terraform在GCP为VM配置静态IPv6的问题
核心问题原因
GCP的静态IPv6地址属于全局资源,而你当前使用的google_compute_address仅支持创建区域级IPv4地址,无法处理IPv6资源,这就是无法通过该资源配置静态IPv6的根本原因。
解决方案步骤
要实现静态IPv6绑定,需要使用google_compute_global_address资源创建全局静态IPv6地址,再将其关联到VM实例的IPv6访问配置中。
修改后的完整代码
# Create VPC WITH IPV6 resource "google_compute_network" "vpc_network" { name = "${var.project_name}-${var.deploy_env[var.workspace]}-vpc" auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 1460 } # create subnetwork with ipv6 support resource "google_compute_subnetwork" "vpc_subnetwork" { name = "${var.project_name}-${var.deploy_env[var.workspace]}-subnetwork" ip_cidr_range = "10.156.0.0/20" region = var.region stack_type = "IPV4_IPV6" ipv6_access_type = "EXTERNAL" network = google_compute_network.vpc_network.id } # create Instance resource "google_compute_instance" "instance" { name = "${var.project_name}-${var.deploy_env[var.workspace]}-monitoring" machine_type = "g1-small" zone = "${var.zone}" tags = ["http-server", "https-server"] boot_disk { initialize_params { image = "image" } device_name = "${var.project_name}-${var.deploy_env[var.workspace]}-monitoring" auto_delete = true mode = "READ_WRITE" } scheduling { automatic_restart = true on_host_maintenance = "MIGRATE" provisioning_model = "STANDARD" } network_interface { network = google_compute_network.vpc_network.id subnetwork = google_compute_subnetwork.vpc_subnetwork.id stack_type = "IPV4_IPV6" access_config { // 绑定静态IPv4 nat_ip = google_compute_address.external_ipv4_vip1.address network_tier = "PREMIUM" } ipv6_access_config { // 绑定静态IPv6 nat_ip = google_compute_global_address.external_ipv6_vip1.address network_tier = "PREMIUM" } } } # 静态IPv4地址(区域资源) resource "google_compute_address" "external_ipv4_vip1" { address_type = "EXTERNAL" name = "${var.project_name}-${var.deploy_env[var.workspace]}-ipv4-vip1" network_tier = "PREMIUM" region = var.region } # 静态IPv6地址(全局资源) resource "google_compute_global_address" "external_ipv6_vip1" { address_type = "EXTERNAL" ip_version = "IPV6" name = "${var.project_name}-${var.deploy_env[var.workspace]}-ipv6-vip1" network_tier = "PREMIUM" }
关键注意事项
- 确保子网的
stack_type为IPV4_IPV6且ipv6_access_type为EXTERNAL(你已正确配置),这是VM获取外部IPv6地址的前提。 google_compute_global_address用于创建全局静态IPv6,必须显式指定ip_version = "IPV6"。- 在VM的
ipv6_access_config块中通过nat_ip字段绑定已创建的静态IPv6地址,逻辑与IPv4的绑定完全一致。
内容的提问来源于stack exchange,提问作者Marco Ferrara
相关产品推荐
相关产品推荐

