Author: Andrew Martin (ControlPlane)
kubernetes从项目开始就注重安全,但任然有一些可圈可点的地方。安全问题覆盖到从控制平面到workerload和网络安全以及未来的安全问题。下面列出了一些建议,用于加固集群,增加集群遇到危险时快速恢复的能力。
- Part One: The Control Plane
- Part Two: Workloads
- Part Three: The Future
- Conclusion
Part One: The Control Plane
控制平面是kubernetes的大脑,它是集群中每个容器和pod的全局总览,可以调度新的pod,含可以访问宿主机的pod,能读取存储在集群中的secret。这些漏洞需要防护,防止恶意入侵。
1 TLS Everywhere
TLS应该用到每个组件上,防止网络嗅探,验证服务器身份,并且双向验证客户端身份。
下面的网络图展示了放置TLS的理想位置:master节点的组件之间,还有kubelet与api server之间。Kubernetes The Hard Way 提供了手动创建证书的详细命令。
从前kubernetes node节点自动扩容是比较困难的,因为每个节点需要TLS key来连接到master节点。将秘钥注入到基础镜像中并不是一个好的办法。 Kubelet TLS bootstrapping 提供为新的kubelet创建证书签名请求的能力,因此证书会在启动的时候生成。
如下图所示
2 Enable RBAC with Least Privilege, Disable ABAC, and Monitor Logs启用最小权限的RBAC,关闭ABAC,监控日志
RBAC提供了细粒度的管理策略,用于用户访问资源,如对namespace的访问。
kubernetes从1.6版开始就推荐使用RBAC了,并应该关闭ABAC,使用下面的参数使用RBAC
--authorization-mode=RBAC
GKE上使用下面的命令关闭ABAC
--no-enable-legacy-authorization
There are plenty of good examples of RBAC policies for cluster services, as well as the docs. And it doesn’t have to stop there - fine-grained RBAC policies can be extracted from audit logs with audit2rbac.