重要提示:
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。