kubernetes scc的故障排除
1. 故障现象
运行自动测试时,环境打印错误:[错误]打开输出文件“/output.xml”失败3360只读文件系统。
2 测试流程
通过舵图部署吊舱,并在吊舱的指定容器中运行机器人案例。其中,正在运行的机器人案例需要读写文件。
3. 故障分析
[]用户权利问题
打印只读文件系统,找出容器的id是否不是root,这使得无法访问指定的目录。
检查掌舵图和容器id,发现用户和用户组都是根。
kubernetes平台上的容器和主机之间没有用户隔离,运行容器的用户在主机上是root用户。排除这种情况的限制是什么?
[x] scc
除了容器配置本身的限制之外,kubernetes集群级scc还限制容器对主机上文件系统的访问。
调用主机上的文件系统是因为这里使用了联邦文件系统,并且容器访问的文件被映射到主机。
检查scc发现容器的serviceaccount绑定的scc设置了ReadOnlyFileSystem=true。那么,这里应该是文件系统只能是只读的。
将scc的ReadOnlyFileSystem修改为false:
kubectl编辑scc scc_name -n项目
请注意,绑定到此scc的pod无效。因为pod由部署控制器控制,所以重启是通过直接删除POD来触发的。重启后,手动模拟自动测试,文件output.xml创建成功。
一波又一波,一波又一波。以为已经完成,重新运行jenkins自动测试,发现pull image报告了一个错误:
rpc错误:代码=未知desc=正在读取图像-注册表中的最新清单.
需要未经授权的:身份验证
很明显ReadOnlyFileSystem参数发生了变化,scc下的serviceaccount在文件系统中具有读写权限,这也适用于新拉取的镜像,因此在更改拉取的镜像时也需要进行身份验证,只有经过身份验证后才能更改镜像是合理的。
同时,这也解释了为什么当ReadOnlyFileSystem为false时,测试用例可以在不进行身份验证的情况下拉取图像。因为您没有更改图像的权限。
既然知道了原因,就不难解决了。将拉映像的相应角色添加到serviceaccount可使serviceaccount拉映像:
oc策略添加-角色到用户系统:image-puller系统: service account : project : service account _ name-n项目
再做一次詹金斯测试,成功了。
兰芝出生在一个空旷的山谷,其他人并不陌生。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/100412.html