如何提高Kubernetes的安全性尤其是跨Pods?

TL; DR Kubernetes允许所有容器访问整个集群上的所有其他容器,这似乎大大增加了安全风险。 如何缓解?

与Docker不同, Docker通常只允许需要通信的容器之间的networking连接(通过--link ), --link每个Pod可以访问该集群上的所有其他Pod

这意味着对于在Kubernetes上运行的标准Nginx + PHP / Python + MySQL / PostgreSQL,受损的Nginx将能够访问数据库。

人们曾经在单台机器上运行所有这些机器,但是那台机器会有严重的定期更新(不止是容器),对于严重的人来说,SELinux / AppArmor也是如此。

每个项目(如果你有不同的独立网站)都可以在自己的集群上运行,但是这似乎是浪费的。

目前的Kubernetes安全似乎是非常不完整的。 有没有一种方法可以为生产提供体面的安全保障?

在不久的将来,我们将在Kubernetes中引入networking策略控制。 截至今天尚未整合,但几家供应商(如Weave,Calico)拥有可与Kubernetes合作的政策引擎。

正如@ tim-hockin所说,我们打算有一种分割networking的方法。

但是,对于具有更多移动部分的系统(这是Kubernetes应该真正发光的地方),我认为将注意力放在应用程序安全性上会更好。

以你的三层为例,PHP pod应该被授权与数据库交谈,但是Nginx pod不应该这样做。 所以,如果有人想出一个方法来在Nginx中执行一个任意的命令,他们可能会发送一个请求到数据库Pod,但是它应该被拒绝,因为没有被授权。

我更喜欢应用程序安全方法,因为:

  • 我不认为 – --links方法可以很好地扩展到10多个不同的微服务或更多。 pipe理所有的链接太难了。
  • 我认为,随着组织中开发人员数量的增长,无论如何,您都需要精细的应用程序级安全性。

就像docker撰写,看起来像docker撰写目前只适用于单机,根据这个页面: https : //github.com/docker/compose/blob/master/SWARM.md