【.com速译】Kubernetes是一个优秀的容器管理系统,但是开发者和管理员肩上的负担也随之加重。如果您不在安全集群上部署安全容器,那么您从一开始就陷入了世界末日的陷阱。幸运的是,我们正在谈论Linux,因此您可以做很多事情来帮助确保部署安全。您可以执行的一项关键任务是防止将不需要的内核模块加载到容器中。您会惊讶于启动时加载了多少模块,其中许多您不需要在容器中使用。那么如何防止它们加载呢?就是这样。你需要什么?我将演示如何使用基于最新UbuntuServer映像的容器,我将通过Multipass工具来完成此操作。想要了解更多关于如何安装和使用Multipass,请参考这个教程:《如何使用启动虚拟机的新工具Multipass?》(https://www.techrepublic.com/article/multipass-is-a-new-tool-for-launching-virtual-machines/)。如果你没有使用Multipass,不管你使用什么容器技术,只要容器是基于Linux的,你仍然可以解决这个问题。如何部署和访问Ubuntu容器?让我们从使用Multipass部署一个新容器开始。我们将使用以下命令部署UbuntuDaily20.04:multipasslaunchdaily:20.04一旦容器启动,您将看到一个随机生成的部署名称。如果您没有注意到名称,您可以通过以下方式看到它:multipasslist既然容器已部署,请通过以下方式访问其shell:multipassshellNAME其中NAME是随机生成的容器名称。如何卸载和黑名单模块?我们所做的是将我们不想加载到容器中的模块列入黑名单。为此,您需要知道正在加载哪些模块。要列出所有当前加载的模块,请执行以下命令:lsmod,您将看到当前加载到内核中的每个模块(图A)。图A.当前在Ubuntu20.04中加载的模块。翻阅这个列表,你会发现所有你不想加载到容器内核中的模块。鉴于容器通常非常具体,因此可能有很多容器可以列入黑名单。在我们真正将不想在启动时加载的模块列入黑名单之前,我们首先卸载模块。为什么?它是一个容器,而不是虚拟机或标准操作系统,因此您无法重新启动。这就是我们需要手动卸载模块的原因。要手动卸载正在运行的模块,请执行以下命令:sudomodprobe-rMODULENAME其中MODULENAME是模块的名称。如果运行lsmod命令,您应该会看到该模块不再加载到内核中。有了列表后,使用以下命令打开黑名单文件进行编辑:sudonano/etc/modprobe.d/blacklist.conf在该文件中,您将添加所有希望阻止加载的模块,格式为:blacklistMODULENAME其中MODULENAME是模块的名称。例如,您想阻止加载软盘内核模块。为此,条目将是:blacklistfloppy注意:您必须小心不要将对操作系统操作至关重要或容器所依赖的模块列入黑名单。因此,在将模块列入黑名单之前,请确保您对该模块的作用有一个大概的了解。此时,您已经手动删除了所有不想加载的内核模块,并创建了一个黑名单以防止它们被加载。您应该能够停止和启动容器,并看到那些列入黑名单的模块不再加载。但是,如果您发现模块仍在加载,则意味着该映像仍在使用不包含您的更改的initramfs的旧副本。重新构建initramfs:sudoupdate-initramfs-u下次停止和启动容器时,你会发现黑名单模块肯定不会被加载。对于Kubernetes容器来说,这不是一种放之四海而皆准的安全措施。但是,在开发依赖于Linux容器的应用程序和服务时,您应该考虑到这一点。您不希望在容器上运行冗余且有时不安全的模块。这个过程就像您必须跳过的许多垫脚石之一,才能部署真正安全的容器。原标题:如何通过防止不需要的模块加载来保护Kubernetes集群,作者:JackWallen
