通过OpenVPN连接Azure AKS私有集群后无法执行kubectl命令的解决办法
修复Azure私有AKS通过OpenVPN无法访问API服务器的问题
排查与修复步骤
1. 开启堡垒机的IP转发功能
堡垒机作为OpenVPN服务器,必须开启IP转发才能将客户端流量转发到AKS私有网络:
- 先确认当前状态:
若输出为sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 0,执行以下命令永久开启:echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf
2. 验证OpenVPN的路由推送配置
确保OpenVPN服务器向客户端推送了AKS集群所在私有网段的路由,让客户端流量能正确导向AKS网络:
- 打开OpenVPN服务器配置文件(通常为
/etc/openvpn/server.conf),确认包含类似规则(替换为你的AKS私有网段,比如覆盖API服务器10.1.4.0/24及集群节点网段):push "route 10.1.0.0 255.255.0.0" - 修改后重启OpenVPN服务:
systemctl restart openvpn@server - 客户端连接VPN后,检查本地路由表:
- Windows:执行
route print,确认AKS网段路由指向VPN虚拟网卡 - Linux/macOS:执行
route -n或netstat -rn,确认对应路由存在
- Windows:执行
3. 检查堡垒机的防火墙与Azure NSG规则
需要确保堡垒机的本地防火墙和Azure网络安全组(NSG)允许流量转发:
- 本地防火墙(以iptables为例):添加规则允许VPN客户端访问AKS API的443端口,以及返回流量:
执行# 允许VPN隧道接口的入站443流量 iptables -A INPUT -i tun0 -p tcp --dport 443 -j ACCEPT # 允许堡垒机出站到AKS API的443流量 iptables -A OUTPUT -o eth0 -d 10.1.4.4 -p tcp --dport 443 -j ACCEPT # 允许转发VPN客户端到AKS的流量 iptables -A FORWARD -i tun0 -o eth0 -d 10.1.4.4 -p tcp --dport 443 -j ACCEPTiptables-save > /etc/iptables/rules.v4保存规则,避免重启丢失。 - Azure NSG:检查堡垒机所在子网的NSG出站规则,确保允许访问AKS API服务器私有网段的443端口;同时检查AKS所在子网的NSG入站规则,允许堡垒机IP的443流量访问。
4. 配置OpenVPN的NAT规则
添加SNAT规则,让VPN客户端的流量通过堡垒机的网卡转发到AKS网络时,源IP被替换为堡垒机的私有IP:
# 替换<VPN_CLIENT_SUBNET>为你的OpenVPN客户端网段(比如10.8.0.0/24) iptables -t nat -A POSTROUTING -o eth0 -s <VPN_CLIENT_SUBNET> -j MASQUERADE
5. 确认AKS API服务器的访问控制
检查AKS是否配置了API服务器授权IP范围,确保堡垒机的私有IP在允许列表内:
- 查询当前授权IP:
az aks show -g <RESOURCE_GROUP> -n <AKS_CLUSTER_NAME> --query apiServerAccessProfile.authorizedIpRanges - 若堡垒机IP不在列表中,添加后更新AKS:
也可临时清空授权IP范围测试:az aks update -g <RESOURCE_GROUP> -n <AKS_CLUSTER_NAME> --api-server-authorized-ip-ranges "<堡垒机私有IP>/32,其他允许IP"az aks update -g <RESOURCE_GROUP> -n <AKS_CLUSTER_NAME> --api-server-authorized-ip-ranges ""
6. 分层测试连通性
- 客户端连接VPN后,先ping堡垒机的私有IP,确认VPN基础连通正常
- 再ping AKS API服务器IP(10.1.4.4),若ping不通,重点排查路由或防火墙规则
- 若ping通但telnet 443失败,检查端口级防火墙和AKS API的访问控制
内容的提问来源于stack exchange,提问作者Jananath Banuka
相关产品推荐
相关产品推荐

