线上环境使用Kubernetes已经有一段时间,Kubernetes通过提供一个可扩展的声明式平台来管理容器以实现高可用性,弹性和规模。但是Kubernetes是一个大型、复杂的平台;在规模扩大以后,Kubernetes平台自身身的安全问题如何解决?应该采取什么策略来保证应用的安全部署?下面我从四个方面说明如何缓解这些挑战。
使用Kubernetes时,您必须将注意力集中在默认情况下某些配置是否打开?例如,pod安全策略是保护多租户群集的关键,但该功能仍为beta,默认情况下未启用。功能丰富的Kubernetes平台可能会认为默认该功能具有挑战性,但是弄清楚默认功能是必不可少的。
组织可以使用安全性基准来增强Kubernetes的安全性。例如,Internet安全中心提供了配置指南,以加强包括Kubernetes在内的系统以抵抗不断发展的网络威胁。
列举出来Kubernetes集群面临的威胁有哪些?拥有这种清单可以一步一步的解决Kubernetes系统中存在的问题。但是,由于安全性始终与风险管理有关,因此组织需要评估某些设置对性能的影响,并权衡风险与收益。
如果您没有人力或时间独自加强Kubernetes安全性。确保设置和维护集群所需的配置包括确保诸如始终通过HTTPS访问API服务器,使用X.509证书来认证平台组件之间的通信之类的事情、etcd数据存储加密等。
除了管理集群的配置之外,还需要管理集群上运行的所有应用编排文件。手动编写YAML文件对于大多数人来说并不容易,而且每次手动编写自定义YAML都是不现实的,也可能出现无法预料的问题。在Kubernetes集群中部署应用程序或修改配置设置。Helm图表和Kubernetes Operators通过为管理员提供了一种将应用程序和配置部署到Kubernetes集群中的简便方法。
什么时候应该使用Helm?什么时候使用Kubernetes Operators?其实答案取决于以下几个因素:
如果主要目标是部署应用程序,那么Helm可能是更好的解决方案。另外要考虑定制化,如果正在部署通用应用程序Helm默认设置还可以,那么Helm就足够了。但如果需要特殊配置来实现复杂的自定义配置或部署特殊的应用程序,就可以使用Kubernetes Operators。
随着Kubernetes集群的扩展,管理部署在集群以及集群本身上的所有的应用变得越来越困难。多租户是处理可能容易变得混乱的最有效方法之一。实际上,Kubernetes对多租户的支持已经走了很长一段路。
关键功能包括以下内容(注意,默认情况下并不总是将其打开):
理想情况下,安全性是内置在DevOps周期中的,但是组织可以通过在DevOps中间显式添加安全操作来受益,说白了就是通过在整个构建过程中减少人为操作,尽可能自动化。
为确保应用开发组织可以实施最佳安全实践,请后退一步并重新访问您的CI/CD管道。他们是否使用自动化的单元测试和功能测试?是否集成了自动安全门限,例如集成的漏洞扫描器?所有人为操作是否添加了审计日志?
通过在开发和生产集群中添加功能,Ops可以为DevSecOps提供帮助,使应用程序开发团队可以轻松地在开发和部署基于微服务的应用程序并以统一的方式监控、告警和日志记录等服务。
此外,向Kubernetes集群添加服务网格似乎增加了复杂性,但目的是使重要的业务逻辑更加可见。以前,开发人员需要在其代码中构建逻辑。现在,这些功能可以作为Kubernetes平台的一部分提供,从而节省了开发人员的工作量并加速了微服务的交付。
服务网格还为开发团队提供了微服务交互的更多可见性,特别是当可观察性和东西集群流量的可视化作为服务网格解决方案的一部分时。
不过实现这个过程也与团对文化及实际使用场景有关。应当严格评估安全性和敏捷性之间的关系并做出折衷。
本文主要介绍了云原生时代安全性挑战,面对这些挑战应该如何解决。另外在做安全性方面的考虑时,应该尽可能使用和参考随时可用的工具和技术,而不是闷头造车;比如Kubernetes社区给我门提供了RBAC、pod安全策略、网络策略、服务网格、operators等安全性方案。