赞
踩
在做项目时,一开始使用的是通过将k8s的config文件下载到项目中进行pod的权限等验证。当k8s挂了,重新部署时,往往需要重新下载config,且明文放在项目中也不安全。
config.load_kube_config(config_file=xxx)
将上述代码改为如下代码进行自动读取k8s配置进行权限认证等
config.load_incluster_config()
但需要结合ServiceAccount 和 clusterrole等进行权限的绑定和赋予
在修改后,项目部署是遇到了如下的几个问题:
问题描述:
HTTP response body: {“kind”:“Status”,“apiVersion”:“v1”,“metadata”:{},“status”:“Failure”,“message”:“services is forbidden: User “system:serviceaccount:xxxx” cannot create resource “services” in API group “” in the namespace “default””,“reason”:“Forbidden”,“details”:{“kind”:“services”},“code”:403}
分析:
看到User “system:serviceaccount:xxxx” ,起码可以判断出service account已生效。从后面的报错来判断可能是权限不够,在ClusterRole的rules中先赋予全部权限进行测试
解决方案:
问题解决!但权限的控制需要解决项目来做控制。
问题描述:
HTTP response body: {“kind”:“Status”,“apiVersion”:“v1”,“metadata”:{},“status”:“Failure”,“message”:“virtualmachines.kubevirt.io is forbidden: User “system:anonymous” cannot create resource “virtualmachines” in API group “kubevirt.io” in the namespace “default””,“reason”:“Forbidden”,“details”:{“group”:“kubevirt.io”,“kind”:“virtualmachines”},“code”:403}
分析:
此问题和问题1类似,只是是针对kubvirt的,该错误是困扰最久的,在虾哥的帮助下,从kubevirt的源码发现的错误由来
解决
通过追踪kubevirt的源码,发现没有把k8s的api_key的值读到kubevirt中。修改kubevirt源码中default_api.py中全部的auth_settings = []为auth_settings = [‘BearerToken’],这样Configuration对象之前获取的token等凭证可以传入到http请求的head参数中,才不会出现匿名用户权限不够的问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。