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

Azure Kubernetes部署MLflow时Ingress访问异常问题排查

问题现象

在Azure Kubernetes Service部署MLflow服务时出现访问异常:

  • 关联LoadBalancer类型Service时,通过Service公网IP的5000端口可正常访问MLflow服务
  • 配置Nginx Ingress暴露服务后:
    • 访问Ingress控制器公网IP的80端口,返回Nginx 404 not found
    • 访问Ingress控制器公网IP的5000端口请求超时,无法建立连接
现有部署配置

Deployment 配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mlflow-deployment
  labels:
    app: mlflow
spec:
  selector:
    matchLabels:
      app: mlflow
  replicas: 1
  template:
    metadata:
      labels:
        app: mlflow
    spec:
      containers:
        - name: mlflow
          image: rjtshrm/mlflow:latest
          args: ["--backend-store-uri", "postgresql://psql:_Reply2022@mlflopgsql.postgres.database.azure.com:5432/postgres?sslmode=require", "--default-artifact-root", "wasbs://mlflow@mlflowsmodeltorage.blob.core.windows.net", "--host", "0.0.0.0"]
          ports:
            - containerPort: 5000

LoadBalancer 类型 Service 配置

apiVersion: v1
kind: Service
metadata:
  name: mlflow
  labels:
    app: mlflow
spec:
  selector:
    app: mlflow
  type: LoadBalancer
  ports:
    - port: 5000
      targetPort: 5000

Ingress 配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mlflow-server-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: mlflow-server-ingress
  rules:
    - http:
        paths:
          - path: /(.*)
            pathType: Prefix
            backend:
              service:
                name: mlflow
                port:
                  number: 5000

Ingress 控制器安装命令

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx --namespace default --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
故障根因

共3处配置错误导致访问异常:

  1. 端口认知错误:默认安装的Nginx Ingress控制器,其LoadBalancer Service仅监听80(HTTP)、443(HTTPS)两个端口,未开放5000端口的监听,访问该端口必然超时。Ingress为七层流量入口,设计逻辑是通过80/443端口接收流量,再根据域名、路径规则转发到后端不同服务,无需使用后端服务的业务端口访问Ingress。
  2. IngressClass配置不匹配:通过官方Helm chart安装的ingress-nginx控制器,默认创建的IngressClass名称为nginx,现有Ingress配置中填写的mlflow-server-ingress不存在对应控制器,因此配置的路由规则根本没有被Nginx控制器加载,访问80端口时匹配不到任何规则,返回默认404页面。
  3. 重写规则配置错误:Ingress注解中配置的路径正则为/(.*),仅存在1个捕获组对应$1,但rewrite-target配置为/$2,$2无匹配内容,即使规则被加载也会出现路径转发异常。
修复方案
  1. 替换原有Ingress配置为以下内容,删除不必要的正则、重写注解,修正IngressClass名称:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mlflow-server-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: mlflow
                port:
                  number: 5000
  1. 执行kubectl apply -f 上述ingress配置文件.yaml应用配置,等待10秒左右待Nginx控制器加载规则。
  2. 直接访问Ingress控制器公网IP的80端口,即可正常打开MLflow服务页面,无需加5000端口。
补充说明
  • 原有MLflow对应的LoadBalancer Service可根据需求保留,也可修改为ClusterIP类型,所有公网流量通过Ingress统一接入即可。
  • 若有特殊场景必须通过5000端口访问Ingress,需要在安装ingress-nginx时额外添加对应参数暴露端口,该操作不符合Ingress常规使用逻辑,非必要不配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:15:39