pod 禁止执行的 dmesg

2024-04-27 20:28
文章标签 执行 禁止 pod dmesg

本文主要是介绍pod 禁止执行的 dmesg,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 为什么 pod 里面执行的 dmesg 命令和系统里面的一样,不是应该环境分离吗?
    • 原因解释
    • 安全和隔离的考虑
      • 修改内核参数

为什么 pod 里面执行的 dmesg 命令和系统里面的一样,不是应该环境分离吗?

在 Kubernetes 环境中,尽管 Pod 提供了与主机系统隔离的运行环境,但它们仍然与宿主机共享某些底层资源和环境,如内核。这种设计使得在任何 Pod 内部执行的 dmesg 命令显示的是宿主机的内核日志,而不是特定于 Pod 的日志。

原因解释

内核共享:所有在同一宿主机上的容器(包括 Pod 内的容器)都运行在同一个操作系统内核之上。dmesg 命令显示的是内核的环环缓冲区消息,这些消息是系统级别的,不是隔离在单独的容器或 Pod 中的。

安全和隔离的考虑

修改内核参数

在宿主机上,可以修改 kernel.dmesg_restrict 内核参数。当设置为 1 时,限制非特权用户禁止访问 dmesg,这样设置后,只有具有 CAP_SYS_ADMIN 能力的用户才能访问 dmesg

  • kernel.dmesg_restrict 为 0
    pod 拥有执行 dmesg 权限
# kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:name: ubuntu-dmesg
spec:nodeSelector:kubernetes.io/hostname: "172.31.1.127"containers:- name: ubuntuimage: ubuntu:20.04command: ["sh", "-c", "sleep infinity"] # 持续运行容器
EOF
pod/ubuntu-dmesg created# kubectl exec -it ubuntu-dmesg -- dmesg | head -n 2
Defaulted container "ubuntu" out of: ubuntu, k8tz (init)
[    0.000000] Linux version 5.4.0-147-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #164-Ubuntu SMP Tue Mar 21 14:23:17 UTC 2023 (Ubuntu 5.4.0-147.164-generic 5.4.231)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-147-generic root=/dev/vda1 ro true intel_idle.max_cstate=0 console=ttyS0 console=tty0 net.ifnames=0 biosdevname=0 mitigations=off# kubectl exec -it ubuntu-dmesg -- sysctl kernel.dmesg_restrict
kernel.dmesg_restrict = 0
  • kernel.dmesg_restrict 为 1
    pod 默认没有执行 dmesg 权限,需要赋权
# kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:name: ubuntu-dmesg-1
spec:nodeSelector:kubernetes.io/hostname: "172.31.1.127"containers:- name: ubuntuimage: ubuntu:20.04command: ["sh", "-c", "sleep infinity"] # 持续运行容器EOF
pod/ubuntu-dmesg-1 created
# kubectl exec -it ubuntu-dmesg-1 -- dmesg | head -n 2
dmesg: read kernel buffer failed: Operation not permitted
command terminated with exit code 1
# kubectl exec -it ubuntu-dmesg-1 -- sysctl kernel.dmesg_restrict
kernel.dmesg_restrict = 1### 赋予权限
# kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:name: ubuntu-dmesg-2
spec:nodeSelector:kubernetes.io/hostname: "172.31.1.127"containers:- name: ubuntuimage: ubuntu:20.04command: ["sh", "-c", "sleep infinity"] # 持续运行容器securityContext:capabilities:add:- SYS_ADMIN # 添加 CAP_SYS_ADMIN 权限
EOF
pod/ubuntu-dmesg-2 created
# kubectl exec -it ubuntu-dmesg-2 -- dmesg | head -n 2
[    0.000000] Linux version 5.4.0-147-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #164-Ubuntu SMP Tue Mar 21 14:23:17 UTC 2023 (Ubuntu 5.4.0-147.164-generic 5.4.231)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-147-generic root=/dev/vda1 ro true intel_idle.max_cstate=0 console=ttyS0 console=tty0 net.ifnames=0 biosdevname=0 mitigations=off
# kubectl exec -it ubuntu-dmesg-2 -- sysctl kernel.dmesg_restrict
kernel.dmesg_restrict = 1

这篇关于pod 禁止执行的 dmesg的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941449

相关文章

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代