【问题标题】:How to patch GKE Managed Instance Groups (Node Pools) for package security updates?如何为包安全更新修补 GKE 托管实例组(节点池)?
【发布时间】:2022-01-10 15:48:09
【问题描述】:
我有一个跨两个区域运行多个节点的 GKE 集群。我的目标是安排一个每周运行一次的作业来运行sudo apt-get upgrade 来更新系统包。做了一些研究,我发现 GCP 提供了一个名为“操作系统补丁管理”的工具,可以做到这一点。我尝试使用它,但 Patch Job 执行引发了错误通知
失败原因:实例是托管实例组的一部分。
我还注意到,在创建 GKE 节点池期间,有一个启用“自动升级”的选项。但是根据它的描述,它只会升级Kubernetes的版本。
【问题讨论】:
标签:
security
google-kubernetes-engine
gcloud
patch
【解决方案1】:
根据博客Exploring container security: the shared responsibility model in GKE:
对于 GKE,在较高的层面上,我们有责任保护:
- 节点的操作系统,例如 Container-Optimized OS (COS) 或 Ubuntu。 GKE 会及时为这些映像提供任何补丁。 如果您启用了自动升级,这些会自动部署。这是容器的基础层——它与容器中运行的操作系统不同。
相反,您有责任保护:
- 运行您的工作负载的节点。您应对节点上安装的任何额外软件或对默认配置所做的更改负责。您还负责保持节点更新。我们默认提供强化的 VM 映像和配置,管理运行 GKE 所需的容器,并为您的操作系统提供补丁——您只需负责升级。 如果您使用节点自动升级,则会将升级这些节点的责任转回给我们。
节点自动升级功能会修补您节点的操作系统,而不仅仅是升级 Kubernetes 版本。
【解决方案2】:
操作系统补丁管理仅适用于 GCE 虚拟机。不适用于 GKE
您应该避免在 GKE 中进行操作系统级别升级,这可能会导致一些意外行为(可能升级了软件包并更改了一些会弄乱 GKE 配置的内容)。
您应该让 GKE 自动升级操作系统和 Kubernetes。自动升级将升级操作系统,因为 GKE 版本与操作系统版本交织在一起。
一种简单的方法是注册您的集群以发布channels,这样它们就可以根据需要随时升级(取决于频道),并且您的操作系统会定期修补。
您还可以遵循 GKE 强化 guide,它为您提供了确保您的 GKE 集群尽可能安全的步骤