有没有一种方法可以通过pod中的history命令记录kubectl exec命令?
我想通过监视历史命令来收集在容器上执行的所有命令。
例:kubectl exec podname -n namespace -c container -- bash -c "ls"
==>可以通过历史命令记录下来。
最佳答案
为了获得此行为的完整上下文,需要澄清两件事:
首先,kubectl exec
是API-based的整洁 docker exec
(警告:中级成员的故事)包装。
这很重要,因为这意味着它将使用Kubernetes API将您的命令中继到Docker。这意味着,在这种情况下,与 shell 相关的任何行为都直接与Docker如何在容器内实现命令执行相关,而与kubectl无关。
要记住的第二件事是命令本身:history
,它是一个shell功能,而不是一个单独的二进制文件。
实现取决于所使用的 shell 程序,但是通常在 session 关闭后将命令历史记录写入历史文件之前,会将命令历史记录缓存在内存中。可以使用 history
features“强制”执行此操作,但是可以根据shell的实现而有所不同,并且在使用docker exec
命令时可能不是统一,可靠的方法。
考虑到这些因素,并且您的请求似乎旨在监视容器中执行的操作,也许更好的方法是使用Linux audit到record commands executed by users。
这不仅不依赖于上述要点,还包含writes logs to a file,这使您可以使用Kubernetes logging strategy来选择它们,并将它们导出到用作日志接收器的任何位置,从而便于进行后验。
关于bash - kubectl exec命令未记录在pod的bash历史记录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63129399/