没有 API 调用时需要 K8s RBAC?

K8s RBAC needed when no API calls?

我的 pod 是 运行 默认服务帐户。我的 pod 通过挂载文件和配置映射使用机密,但这是在 yaml 中定义的,并且 pod 不包含 kubectl 或类似组件。

如果我不调用 API,使用 RBAC 有什么意义吗?最佳实践指出“启用或配置限制读取 Secrets 中数据的 RBAC 规则(包括通过间接方式)”。

只有调用 Kubernetes API 的东西,如 kubectl 命令和各种 Kubernetes SDK 库,才使用 RBAC。对于您的基本应用程序,您作为用户需要创建部署、创建机密、的权限,但如果您拥有cluster-administrator权限,则不需要任何特殊设置。

您可以想象一个编排器应用程序想要通过创建 Kubernetes 作业来分包工作。在这种情况下,编排器本身将需要 RBAC 设置;通常,它的 Helm 图表或其他部署 YAML 将包含一个角色(用于创建作业)、一个 ServiceAccount 和一个 RoleBinding,并使用该 ServiceAccount 将其自己的 Deployment 设置为 运行。这不是具有支持数据库 (StatefulSet/Service) 的简单 HTTP-based 应用程序 (Deployment/Service/Ingress) 的“正常”情况。

... restrict reading data in Secrets ...

如果可以kubectl get secret -o yaml,那么 Secret 值就可以阅读了;它们是 base64 编码的,但根本没有加密。限制执行此操作的能力是一种很好的做法。话虽如此,您还可以创建一个 Pod,安装 Secret,并使主要容器命令将 Secret 值转储到可读的地方,所以即使那样 Secrets 也不是 that 秘密。这仍然是一个很好的做法,但 本身 并不是必需的,特别是在评估或测试集群中。