Kubeflow v1.4.1调用KServe创建InferenceService报403权限错误
问题概述
Kubeflow v1.4.1环境中,在Jupyter Notebook内通过KServe Python SDK执行以下代码创建推理服务时触发403 Forbidden报错:
KServe = KServeClient() KServe.create(isvc)
报错核心信息:服务账号system:serviceaccount:kubeflow-user-example-com:default-editor无权在serving.kserve.io API组的kubeflow-user-example-com命名空间下创建inferenceservices资源。
此前尝试自行配置RBAC规则、绑定服务账号后问题仍未解决,且权限校验结果存在矛盾。
现有配置的核心遗漏与错误
- RBAC资源命名空间不匹配:K8s中Role是命名空间级资源,生效范围严格限定在自身
metadata.namespace指定的命名空间,且RoleBinding必须和绑定的Role处于同一命名空间才能建立有效授权关系。此前配置要么将Role部署在default命名空间,试图给其他命名空间的账号授权;要么RoleBinding未指定命名空间,默认部署到kubectl上下文的当前命名空间,未和kubeflow-user-example-com下的Role关联,授权完全不生效。 - 权限校验命令存在参数错误:
- 校验default命名空间权限时,资源名误写为单数
inferenceservice,实际KServe对应的资源名是复数inferenceservices,校验的是不存在的资源类型,结果无参考价值; - 执行无参数的
kubectl auth can-i create inferenceservices时,未指定--as模拟目标服务账号,也未通过-n指定目标命名空间,返回的yes是当前执行kubectl命令的高权限账号(通常为集群管理员)的权限结果,和Jupyter使用的default-editor服务账号权限无关。
- 校验default命名空间权限时,资源名误写为单数
- RBAC规则缺失子资源权限:仅配置了
inferenceservices主资源的操作权限,未覆盖KServe运行必需的inferenceservices/status、inferenceservices/finalizers子资源权限,就算主资源授权正确,后续服务运行过程中仍会触发权限报错。
正确修复步骤
- 编写如下RBAC配置清单,明确将Role、RoleBinding都部署到
kubeflow-user-example-com命名空间,绑定到default-editor服务账号,补全所需的主、子资源权限:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kserve-inferenceservice-manager namespace: kubeflow-user-example-com rules: - apiGroups: ["serving.kserve.io"] resources: - "inferenceservices" - "inferenceservices/status" - "inferenceservices/finalizers" verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kserve-inferenceservice-manager-binding namespace: kubeflow-user-example-com roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: kserve-inferenceservice-manager subjects: - kind: ServiceAccount name: default-editor namespace: kubeflow-user-example-com
- 执行命令应用配置:
kubectl apply -f <上述yaml文件的本地存储路径> - 用正确参数执行权限校验,确认配置生效:
kubectl auth can-i create inferenceservices.serving.kserve.io --as=system:serviceaccount:kubeflow-user-example-com:default-editor -n kubeflow-user-example-com
命令返回
yes即代表权限配置正确,返回Jupyter Notebook重新执行创建推理服务的代码即可正常运行。
内容的提问来源于stack exchange,提问作者HEM VATS
相关产品推荐
相关产品推荐

