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

MicroK8S集群中Ingress Controller指向错误服务的排查求助

MicroK8S集群中Ingress Controller指向错误服务的排查求助

看起来你遇到的问题主要是Ingress规则的路径冲突,还有Dashboard相关配置的小疏漏,咱们一步步来梳理解决:

1. 核心问题:Ingress路径冲突导致访问根路径总是命中Hello World应用

你现在定义了两个Ingress资源,它们的路径都是/。Ingress Controller在匹配规则时,当多个规则的路径完全相同时,会优先匹配创建时间更早的那个(或者按字典序,取决于具体实现),这就是为什么你访问根路径总是跳转到Hello World而不是Dashboard。

解决这个问题有两种常用方案:

方案A:给Dashboard设置独立的访问路径

修改dashboard-ingress的路径为/dashboard,这样访问http://192.168.50.251/dashboard就会指向Dashboard了:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
spec:
  rules:
  - http:
      paths:
      - path: /dashboard
        pathType: Prefix
        backend:
          service:
            name: dashboard-service
            port:
              number: 443

方案B:用不同的主机名区分服务

在本地主机的hosts文件(Windows是C:\Windows\System32\drivers\etc\hosts,Linux/macOS是/etc/hosts)中添加一条映射:192.168.50.251 dashboard.local,然后修改dashboard-ingress配置主机名:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
spec:
  rules:
  - host: dashboard.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: dashboard-service
            port:
              number: 443

之后访问https://dashboard.local就会直接指向Dashboard了。

2. 修复Dashboard Service的配置错误

你当前的dashboard-service有两个关键问题,导致它根本找不到Dashboard的Pod:

  • 选择器标签错误:Kubernetes Dashboard的Pod默认标签是k8s-app: kubernetes-dashboard(你可以用microk8s kubectl get pods -n kube-system -l k8s-app=kubernetes-dashboard确认),而你写的是app.kubernetes.io/name: kubernetes,完全不匹配。
  • 目标端口错误:Dashboard容器的默认端口是8443,不是443,你需要把targetPort改成8443。

修正后的dashboard-service配置如下:

apiVersion: v1
kind: Service
metadata:
  name: dashboard-service
spec:
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 443
    targetPort: 8443
    type: NodePort

3. 额外注意:Ingress访问HTTPS服务的适配

因为Dashboard本身是HTTPS服务,而你的Ingress当前是HTTP规则,访问时可能会出现证书错误或者跳转问题。如果遇到这种情况,可以给dashboard-ingress配置TLS(不过需要先准备证书),或者先通过NodePort直接测试Dashboard是否能正常访问:

# 先看dashboard-service的NodePort端口
microk8s kubectl get service dashboard-service
# 然后访问https://192.168.50.251:<NodePort>测试

最后执行步骤

  1. 把上述修正后的内容更新到你的manifest.yml中
  2. 重新应用配置:microk8s kubectl apply -f manifest.yml
  3. 验证Service和Pod的关联:microk8s kubectl get endpoints dashboard-service,如果能看到Dashboard Pod的IP,说明关联成功
  4. 测试访问对应的Ingress路径或主机名

备注:内容来源于stack exchange,提问作者halfer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:39:28