K8s部署Elasticsearch:配置内部永久访问地址与开放9300端口
问题解决:Kubernetes中Elasticsearch永久内部访问URL配置与9300端口连接问题
一、设置永久内部访问URL(通过Kubernetes Service)
Pod的IP是临时资源,重启或重建后会变更,需创建Service提供稳定的集群内部访问地址:
- 创建Service配置文件(例如
es-service.yaml):
apiVersion: v1 kind: Service metadata: name: elasticsearch labels: app: elasticsearch spec: selector: app: elasticsearch # 与Deployment的Pod标签匹配,实现关联 ports: - name: http port: 9200 targetPort: 9200 - name: transport port: 9300 targetPort: 9300 type: ClusterIP # 默认类型,仅集群内部Pod可访问
- 应用配置:
kubectl apply -f es-service.yaml
- 集群内访问方式:
其他Pod可直接通过服务名称+端口访问:
- REST API访问:
http://elasticsearch:9200 - 集群通信端口访问:
elasticsearch:9300(注意此为TCP端口,不支持HTTP请求)
二、解决9300端口连接拒绝问题
你用curl访问9300被拒绝的核心原因是:Elasticsearch的9300端口是TCP传输协议(用于节点间集群通信),而非HTTP协议,curl默认发送HTTP请求,因此无法建立连接。按以下步骤排查修复:
1. 检查9300端口监听状态
进入Elasticsearch Pod内部,验证端口是否正常监听:
kubectl exec -it <elasticsearch-pod-name> -- netstat -tulpn | grep 9300
若输出显示0.0.0.0:9300,说明端口已对外监听;若仅显示127.0.0.1:9300,则需调整网络配置。
2. 修改Elasticsearch配置,允许外部访问9300
在你的Deployment YAML中,添加network.host环境变量,让Elasticsearch监听所有网卡:
# 在containers的env字段下新增 - name: network.host value: "0.0.0.0"
更新Deployment:
kubectl apply -f <你的Elasticsearch部署YAML文件>
3. 正确验证9300端口连通性
使用TCP工具验证,比如nc或telnet:
# 使用nc验证 nc -zv 10.233.75.8 9300 # 或使用telnet telnet 10.233.75.8 9300
返回成功提示即说明端口已正常开放。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

