本文档介绍了 Google Distributed Cloud (GDC) 气隙 Kubernetes 集群中节点隔离的优势和限制。通过专用节点池实现节点隔离,可让您精确控制特定 pod 在集群中的运行位置,从而增强集群安全性。
工作负载隔离具有以下优势:
- 降低 Kubernetes 集群中发生权限升级攻击的风险。
- 更好地控制需要额外资源的 pod。
对于这些情况,请考虑在专用节点池中隔离容器工作负载,以便更好地进行控制和优化。请务必同时考虑限制,以便您根据节点隔离所需的额外维护费用做出明智的决定。
本文档面向平台管理员群组中的 IT 管理员(负责管理 Kubernetes 集群的节点池)和应用运营者群组中的应用开发者(负责管理容器工作负载)等受众群体。如需了解详情,请参阅 GDC 气隙环境文档的受众群体。
为什么要隔离工作负载?
虽然不是强制性的,但将节点池专用于特定的容器工作负载可以防止潜在的问题。不过,这种方法需要更多管理,而且通常不是必需的。
Kubernetes 集群使用特权 GDC 管理的工作负载来启用特定集群功能和特性,例如指标收集。这些工作负载有一些特殊权限,以便它们在集群中正确运行。
部署到节点的工作负载可能会被恶意实体破解。将这些工作负载与特权 GDC 管理工作负载一起运行意味着攻破遭破解容器的攻击者可以使用节点上的特权工作负载的凭据来提升集群中的权限。
如果您要调度的 Pod 比其他 Pod 需要更多的资源(例如更多内存或更多本地磁盘空间),专用节点池也会非常有用。
您可以使用以下机制在专用节点池调度工作负载:
节点隔离是一种高级深度防御机制,您必须与其他隔离功能(例如具有最低权限的容器和服务账号)一起使用。节点隔离可能不会涵盖所有提权路径,并且绝不应用作主要安全边界。
节点隔离的工作原理
如需为工作负载实现节点隔离,您必须执行以下操作:
为工作负载添加节点池污点和标签。
使用相应的容忍和节点亲和性规则更新工作负载。
本指南假设您从集群中的一个节点池开始。使用节点亲和性以及节点污点并非强制性要求,但我们建议您使用,因为您可以更好地控制调度。
建议和最佳实践
设置节点隔离后,我们建议您执行以下操作:
创建新的节点池时,您可以通过向这些节点池添加自己的污点,阻止大多数由 GDC 管理的工作负载在这些节点上运行。
每当您将新工作负载部署到集群时(例如安装第三方工具时),请审核 Pod 所需的权限。如果可能,请避免将使用提升权限的工作负载部署到共享节点。
限制
在隔离节点池中运行的 pod 存在以下限制:
攻击者仍然可以从遭破解的节点发起拒绝服务 (DoS) 攻击。
如果您部署的
DaemonSet
资源具有提升的权限并且可以容忍任何污点,这些 Pod 可能会成为从遭破解节点提权的一个途径。遭破解的节点仍然可以读取许多资源,包括集群中的所有 Pod 和命名空间。
遭破解的节点可以访问在该节点上运行的每个 pod 使用的 Secret 和凭证。
遭破解的节点仍然可以绕过出站网络政策。
使用单独的节点池隔离工作负载可能会影响费用效率、自动扩缩和资源利用率。
某些由 GDC 管理的工作负载必须在集群的每个节点上运行,并配置为容忍所有污点。