最近我发现我的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
答案 0 :(得分:1)
在虚拟网络中创建子网时,必须检查它是否未跳出网络范围。
您的网络掩码刚刚超出范围: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
。
答案 1 :(得分:1)
如我的评论和某人的回答中所述,Azure引发此错误,因为您试图将10.2.0.0/22子网添加到10.1.0.0/16网络中。即10.2.0.0/22不属于该网络。
我还要指出的是,当您运行plan
时,没有向Azure提交实际的API调用来进行更改,这就是为什么在您运行计划时一切正常的原因,但是对于Azure尝试应用时投诉。我认为解释很好in this tutorial。适用的摘录为:
一旦对声明的配置满意,您可以询问 Terraform为其生成执行计划。中的计划命令 CLI用于根据配置生成执行计划。 执行计划告诉您Terraform需要进行哪些更改 使您当前的基础架构进入您声明的状态 配置。
如果您接受该计划,则可以指示Terraform应用更改。 Terraform将进行实施更改所需的API调用。如果发生任何错误,terraform将不会尝试将基础结构自动回滚到运行Apply之前的状态。这是因为应聘符合计划