You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s部署Elasticsearch:配置内部永久访问地址与开放9300端口

问题解决:Kubernetes中Elasticsearch永久内部访问URL配置与9300端口连接问题

一、设置永久内部访问URL(通过Kubernetes Service)

Pod的IP是临时资源,重启或重建后会变更,需创建Service提供稳定的集群内部访问地址:

  1. 创建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可访问
  1. 应用配置:
kubectl apply -f es-service.yaml
  1. 集群内访问方式:
    其他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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:53:14