ZAP Proxy在K8s环境中无法与HTTPS服务通信问题求助
当前配置信息
K8s运行命令
command: [ "zap.sh" ] args: [ "-daemon", "-port", "9090", "-config", "api.disablekey=true", "-config", "api.addrs.addr.name=.*", "-config", "api.addrs.addr.regex=true", "-config", "view.mode=attack","-host","0.0.0.0", "-config","network.localServers.mainProxy.behindNat=true","-config", "network.connection.timeOutInSecs=120" , "-config", "network.httpState.timeoutInSecs=120","-silent"]
Dockerfile
FROM softwaresecurityproject/zap-bare ENV HUD=false ENV API_DISABLEKEY=true ENV ZAP_AUTO_UPDATE=false ENV ZAP_PORT = 9090 EXPOSE 9090
问题现象
- 访问HTTP服务完全正常;
- 访问HTTPS服务
https://my-service.com/v1/my-endpoint时返回HTTP 504错误,错误提示:
Failed to read
https:https://my-service.com/v1/my-endpointwithin 20 seconds, check to see if the site is available and if so consider adjusting ZAP's read time out in the Connection options panel.
注:已关闭HUD,因为需要同时兼容HTTP和HTTPS服务(HUD会强制将HTTP请求转为HTTPS)。
补充:直接在环境中执行curl https://my-service.com/v1/my-endpoint访问目标API时,无报错但也没有任何响应。
排查与解决建议
确认目标服务的可达性
直接curl无响应说明目标服务本身可能存在性能问题,或者ZAP所在Pod与目标服务的网络连通性有问题。建议进入ZAP Pod内部执行curl测试,验证集群内到目标服务的网络是否通畅,以及服务能否正常返回响应。检查ZAP超时配置是否生效
错误提示显示超时时间为20秒,但你已在命令行设置120秒超时,说明配置可能未正确加载。可通过ZAP API查看当前生效的超时参数:curl http://<zap-service-ip>:9090/JSON/network/view/connectionTimeout/ curl http://<zap-service-ip>:9090/JSON/network/view/httpStateTimeout/如果参数不符,尝试调整配置方式:比如在Dockerfile中用
ZAP_OPTIONS环境变量统一传递所有配置参数,或检查命令行参数是否存在拼写错误。排查HTTPS相关配置
ZAP处理HTTPS请求时,可能存在证书信任问题,或目标服务需要特定代理设置。可尝试在ZAP中导入目标服务的根证书,或检查ZAP的代理模式是否适配目标服务的HTTPS配置。检查K8s网络策略
确认K8s集群的网络策略是否允许ZAP Pod访问目标HTTPS服务的443端口,避免因网络策略限制导致连通失败。
内容的提问来源于stack exchange,提问作者Sal-laS

