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

使用kfp.Client向Microk8s.Kubeflow提交Pipeline时参数配置报错求助

解决Microk8s中KFP Python API提交Pipeline的认证参数配置问题

你遇到的AttributeError: 'NoneType' object has no attribute 'id'本质上是因为KFP API服务器要求身份认证,而仅传入host参数时,客户端没有携带任何有效凭据,导致服务器返回的用户身份信息为空,最终触发了这个异常。下面针对Microk8s环境下的KFP,给出两种可靠的认证配置方案:

方案一:通过浏览器会话Cookie快速测试(适合临时调试)

Microk8s的Kubeflow默认用Dex做身份认证,你可以直接复用浏览器登录后的会话Cookie来认证Python客户端:

  1. 打开KFP UI并完成登录,打开浏览器开发者工具(F12)
  2. 切换到Application标签,找到Cookies下的authservice_session字段,复制完整的键值对(格式类似authservice_session=xxxxxxxxx...)
  3. 在Python代码中传入这个Cookie:
    from kfp import Client
    
    # 替换成你复制的authservice_session内容
    auth_cookie = "authservice_session=abcdefghijklmnopqrstuvwxyz..."
    client = Client(host="10.64.140.43.xip.io", cookies=auth_cookie)
    
    # 测试是否正常工作
    print(client.list_pipelines())
    

方案二:使用服务账号认证(适合生产/程序化场景)

如果需要长期程序化提交Pipeline,推荐创建专门的Kubeflow服务账号:

  1. 创建服务账号和角色绑定YAML文件(比如kfp-sa.yaml):
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kfp-service-account
      namespace: kubeflow
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: kfp-service-account-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: kubeflow-edit  # 这个角色拥有编辑Kubeflow资源的权限,可按需调整
    subjects:
    - kind: ServiceAccount
      name: kfp-service-account
      namespace: kubeflow
    
  2. 应用配置到Microk8s:
    microk8s kubectl apply -f kfp-sa.yaml
    
  3. 提取服务账号的令牌:
    # 获取服务账号关联的Secret名称
    SECRET_NAME=$(microk8s kubectl get sa kfp-service-account -n kubeflow -o jsonpath='{.secrets[0].name}')
    # 解码令牌内容
    TOKEN=$(microk8s kubectl get secret $SECRET_NAME -n kubeflow -o jsonpath='{.data.token}' | base64 -d)
    
  4. 在Python客户端中使用令牌:
    from kfp import Client
    
    client = Client(host="10.64.140.43.xip.io", existing_token=TOKEN)
    
    # 验证连接
    pipelines = client.list_pipelines()
    print(f"当前可用Pipeline数量:{len(pipelines.pipelines)}")
    

额外说明

  • 如果你使用的是Microk8s自带的Kubeflow部署,默认命名空间就是kubeflow,所以客户端的namespace参数保持默认即可,无需修改。
  • 两种方案任选其一都能解决你当前的认证问题,方案一适合快速调试,方案二更适合长期自动化场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:02:56