kubernetes scc 故障排查小记
1. 故障现象
环境在跑自动化测试时打印 error: [ ERROR ] Opening output file '/output.xml' failed: Read-only file system。
2 测试流程
通过 helm chart 部署 pod,在 pod 的指定 container 内运行 robot case。其中,运行的 robot case 需要读写文件。
3. 故障分析
- 用户权限问题
打印 Read-only file system,排查是不是运行 container 的 id 不是 root,导致无法访问指定目录。
检查 helm chart 及 container id ,发现用户和用户组均是 root。
kubernetes 平台上 container 和 host 未做用户隔离,container 运行的用户即是 host 上的 root。排除了这点还有什么限制呢?
- scc
除了 container 配置自身的限制还有 kubernetes 集群级别的 scc 限制 container 对 host 上文件系统的访问。
之所以说是 host 上文件系统是因为,这里用到了联合文件系统,container 访问的文件是映射到 host 上的。
查看 scc 发现 container 的 serviceaccount 绑定的 scc 设置了 ReadOnlyFileSystem=true。那么,应该是这里限制了文件系统只能是只读的。
修改 scc 的 ReadOnlyFileSystem 为 false:
kubectl edit scc <scc_name> -n <project>
注意绑定到该 scc 的 pod 并未生效,由于 pod 受 deployment controller 控制,这里直接 delete pod 触发重启,重启之后手动模拟自动化测试,创建文件 output.xml 成功。
一波未平,一波又起。以为搞定了,重新运行 jenkins 自动化测试发现 pull image 报错:
rpc error: code = Unknown desc = reading manifest latest in image-registry.openshift-image-registry.svc:5000...
unauthorized: authentication required
提示很明显更改了 ReadOnlyFileSystem 参数,scc 下的 serviceaccount 均有在文件系统的可读可写权限,这样的权限对于新 pull 的 image 也是适用的,那么在对 pull 的 image 进行更改时也是需要认证的,认证之后才能对 image 进行更改,这是合理的。
同时,这也解释了为什么 ReadOnlyFileSystem false 时,测试 case 可以 pull image,而不用认证。因为没有权限对 image 进行改动啊。
既然知道了原因解决起来也不难了,给 serviceaccount 添加相应的 pull image 的 role 使得 serviceaccount 可以 pull image:
oc policy add-role-to-user system:image-puller system:serviceaccount:<project>:<serviceaccount_name> -n <project>
重新运行 jenkins 测试,运行成功。
kubernetes scc 故障排查小记的更多相关文章
- Kubernetes:故障排查(Trouble Shooting)方法总结
Blog:博客园 个人 本文部分内容源自网络,侵删. 概述 为了跟踪和发现在Kubernetes集群中运行的容器应用出现的问题,我们常用如下排查方法: 查看Kubernetes对象的当前运行时信息,特 ...
- kubernetes之故障排查和节点维护(二)
系列目录 案例现场: 测试环境集群本来正常,突然间歇性地出现服务不能正常访问,过一会儿刷新页面又可以正常访问了.进入到服务所在的pod查看输出日志并没有发现异常.使用kubectl get node命 ...
- 1个工具,助你提升K8S故障排查效率!
Kubernetes的故障排查一直困扰众多运维团队或DevOps,除了Kubernetes本身的复杂性之外,还有Kubernetes的工作负载是动态的原因.本文将介绍1个工具可以帮助你可视化K8S的网 ...
- 一次“不负责任”的 K8s 网络故障排查经验分享
作者 | 骆冰利 来源 | Erda 公众号 某天晚上,客户碰到了这样的问题:K8s 集群一直扩容失败,所有节点都无法正常加入集群.在经过多番折腾无解后,客户将问题反馈到我们这里,希望得到技术支持 ...
- 图解Kubernetes——故障排查指南
针对越来多的Kubernetes容器云,对Kubernetes集群的故障排查却成了一个棘手问题.本文虫虫给大家以直观图示方式介绍如何排查Kubernetes的故障.该篇是系列文章续——故障排查篇. 概 ...
- 超长可视化指南!带你理清K8S部署的故障排查思路,让bug无处遁形
本文将帮助你厘清在Kubernetes中调试 deployment的思路.下图是完整的故障排查思路,如果你想获得更清晰的图片,请在公众号后台(RancherLabs)回复"troublesh ...
- 坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查)
原贴如下 坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查) 虽然我用的是PHPstudy部署的dedecms,还是一样栽倒这个坑里了. 总结经验:本地测试使用8000~9000的端口比较安全.
- Java线上应用故障排查之二:高内存占用
搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java ...
- paip.hql的调试故障排查流程总结
paip.hql的调试故障排查流程总结 环境.myeclipse7.0 1 Hql的调试工具myeclipxe默认工具.../Hibernate8IDE 1 故障的排除方法overview 1 Hql ...
- 使用strace工具故障排查的5种简单方法
使用strace工具故障排查的5种简单方法 本文源自5 simple ways to troubleshoot using strace strace 是一个非常简单的工具,用来跟踪可执行程序的系统调 ...
随机推荐
- POJ1006、hdu1370
思路:中国剩余定理.纯粹的用暴力求逆元. 1 #include<iostream> 2 #include<string.h> 3 #include<string> ...
- dada的GCD ( jxnu acm新生选拔赛)
1007 dada的GCD,输入格式描述有误,已修正 dada的GCD Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/327 ...
- Java反射,看完就会用
什么是反射 在说反射概念之前,我们先说另外2个概念:编译期和运行期. 编译期: 编译期是源代码从文本形式转换为字节码的过程,这发生在Java代码被JVM执行之前. 在编译期,编译器对源代码进行语法检查 ...
- ElasticSearch之Clear cache API
本方法用于清理缓存. 命令样例如下: curl -X POST "https://localhost:9200/testindex_001/_cache/clear?pretty" ...
- vue 2实战系列 —— 复习Vue
复习Vue 近期需要接手 vue 2的项目,许久未写,语法有些陌生.本篇将较全面复习 vue 2. Tip: 项目是基于 ant-design-vue-pro ant-design-vue-pro 由 ...
- 2023-06-04:你的音乐播放器里有 N 首不同的歌, 在旅途中,你的旅伴想要听 L 首歌(不一定不同,即,允许歌曲重复, 请你为她按如下规则创建一个播放列表, 每首歌至少播放一次, 一首歌只有在
2023-06-04:你的音乐播放器里有 N 首不同的歌, 在旅途中,你的旅伴想要听 L 首歌(不一定不同,即,允许歌曲重复, 请你为她按如下规则创建一个播放列表, 每首歌至少播放一次, 一首歌只有在 ...
- 在线编辑Word——插入表格
Word中可插入表格并进行相关格式化操作用于美化表格设计.本文,将通过使用Spire.Cloud Word在线编辑器展示如何来插入格式化的表格到Word.详细步骤见以下内容: 1. 进入在线编辑Wor ...
- 三问三答:细数GaussDB迁移的核心技术
摘要:本文从客户视角的三个疑问出发,一起了解华为云GaussDB数据库的迁移解决方案具有哪些核心技术,如何做到让客户迁移过程安心.放心.省心. 迁移是数据库选型过程中客户最为关心的话题之一,经过大量的 ...
- 探秘华为云盘古大模型:AI for industries的身体力行
摘要:大模型是新一轮AI发展的核心,其已在推进产业智能化升级中已表现出巨大潜力,并将在未来三年里形成风起云涌之势. 本文分享自华为云社区<探秘华为云盘古大模型:AI for industries ...
- 面向对象的Python编程,你需要知道这些!
摘要:Python 没有像 java 中的"private"这样的访问说明符.除了强封装外,它支持大多数与"面向对象"编程语言相关的术语.因此它不是完全面向对象 ...