Azure VM上Elasticsearch 8.6.1的Python连接报错求助
解决Azure虚拟机上Elasticsearch 8.6.1的Python连接问题
核心问题定位
报错WinError 10061是因为你的Python代码试图连接本地localhost:9200,但Elasticsearch实际运行在Azure虚拟机上,本地localhost无法指向远端VM,导致连接被主动拒绝。
具体修复步骤
1. 修正连接地址为Azure虚拟机的公网IP/域名
把代码中的https://localhost:9200替换成Azure VM的公网IP或自定义域名,示例:
es = Elasticsearch('https://<你的VM公网IP>:9200', ca_certs=CA_CERT, basic_auth=(USER_ID, ELASTIC_PASSWORD))
2. 在Azure网络安全组(NSG)中开放9200端口
你当前仅开放了5601端口(Kibana),但Elasticsearch默认HTTPS端口为9200,需在Azure门户给VM对应的NSG添加入站规则:
- 端口范围:9200
- 协议:TCP
- 源:开发环境可暂时设为
Any,生产环境建议限制为特定IP段
3. 验证Elasticsearch端口配置
检查elasticsearch.yml中http.port是否为默认的9200(若被修改需同步到代码):
http.port: 9200
4. 测试网络连通性
在本地用PowerShell测试VM的9200端口是否可达:
Invoke-WebRequest -Uri https://<你的VM公网IP>:9200 -CertificateFile .\http_ca.crt
若返回Elasticsearch集群信息,说明网络与证书配置正常,再回到Python代码调试。
5. 确认Elasticsearch网卡绑定状态
在Azure虚拟机上执行以下命令,确认Elasticsearch监听所有网卡:
netstat -tulpn | grep 9200
输出显示0.0.0.0:9200或:::9200即表示绑定正常。
额外注意事项
- 保持
xpack.security.enabled: true是合规做法,无需关闭安全验证 - 若使用自定义域名,需确保域名解析正确,且CA证书的SAN字段包含该域名(避免SSL验证失败)
内容的提问来源于stack exchange,提问作者Greg Williams
相关产品推荐
相关产品推荐

