我最近将kubeflow版本更新为1.3,但这似乎不适用于API身份验证。
当我从springboot服务调用kubeflow端点时,它会给出以下错误
嵌套异常为org.springframework.web.client.HttpServerErrorException$InternalServerError:500内部服务器错误:[{"Error"内部错误:未经身份验证:请求标头错误:没有用户标识标头。:请求标头错误:没有用户身份标头。\n无法使用API资源引用…(10791字节(]]授权,根本原因为
在查看文档后,我发现我们可以添加AuthorizationPolicy来支持请求。头所以我这样做了,现在抛出的错误是
[请求处理失败;嵌套异常为org.springframework.web.client.HttpClientErrorException$Forbidden:403 Forbidden:[RBAC:拒绝访问]],根本原因为
我还可以在v1.3文档中看到,集群内API请求身份验证存在限制
有人知道如何做到这一点吗?
我找到了一种方法,通过将kubeflow auth服务会话令牌作为头传递来实现这一点-H "Cookie: authservice_session=$token
有一种解决方法可以在多用户模式下实现kfp API身份验证。
https://github.com/kubeflow/kfctl/issues/140#issuecomment-719894529
基本上,这种方法是通过一个额外的post请求来检索authservicesession,然后将authserviceession放入kfp客户端标头中。
如果你还在寻找答案,下面是我解决问题的方法:
- 应用授权政策(正如您所说(
有关的更多详细信息,请参阅此处
- 在启用新选项的情况下创建新的笔记本服务器
应该有一个新的配置选项供您启用,您必须勾选它(默认情况下未选中(。
笔记本服务器正在运行的新pod应该有一个包含令牌文件的文件。
但是,它不会自动注入到您的请求中,您必须显式读取它。
- 使用令牌
像这样:
token_file = os.getenv("KF_PIPELINES_SA_TOKEN_PATH")
with open(token_file) as f:
token = f.readline()
client = kfp.Client(host='http://ml-pipeline-ui.kubeflow/pipeline',
existing_token=token)