Azure中通过OpenVPN部署应用至ILB ASE失败问题求助
问题排查与解决方案
针对你通过P2S VPN连接后无法访问跨对等VNet的ILB ASE问题,按以下步骤逐一排查:
1. 先纠正Curl命令的语法错误
你的curl命令存在多余引号,会导致路径解析和HTTP头异常,修正后命令如下:
curl --interface "${{ env.INTERFACE_NAME }}" -X POST 'https://10.1.1.4/api/deploy' \ -H 'Authorization: Bearer ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}' \ -H 'Host: my-web-app-name' \ -H 'Content-Type: application/zip' \ --data-binary '@/home/runner/work/my-repo-name/my-repo-name/my-app-name/bin/Release/net6.0/my-app-name.zip'
- 移除
Host头值的双引号,HTTP头字段值不需要引号包裹 - 去掉文件路径中的双引号,否则Shell会将带引号的路径视为无效路径
同时建议在GitHub Actions中添加验证步骤,确认VPN接口正常:
- name: Validate VPN Interface run: | echo "Using interface: ${{ env.INTERFACE_NAME }}" ip addr show ${{ env.INTERFACE_NAME }}
2. 明确ILB ASE的ICMP限制
ILB ASE默认不响应ICMP(ping)请求,ping失败是预期行为,不要用ping验证连通性,改用curl或telnet测试443端口:
# 本地测试 telnet 10.1.1.4 443 # GitHub Runner测试 curl --interface tun0 https://10.1.1.4 -I -H 'Host: my-web-app-name'
3. 检查P2S客户端的路由表
连接VPN后,客户端(本地PC/GitHub Runner)必须存在到ILB ASE所在子网的路由:
- 本地Windows:运行
route print,确认目标为ASE子网的路由条目,下一跳指向VPN虚拟适配器 - Linux Runner:运行
ip route show,确认存在tun0接口到ASE子网的路由
如果缺失该路由,需在Azure门户的VPN网关「点到站点配置」中添加自定义路由,将ASE子网的CIDR加入客户端路由列表,重新生成.ovpn文件。
4. 修正VNet对等与路由表配置
你的路由表配置存在错误,正确配置如下:
- VPN VNet:无需给网关子网添加10.3.0.0/24的路由,只需在VNet对等设置中启用「允许远程虚拟网络使用我的网关或路由服务器」
- ASE VNet:
- 创建路由表,添加条目:目标
10.3.0.0/24,下一跳类型选择「VNet对等连接」,指定与VPN VNet的对等连接 - 将该路由表关联到ILB ASE所在的子网
- 在VNet对等设置中启用「使用远程虚拟网络的网关或路由服务器」
- 创建路由表,添加条目:目标
5. 验证NSG规则
- ASE子网NSG:添加入站规则,允许来自
10.3.0.0/24(P2S地址池)的HTTPS(443)流量 - VPN网关子网NSG:添加出站规则,允许到ASE子网443端口的流量
- ILB规则:确认ILB的负载均衡规则已开放443端口到Web应用实例
6. 测试ASE内部连通性
在ASE所在VNet部署一台测试VM,执行curl命令访问ILB ASE的部署端点:
curl https://10.1.1.4/api/deploy \ -H 'Authorization: Bearer <你的发布令牌>' \ -H 'Host: my-web-app-name' \ -H 'Content-Type: application/zip' \ --data-binary '@test.zip'
如果VM能成功访问,说明问题出在P2S到ASE的路由/NSG配置;如果VM也无法访问,需检查ASE的ILB配置、Web应用的发布端点是否正常。
内容的提问来源于stack exchange,提问作者dperic00
相关产品推荐
相关产品推荐

