如何用Terraform为AKS集群配置Azure CNI并让Pod使用VPN网段
解决方案:让Azure CNI模式的AKS Pod通过站点到站点VPN访问本地网络
Azure CNI模式下,Pod会直接分配所在VNet子网的IP地址,因此不需要(也不能)手动指定pod_cidr。要实现Pod通过VPN访问本地网络,只需按以下步骤操作:
1. 确认子网配置
确保AKS节点池将部署到属于172.30.0.0/16网段的VNet子网,且该子网所在VNet已完成站点到站点VPN连接(你已完成网关部署,只需确认子网归属)。同时要预留足够IP:子网的IP范围需满足节点数 × 每个节点的max_pods数量(你的配置是每个节点100个Pod,所以子网要预留对应规模的IP段)。
2. 修改Terraform代码,关联子网
步骤2.1 添加子网ID变量
在你的变量配置中新增vnet_subnet_id:
# AKS cluster related variables cluster_name = "test-cluster" dns_prefix = "testjana" kubernetes_version = "1.22.15" vnet_subnet_id = "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.Network/virtualNetworks/xxx/subnets/xxx" # 替换为你的子网ID # ... 其他变量保持不变
步骤2.2 启用节点池的子网关联
在azurerm_kubernetes_cluster的default_node_pool块中取消vnet_subnet_id的注释,传入变量:
default_node_pool { name = var.default_node_pool.name node_count = var.default_node_pool.node_count max_count = var.default_node_pool.max_count min_count = var.default_node_pool.min_count vm_size = var.default_node_pool.vm_size os_disk_size_gb = var.default_node_pool.os_disk_size_gb vnet_subnet_id = var.vnet_subnet_id # 启用此行 max_pods = var.default_node_pool.max_pods type = var.default_node_pool.agent_pool_type enable_node_public_ip = var.default_node_pool.enable_node_public_ip enable_auto_scaling = var.default_node_pool.enable_auto_scaling tags = merge(var.common_tags) }
3. 给AKS身份分配网络权限
AKS需要权限管理子网的IP分配,需为AKS的系统身份添加网络参与者角色到目标VNet:
resource "azurerm_role_assignment" "aks_vnet_contributor" { scope = var.vnet_id # 替换为你的VNet资源ID role_definition_name = "Network Contributor" principal_id = azurerm_kubernetes_cluster.k8s_cluster.kubelet_identity[0].object_id }
4. 验证连通性
部署完成后:
- 执行
kubectl get pods -o wide查看Pod的IP,确认属于172.30.0.0/16网段 - 在Pod内执行
ping <本地网络IP>测试连通性,确保VPN路由已正确包含该网段
内容的提问来源于stack exchange,提问作者Jananath Banuka
相关产品推荐
相关产品推荐

