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

KServe sklearn-iris示例请求遇302认证问题,求解决方案

KServe sklearn-iris模型302认证问题解决方案

一、完成Dex认证并成功连接

CLI方式获取Token并请求

  1. 先获取Dex服务地址:
    kubectl get svc dex -n auth
    
    集群内访问用ClusterIP,外部访问需确认NodePort或Ingress配置。
  2. 发送认证请求获取access_token:
    curl -k -X POST https://<dex-service-address>/token \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -d "grant_type=password" \
      -d "username=<你的Kubeflow用户名>" \
      -d "password=<你的Kubeflow密码>" \
      -d "client_id=kubeflow-oidc-authservice" \
      -d "client_secret=kubeflow-oidc-authservice-secret"
    
    注:client_id和secret是Kubeflow默认值,若有修改需对应调整,可通过kubectl get secrets -n auth查看。
  3. 用拿到的access_token发送预测请求:
    curl -k -H "Authorization: Bearer <获取到的access_token>" \
      https://<KServe-Ingress地址>/v1/models/sklearn-iris:predict \
      -d @input.json
    

浏览器Cookie方式

  1. 访问Kubeflow登录页面完成登录,打开浏览器开发者工具(F12),在Cookie中找到authservice_session字段并复制其值。
  2. 带上Cookie发送请求:
    curl -k -H "Cookie: authservice_session=<复制的Cookie值>" \
      https://<KServe-Ingress地址>/v1/models/sklearn-iris:predict \
      -d @input.json
    
    之前浏览器返回404,大概率是Istio网关未正确路由Dex登录路径,可检查Kubeflow的Istio虚拟服务配置。

二、绕过Dex认证(仅用于测试环境)

方法1:给目标InferenceService配置允许匿名访问的AuthorizationPolicy

在kserve-test命名空间创建配置文件allow-all-authz.yaml:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-sklearn-iris
  namespace: kserve-test
spec:
  rules:
  - {}
  selector:
    matchLabels:
      serving.kubeflow.org/inferenceservice: sklearn-iris

应用配置:

kubectl apply -f allow-all-authz.yaml

方法2:修改Authservice配置豁免KServe预测路径

  1. 编辑Authservice的配置映射:
    kubectl edit configmap authservice -n auth
    
  2. 在config.yaml的skip_auth_urls字段中添加KServe的预测路径:
    skip_auth_urls:
      - "/v1/models/*:predict"
      - "/v1/models/*:explain"
    
  3. 重启Authservice生效:
    kubectl rollout restart deployment authservice -n auth
    

方法3:配置Istio虚拟服务直接路由到Predictor服务

创建虚拟服务配置kserve-bypass-auth.yaml:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sklearn-iris-bypass
  namespace: kserve-test
spec:
  hosts:
    - "<你的Ingress域名/IP>"
  gateways:
    - kubeflow-gateway
  http:
    - match:
        - uri:
            prefix: "/v1/models/sklearn-iris"
      route:
        - destination:
            host: sklearn-iris-predictor-default.kserve-test.svc.cluster.local
            port:
              number: 8080

应用配置后直接发送请求即可绕过认证。

三、排查示例部署错误

  1. 检查InferenceService状态:
    kubectl get inferenceservices sklearn-iris -n kserve-test
    
    确认STATUS为Ready,若不是查看事件信息:
    kubectl describe inferenceservices sklearn-iris -n kserve-test
    
  2. 查看Predictor Pod日志,排查启动或运行错误:
    kubectl logs -l serving.kubeflow.org/inferenceservice=sklearn-iris,component=predictor -n kserve-test
    
  3. 检查Knative服务状态:
    kubectl get ksvc sklearn-iris-predictor-default -n kserve-test
    
    确认READY状态为True,否则查看Knative服务事件。
  4. 集群内直接测试服务连通性:
    启动临时curl Pod测试内部访问:
    kubectl run -it --rm curl-test --image=curlimages/curl --restart=Never -- \
      curl http://sklearn-iris-predictor-default.kserve-test.svc.cluster.local/v1/models/sklearn-iris:predict \
      -d @input.json
    
    如果内部访问成功,说明问题出在Ingress层的认证或路由;若失败则是模型服务本身部署有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:10:48