Google cloud platform 无法使用GCP中的Terraform创建基于路由的经典VPN隧道

Google cloud platform 无法使用GCP中的Terraform创建基于路由的经典VPN隧道,google-cloud-platform,terraform,google-cloud-networking,Google Cloud Platform,Terraform,Google Cloud Networking,我想要实现的目标: 我希望Terraform在GCP中创建一个经典的基于路由的VPN隧道 背景: 在GCP中设置VPN隧道时,有三种路由选择 BGP 基于路由的 基于策略 在GCP中创建基于路由的VPN隧道时,需要指定远程子网。如果要创建基于策略的VPN隧道,还需要指定本地子网 因为我想创建一个基于路由的VPN隧道,所以我只需要提供远程子网 问题: 然而,在Terraform中,资源“google_compute_vpn_tunnel”没有与使用何种路由类型相关的选项。 好吧,也许这是因为缺少“

我想要实现的目标:

我希望Terraform在GCP中创建一个经典的基于路由的VPN隧道

背景:

在GCP中设置VPN隧道时,有三种路由选择 BGP 基于路由的 基于策略

在GCP中创建基于路由的VPN隧道时,需要指定远程子网。如果要创建基于策略的VPN隧道,还需要指定本地子网

因为我想创建一个基于路由的VPN隧道,所以我只需要提供远程子网

问题:

然而,在Terraform中,资源“google_compute_vpn_tunnel”没有与使用何种路由类型相关的选项。 好吧,也许这是因为缺少“本地流量选择器”,然后变成了一个基于路由的VPN隧道。 但即使我在main.tf中使用“local\u traffic\u selector”选项,它仍然在计划中

“+local_traffic_selector=(应用后已知)

由于我没有为它指定任何值,Terraform尝试使用空值,这是不可能的

Error: Error creating VpnTunnel: googleapi: Error 400: Invalid value for field 'resource.localTrafficSelector[0]': ''. The local_traffic_selector field cannot be empty for network in custom subnet mode., invalid

  on main.tf line 51, in resource "google_compute_vpn_tunnel" "tunnel1":
  51: resource "google_compute_vpn_tunnel" "tunnel1" {
如果我指定它,VPN隧道将是基于策略的类型,而不是基于路由的类型

是否不支持Terraform在GCP中创建基于路由的经典VPN隧道

另一件奇怪的事情是在创建VPN网关时。在GCP控制台中执行此操作时,需要指定VPN网关的外部IP地址。这是一项相当重要的财产。但是Terraform没有为资源“google\u compute\u vpn\u gateway”设置IP地址的选项 在这里的示例中:它们创建了一个静态IP对象,但在配置中从未将其分配给VPN网关。

根据,如果本地选择器位于
0.0.0/0

基于路由的VPN隧道与使用基于策略的路由的隧道类似,只是只指定了远程IP范围(右侧)。本地IP范围列表假定为任何网络(0.0.0.0/0),因此仅指定远程流量选择器

顺便说一下,在隧道定义中添加
local\u traffic\u selector=[“0.0.0.0/0”]
,如下()

是的,当然,创建的VPN隧道在GUI中设置为基于策略的,但本地网络设置为0.0.0.0/0,因此在技术上等同于基于路由的配置

关于静态IP,它是地形的标准(和无聊)行为。您必须使用Terraform创建静态IP,以便将状态保存在TFSTATE文件中,然后能够重用它。 试试这个:

  • 仅在
    main.tf文件中保留外部ip创建
  • 应用此配置
  • 现在添加其余的配置
  • 再次应用配置的更新
如您所见,Terraform从以前的状态检索IP,并在不创建新IP的情况下重用它

google_compute_address.vpn_static_ip: Refreshing state... [id=******PROJECT_ID*****/us-central1/my-vpn-ip]

关于静态IP很有趣。但是,如果我在main.tf中创建多个静态IP,并想为VPN网关使用一个特定的IP,该怎么办?尽管技术上是等效的,但奇怪的是Terraform不支持使用与GUI相同的选项创建隧道,这感觉像是一个非常基本的功能。同意你的看法。
resource "google_compute_address" "vpn_static_ip" {
  name   = "my-vpn-ip"
}
google_compute_address.vpn_static_ip: Refreshing state... [id=******PROJECT_ID*****/us-central1/my-vpn-ip]