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

Mac下Minikube(Podman)中ECK Elasticsearch NodePort/Ingress访问问题

问题背景

在Mac系统上使用Minikube(Podman驱动)搭建Kubernetes集群,部署ECK Elasticsearch 7.15.2服务后,仅能通过kubectl port-forward service/elasticsearch-sample-es-http 3002:9200命令从浏览器访问,尝试用NodePort或Ingress实现外部访问均失败。

提供的Elasticsearch配置文件如下:

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: elasticsearch-sample
spec:
  version: 7.15.2
  nodeSets:
  - name: default
    config:
      node.store.allow_mmap: false
    podTemplate:
      metadata: 
        labels:
          app: elastic-search
      spec:
        securityContext:
          runAsUser: 1000
          runAsGroup: 1000
          fsGroup: 1000
    count: 2
  http:
    service:
      spec:
        type: NodePort
        ports: 
          - name: https
            port: 9200
            targetPort: 9200
            protocol: TCP
            nodePort: 31920

NodePort 访问修复步骤

  1. 获取Minikube节点IP
    Minikube在Mac+Podman环境下,节点IP并非localhost,执行以下命令获取:
minikube ip
  1. 验证Service状态
    确认NodePort类型的Service已正常创建:
kubectl get svc elasticsearch-sample-es-http

检查输出中TYPE为NodePort,PORT(S)列显示9200:31920/TCP(与配置的nodePort一致)。

  1. 正确访问地址
    ECK默认启用HTTPS加密,需用https://<minikube-ip>:31920访问:
  • 浏览器访问时会触发证书安全提示,需手动选择信任或跳过验证
  • 用curl测试时需加上-k跳过证书校验,同时提供elastic账号密码:
    # 先获取elastic密码
    kubectl get secret elasticsearch-sample-es-elastic-user -o go-template='{{.data.elastic | base64decode}}'
    # 测试访问
    curl -k https://<minikube-ip>:31920 -u elastic:<获取到的密码>
    
  1. 端口配置校验
    确认Pod的9200端口正常监听:
kubectl describe pod <elasticsearch-pod-name> | grep -A 10 "Ports"

确保targetPort与Pod暴露的端口一致。


Ingress 访问配置步骤

  1. 启用Minikube Ingress插件
minikube addons enable ingress

等待插件部署完成,可通过kubectl get pods -n kube-system确认Ingress Controller pod处于Running状态。

  1. 创建Ingress资源
    新建es-ingress.yaml文件,内容如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: elasticsearch-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" # 后端ES服务用HTTPS
spec:
  rules:
  - host: es.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: elasticsearch-sample-es-http
            port:
              number: 9200
  1. 应用Ingress配置
kubectl apply -f es-ingress.yaml
  1. 配置本地Hosts
    编辑/etc/hosts文件,添加一行映射:
<minikube-ip> es.local
  1. 访问测试
    浏览器访问https://es.local,同样需处理证书安全提示;或用curl测试:
curl -k https://es.local -u elastic:<获取到的密码>
  1. 故障排查
  • 查看Ingress状态:kubectl describe ingress elasticsearch-ingress
  • 查看Ingress Controller日志:kubectl logs -n kube-system <ingress-nginx-controller-pod-name>

内容的提问来源于stack exchange,提问作者Shubham Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:50:33