容器化后,容器之间共享同一个操作系统内核以及其他组件,在收到攻击之类的情况发生时,更容易通过底层操作系统影响到其他容器。安全问题也是重中之重。
这个问题有没有什么好的办法解决?
不相关应用之间的数据隔离有什么建议和办法?
一般而言,容器本质上是进程的虚拟化(隔离),但操作系统内核是共享的,所以,在这一点上,容器的安全性没有虚拟机好。但是,我们可以通过以下方法增加安全性:
1. SELinux:
2. 精简化容器操作系统:红帽OpenShift采用了RHEL CoreOS,这是一个更加轻量级、更加安全、专门为容器定制的操作系统,从而减少了操作系统端的风险。
3. 容器镜像安全:这个要结合镜像仓库和镜像扫描工具。红帽本身提供了Clair镜像扫描工具和Quay的镜像仓库。同时,红帽官方提供了供免费下载的镜像:universal base image(UBI),这些UBI都是经过检测过比较安全的。
4. 红帽OpenShift默认禁止容器以root用户启动(可以修改),可以防止潜在的漏洞。
对于数据隔离,一般而言,需要采取以下措施:
1. 不相关应用应该放在不同的OpenShift Project(相挡于K8S namespace),OpenShift Project之间采用基于角色的访问机制(RBAC)互相隔离。
2. Project之间可以采用软件定义网络的隔离(不同的VLAN),防止网络之间的访问。
3. OpenShift将来的版本支持不同Project的pod/service分配在公有云或Openstack的VPC网段,进一步增加安全性。
现在K8S在这方面相比OpenShift功能比较欠缺。