使用azurerm设置Terraform子网时出错

使用azurerm设置Terraform子网时出错,azure,terraform,azure-aks,Azure,Terraform,Azure Aks,最近我发现我的AKS集群有一个子网太小了。因此,我尝试添加第二个子网和节点池,这在今天的Azure CNI中是可能的,然后创建一个合适的子网,并将其迁移回来 在terraform plan期间,所有操作都进行得很顺利,但应用时会抛出错误 Error: Error Creating/Updating Subnet "me-test-k8s-subnet2" (Virtual Network "me-test-k8s-vnet" / Resource Grou

最近我发现我的AKS集群有一个子网太小了。因此,我尝试添加第二个子网和节点池,这在今天的Azure CNI中是可能的,然后创建一个合适的子网,并将其迁移回来

terraform plan
期间,所有操作都进行得很顺利,但应用时会抛出错误

Error: Error Creating/Updating Subnet "me-test-k8s-subnet2" (Virtual Network "me-test-k8s-vnet" / Resource Group "me-test-k8s-rg"): network.SubnetsClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="NetcfgInvalidSubnet" Message="Subnet 'me-test-k8s-subnet2' is not valid in virtual network 'me-test-k8s-vnet'." Details=[]

  on main.tf line 28, in resource "azurerm_subnet" "subnet2":
  28: resource "azurerm_subnet" "subnet2" {
我的原始集群是使用
Terraform
的配置创建的:

  name     = "${var.cluster_name}-rg"
  location = "${var.location}"
}

resource "azurerm_virtual_network" "network" {
  name                = "${var.cluster_name}-vnet"
  location            = "${azurerm_resource_group.rg.location}"
  resource_group_name = "${azurerm_resource_group.rg.name}"
  address_space       = ["10.1.0.0/16"]
}

resource "azurerm_subnet" "subnet" {
  name                 = "${var.cluster_name}-subnet"
  resource_group_name  = "${azurerm_resource_group.rg.name}"
  address_prefixes     = ["10.1.0.0/24"]
  virtual_network_name = "${azurerm_virtual_network.network.name}"
}
为了让事情变得更简单,我决定先在没有节点池的情况下将子网添加到网络中。这会让我想到这个地形图:

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # azurerm_subnet.subnet2 will be created
  + resource "azurerm_subnet" "subnet2" {
      + address_prefix                                 = (known after apply)
      + address_prefixes                               = [
          + "10.2.0.0/22",
        ]
      + enforce_private_link_endpoint_network_policies = false
      + enforce_private_link_service_network_policies  = false
      + id                                             = (known after apply)
      + name                                           = "me-test-k8s-subnet2"
      + resource_group_name                            = "me-test-k8s-rg"
      + virtual_network_name                           = "me-test-k8s-vnet"
    }
希望有人能给我解释一下为什么会发生这个错误

最好的,
Pim在虚拟网络中创建子网时,必须检查子网是否未跳出网络范围

您的网络掩码刚刚超出范围:
10.1.0.0/16

First host: 10.1.0.1    
Last  host: 10.1.255.254
您正在尝试创建子网
10.2.0.0/22


例如,为了不与已创建的子网重叠,可以接受
10.1.4.0/22

如我的评论和某人的回答中所述,Azure抛出此错误,因为您试图将10.2.0.0/22子网添加到10.1.0.0/16网络。ie-10.2.0.0/22不是该网络的一部分

我还想指出,当你运行一个
计划时,它没有向Azure提交实际的API调用来进行更改,这就是为什么在你运行计划时一切看起来都很好,但当你尝试应用它时Azure会抱怨的原因。我认为这个解释很好。适用的摘录包括:

一旦您对声明的配置感到满意,您可以询问 Terraform为其生成执行计划。中的计划命令 CLI用于根据配置生成执行计划。 执行计划告诉您Terraform需要进行哪些更改 使您当前的基础架构处于 配置

如果您接受该计划,您可以指示Terraform应用更改。Terraform将进行实现更改所需的API调用。如果出现任何问题,terraform将不会尝试自动将基础结构回滚到运行apply之前的状态。这是因为apply遵守计划


我可能误解了您的设置,但您是否将10.2.0.0/22子网添加到10.1.0.0/16网络?ie-10.2.0.0/22不是网络的一部分,我也面临这个问题。。最后移除了群集并创建了一个更大的sunbetrange@Howard_Roark对的我有一个不能更改的/24子网。但是,如果正确,我可以向网络添加第二个子网,迁移所有内容并完成。但我应该能够将/22子网添加到/16 vnet中,对吗?当您有一个10.1.0.0/16网络,它包含所有看起来像10.1.x.y的IP(即,它们都需要从10.1开始)。这里您添加的10.2不是该范围的一部分问题是/24太小。我应该能够将/22子网添加到/16网络,对吗?是的,您可以使用10.1.0.0/22,但您将与10.1.0.0/24重叠。谢谢,我会尝试一下。重叠不是直接的问题,因为我要迁移到新的子网。我想在这种情况下,所有符合vnet的内容都会重叠,对吗?例如,你可以使用10.1.4.0/22,它将是OKThank@Oleh,也许在解释答案中添加这一点也是一个不错的补充。我刚刚接受了它,现在正在创建资源