📜  不允许 ktag 操作 (1)

📅  最后修改于: 2023-12-03 15:06:12.069000             🧑  作者: Mango

不允许 ktag 操作


什么是 ktag?

ktag 是 K8s 1.22 版本新增的功能,它允许用户对一批 Pod 快速添加/删除标签。ktag 使得用户可以在不重新调度的情况下,快速地改变 Pod 的配置或属性。

为什么不允许使用 ktag?

虽然 ktag 很方便,但是不建议在生产环境中使用。以下是 ktag 的主要限制和缺陷:

  1. ktag 只支持标签,不支持注解和标签选择器。
  2. ktag 操作很容易引起互斥锁和并发问题。
  3. 如果有 Pod 没有被 kubectl get pods 命令列出来,那么 ktag 操作可能不会生效。
  4. ktag 仅支持在原有标签上增加/删除标签,不支持批量替换。

综上所述,如果要在生产环境中使用,请使用其他方式来管理 Pod 组,例如使用 Deployment。

怎么禁止 ktag 操作?

禁止 ktag 操作可以通过两种方式实现:

  1. 使用 PodSecurityPolicy(Pod 安全策略)禁止对 Deployments 进行 patch 操作: https://github.com/kubernetes/kubernetes/issues/82441 。这种方法需要较高的权限管理和认知负担,因此不建议在生产环境中使用。
  2. 在 kubelet 配置文件中添加 --protect-ktag-action=true 选项。这样一来,kubelet 将不再处理 ktag 操作,因此所有 ktag 操作都会失败。但是,这种方法可能会有一些局限性,例如有些插件可能需要使用 ktag。

在生产环境中,我们建议采用第二种方法禁止 ktag 操作,以保证系统的稳定性和安全性。

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
protectKtagAction: true