重要提示:

Deis不合适用来作为一个多用户的共用环境或者放置不受信任的代码。

Deis的一个主要目标是操作安全,在日常部署工作中得到操作工程师的信任。然而,有两点跟安全有关的事情在部署deis时需要考虑。

对etcd的访问

因为所有的Deis配置都保存在etcd里面,包括密码,秘钥等等,任何到etcd集群的访问都会维修到整个deis平台的安全。各种操作脚本都配置etcd只监听来自私有网络接口,但是任何主机或者容器可以访问到私有网络都有对etcd的完全访问权限。这也包含部署的应用容器,而它们是不能被信任的。

计划的方法是配置iptables来阻止来自容器未授权的访问。这包含一些要求:

  • 容器必须能访问外部世界
  • 容器必须能访问其他容器
  • 容器不能访问CoreOS主机(SSH,etcd等)

关于这种方案更多的讨论,欢迎在Github的#986发表你的看法。

应用运行时的隔离

Deis用户通常想部署它们的应用到分开的环境(通常:开发环境,Staging环境和生产环境)。通常,网络隔离不是目标,而是应用环境的隔离,如果一个开发应用出了问题,它不应该影响集群中生产环境中的应用。

Deis中部署的应用可以通过deis tags命令来隔离。这让你可以用任意的元数据来标识你的机器,然后再应用中针对这些元数据来进行部署。

例如,如果一些机器带有environment=production的标签,另外一些带有environment=staging的标签,你可以配置你的应用部署到生产环境使用deis tags set environment=production。Deis会把此配置一并交给计划任务器,然后你的应用会在不同的环境中如在分开的硬件上(???)。

在公有云上运行Deis

如果你在一个没有安全组的公有云上运行Deis,你需要自己设置安全组。可以使用iptables或者其他类似工具。唯一需要暴露给外界的端口是:

  • 22: 远程SSH访问
  • 80:路由
  • 443:(可选)SSL启用的路由
  • 2222:创建器组件

对于没有提供安全组功能的公有云,请使用contrib/util/custom-firewall.sh.

路由防火墙

路由器组件包含一个防火墙来阻拦攻击。可以通过deisctl config router set firewall/enabled true来启用。更多信息参考:router的README和自定义router。