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

AKS集群中无法创建指向KubeSphere的Nginx Ingress路由

问题根因
  • 你当前ks-console服务类型为LoadBalancer,AKS会自动为该类型服务创建独立公网负载均衡器,也就是你看到的20.248.217.111这个额外IP,这就是额外产生成本的原因,和你使用Ingress统一入口的目标冲突。
  • 现有Ingress规则配置错误:全路径(/及所有子路径)都转发到ks-console后端,导致Azure负载均衡器发往Ingress控制器的/healthz健康检查请求也被转发给ks-console,ks-console无该接口因此返回302重定向,就是你日志里反复出现的302记录来源,长期会导致LB判定后端实例不健康。
  • 现有规则未配置你需要的路径前缀分流逻辑,无法实现/ksconsole访问Kubesphere、/tekton-dashboard访问Tekton的需求,且rewrite规则引用的$2捕获组不存在,规则不生效。
修复步骤

1. 回收ks-console的独立LB

将ks-console服务类型从LoadBalancer改为ClusterIP,AKS会自动回收对应的独立公网LB。后续所有需要通过Ingress暴露的服务,都使用ClusterIP类型即可,无需再创建LoadBalancer类型服务。
执行命令直接修改:

kubectl patch svc ks-console -n kubesphere-system -p '{"spec":{"type":"ClusterIP"}}'

2. 替换为正确的Ingress规则

删除你之前创建的错误Ingress资源,新建如下配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: shared-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 让/healthz请求由Ingress控制器直接响应,不转发到后端,解决健康检查异常问题
    nginx.ingress.kubernetes.io/server-snippet: |
      location = /healthz {
        return 200 "ok";
        add_header Content-Type text/plain;
      }
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      # Kubesphere控制台路由
      - path: /ksconsole(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: ks-console
            port:
              number: 80
        # 重写路径:去掉/ksconsole前缀后转发给后端
        nginx.ingress.kubernetes.io/rewrite-target: /$2
      # Tekton仪表盘路由,请替换为你环境中实际的服务名和端口
      - path: /tekton-dashboard(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: tekton-dashboard
            port:
              number: 9097
        nginx.ingress.kubernetes.io/rewrite-target: /$2

注意:Kubesphere和Tekton默认配置下可能存在静态资源路径硬编码问题,需要在对应服务启动参数中配置base路径为/ksconsole/和/tekton-dashboard/,否则访问时会出现静态资源404。

3. 验证效果

  • 等待1-2分钟配置生效后,访问Ingress控制器的公网IP20.92.133.79/healthz,应返回ok状态码200,控制器日志中不会再出现健康检查请求转发到ks-console的302记录。
  • 访问http://20.92.133.79/ksconsole可打开Kubesphere控制台,访问http://20.92.133.79/tekton-dashboard可打开Tekton仪表盘。
  • 后续新增需要暴露的服务,只需在上述Ingress中新增对应path规则即可,整个集群仅保留Ingress控制器这一个公网LB,不会再产生额外LB成本。
日志说明

你之前看到的日志均为Azure LB的正常健康检查流量:源IP10.240.0.4是Azure LB的内部代理地址,请求路径为/healthz,User-Agent为Load Balancer Agent,因之前的Ingress规则匹配所有路径,该请求被转发到ks-console后端,ks-console收到未知路径请求返回302重定向,不属于业务服务报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:16:06