当前位置:   article > 正文

使用ServiceAccount解决pod自动读取k8s凭证时的错误总结

使用ServiceAccount解决pod自动读取k8s凭证时的错误总结

使用背景

在做项目时,一开始使用的是通过将k8s的config文件下载到项目中进行pod的权限等验证。当k8s挂了,重新部署时,往往需要重新下载config,且明文放在项目中也不安全。

config.load_kube_config(config_file=xxx)
  • 1

将上述代码改为如下代码进行自动读取k8s配置进行权限认证等

config.load_incluster_config()
  • 1

但需要结合ServiceAccount 和 clusterrole等进行权限的绑定和赋予
在修改后,项目部署是遇到了如下的几个问题:

问题和解决总结

问题1

问题描述:
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中先赋予全部权限进行测试

解决方案:
在这里插入图片描述
问题解决!但权限的控制需要解决项目来做控制。

问题2

问题描述:
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参数中,才不会出现匿名用户权限不够的问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/247487
推荐阅读
相关标签
  

闽ICP备14008679号