如何实现跨订阅让故障转移Kubernetes集群访问Azure Storage NFS文件共享
解决跨订阅K8s集群挂载Azure存储NFS共享的配置方案
我来帮你梳理下让备用订阅的K8s集群成功挂载主订阅NFS共享的关键步骤和修复点——毕竟跨订阅跨区域的VNet对等搭配Azure存储NFS访问,有几个容易被忽略的细节,你的超时问题大概率和这些有关。
1. 先搞定VNet对等的路由配置(核心!)
你提到创建对等时没配置路由选项,这很可能是导致超时的根本原因。跨区域VNet对等默认的“无路由配置”模式,没法保证K8s节点的流量能正确路由到存储账户所在的VNet。你需要调整两边对等连接的设置:
- 针对主订阅存储账户所在的VNet:找到和备用VNet的对等连接,启用「允许转发流量」,如果你的VNet有网关的话,也可以打开「允许网关传输」(纯VNet对等的话,前者就够了)。
- 针对备用订阅K8s集群所在的VNet:同样在对等连接设置里启用「允许转发流量」。
- 检查两边的路由表:确保K8s集群所在子网的路由表中,有自动生成的指向主订阅存储VNet的路由(通常是目标为存储VNet地址范围的路由,下一跳是VNet对等),别被自定义路由给覆盖了。
2. 验证存储账户的网络访问规则
你已经把备用VNet加入允许列表,但再确认几个细节:
- 存储账户的网络模式必须是「选定的虚拟网络和IP地址」,别勾选「允许受信任的Microsoft服务访问」(这个不影响NFS,但能避免不必要的规则干扰)。
- 确保备用VNet的子网范围已经正确添加到存储账户的允许列表里——虽然添加VNet会包含所有子网,但手动指定子网有时候能避免配置同步延迟的问题。
- 再确认下存储账户的NFS协议是启用状态,而且K8s节点池的VM SKU支持NFS(比如D系列、E系列都没问题,避开像B1s这类低端SKU)。
3. 调整K8s的挂载配置
跨订阅访问一定要用存储账户的专用端点,别用公共端点,否则流量走公网肯定会出问题:
- 存储账户绑定VNet后会生成专用FQDN,格式是
<存储账户名>.privatelink.file.core.windows.net,你需要用这个地址来配置K8s的PV。 - 给你一个PV配置示例,参考调整你的配置:
apiVersion: v1 kind: PersistentVolume metadata: name: cross-sub-nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: mystorageaccount.privatelink.file.core.windows.net path: /mystorageaccount/mynfsshare
- 检查K8s节点的NSG规则:确保节点允许出站的NFS相关端口——TCP 2049,还有RPC的111、4001、4002、4003端口,这些端口必须放开,否则连不上NFS服务。
4. 手动测试连通性(排障必备)
如果调整后还是超时,先从K8s节点上手动测试,定位问题:
- 登录到任意一个备用订阅的K8s节点,执行
telnet <存储专用FQDN> 2049,看能不能连通。如果不通,回到VNet对等和路由表排查网络路径。 - 执行
showmount -e <存储专用FQDN>,看能不能列出NFS共享。这个命令失败的话,要么是存储账户的NFS配置有问题,要么是网络规则没生效。 - 确认VNet对等的状态:两边的对等连接必须都是「已连接」状态,别是「等待接受」或「已断开」。
额外注意事项
- 跨区域VNet对等有带宽限制,后续如果挂载后性能不佳,可以考虑调整带宽,但先解决连通性问题。
- 如果备用K8s用的是Azure CNI模式,确保节点IP在备用VNet的子网范围内,而且没有被NSG或防火墙阻挡。
- 你的两个区域是配对区域,这完全没问题,跨区域VNet对等支持配对区域的配置。
内容的提问来源于stack exchange,提问作者James Hancock
相关产品推荐
相关产品推荐

