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 访问修复步骤
- 获取Minikube节点IP
Minikube在Mac+Podman环境下,节点IP并非localhost,执行以下命令获取:
minikube ip
- 验证Service状态
确认NodePort类型的Service已正常创建:
kubectl get svc elasticsearch-sample-es-http
检查输出中TYPE为NodePort,PORT(S)列显示9200:31920/TCP(与配置的nodePort一致)。
- 正确访问地址
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:<获取到的密码>
- 端口配置校验
确认Pod的9200端口正常监听:
kubectl describe pod <elasticsearch-pod-name> | grep -A 10 "Ports"
确保targetPort与Pod暴露的端口一致。
Ingress 访问配置步骤
- 启用Minikube Ingress插件
minikube addons enable ingress
等待插件部署完成,可通过kubectl get pods -n kube-system确认Ingress Controller pod处于Running状态。
- 创建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
- 应用Ingress配置
kubectl apply -f es-ingress.yaml
- 配置本地Hosts
编辑/etc/hosts文件,添加一行映射:
<minikube-ip> es.local
- 访问测试
浏览器访问https://es.local,同样需处理证书安全提示;或用curl测试:
curl -k https://es.local -u elastic:<获取到的密码>
- 故障排查
- 查看Ingress状态:
kubectl describe ingress elasticsearch-ingress - 查看Ingress Controller日志:
kubectl logs -n kube-system <ingress-nginx-controller-pod-name>
内容的提问来源于stack exchange,提问作者Shubham Gupta
相关产品推荐
相关产品推荐

