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

Minikube中Kubernetes Service无法访问问题求助

问题排查与修复方案

1. Service 选择器不匹配(核心问题)

你的Deployment定义的Pod标签是app: my-app,但Service的selector设置为app: my-service,这会导致Service无法关联到任何Pod,无法正常转发流量。

修复方法:修改Service的spec.selector为app: my-app,与Pod标签保持一致:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  type: LoadBalancer
  selector:
    app: my-app  # 修正为与Pod匹配的标签
  ports:
    - port: 8080
      targetPort: 8080

2. 访问端口错误

从kubectl get services结果来看,Service的NodePort是30558,但你尝试访问的是127.0.0.1:30588,端口号不匹配。若使用NodePort访问,应使用127.0.0.1:30558(或Minikube节点IP+该端口)。

3. Ingress 配置问题

你的Ingress使用了ingressClassName: my-ingress,但Minikube默认Ingress Controller的class是nginx,除非你手动创建过my-ingress的IngressClass,否则该配置无效。

修复方法:将ingressClassName改为nginx,或删除该字段(若集群默认IngressClass为nginx):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx  # 修正为默认的nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 8080

另外,使用Ingress前需确保Minikube已启用Ingress插件:

minikube addons enable ingress

4. 验证步骤

修复配置后,重新应用文件:

kubectl apply -f k8.yaml

执行以下命令验证状态:

  • 检查Pod运行状态:kubectl get pods,确保状态为Running
  • 检查Service关联情况:kubectl describe service my-service,查看Endpoints字段是否包含Pod的IP
  • 若使用minikube tunnel,直接访问127.0.0.1:8080即可(LoadBalancer的EXTERNAL-IP为127.0.0.1,Port为8080),无需使用NodePort

内容的提问来源于stack exchange,提问作者Luca Farsetti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:09:17