Kubernetes安全挑战以及如何应对

Stella981
• 阅读 554

背景

线上环境使用Kubernetes已经有一段时间,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的软件包管理系统。使用称为图表(Charts)的打包格式,用户可以将应用程序,比如Kafka或Apache HTTP打包为其他任何人都可以只用几个命令就可以在Kubernetes集群上部署的格式,而几乎不需要手动更改YAML文件。

  • Operators将应用程序打包为易于部署的格式,但要做的又不止这些。使用Kubernetes自定义资源,管理员还可以在程序包中包含大量复杂的配置。

什么时候应该使用Helm?什么时候使用Kubernetes Operators?其实答案取决于以下几个因素:

如果主要目标是部署应用程序,那么Helm可能是更好的解决方案。另外要考虑定制化,如果正在部署通用应用程序Helm默认设置还可以,那么Helm就足够了。但如果需要特殊配置来实现复杂的自定义配置或部署特殊的应用程序,就可以使用Kubernetes Operators。

多租户方式管理集群

随着Kubernetes集群的扩展,管理部署在集群以及集群本身上的所有的应用变得越来越困难。多租户是处理可能容易变得混乱的最有效方法之一。实际上,Kubernetes对多租户的支持已经走了很长一段路。

关键功能包括以下内容(注意,默认情况下并不总是将其打开):

  • 命名空间,允许组织与RBAC(以下定义)和网络策略一起使用时,将同一物理集群中的多个团队隔离开来。

  • 基于角色的访问控制(RBAC)确定是否允许用户在集群或名称空间内执行给定的操作。为了帮助简化RBAC的使用,请考虑使用默认角色,这些角色可以绑定到整个群集范围内或每个命名空间本地的用户和组。

  • Kubernetes中的资源配额限制了每个命名空间的总资源消耗,使系统更不容易受到诸如拒绝服务之类的攻击。默认情况下,Kubernetes集群中的所有资源都是使用无限制的CPU和内存来创建的。

  • Network policy网络策略指定Pod组之间如何与其他网络端点进行通信。策略是基于命名空间的。默认情况下,如果在命名空间中未设置任何策略,则允许传入和传出该命名空间中的Pod的流量。

安全性和敏捷性的平衡

理想情况下,安全性是内置在DevOps周期中的,但是组织可以通过在DevOps中间显式添加安全操作来受益,说白了就是通过在整个构建过程中减少人为操作,尽可能自动化。

为确保应用开发组织可以实施最佳安全实践,请后退一步并重新访问您的CI/CD管道。他们是否使用自动化的单元测试和功能测试?是否集成了自动安全门限,例如集成的漏洞扫描器?所有人为操作是否添加了审计日志?

通过在开发和生产集群中添加功能,Ops可以为DevSecOps提供帮助,使应用程序开发团队可以轻松地在开发和部署基于微服务的应用程序并以统一的方式监控、告警和日志记录等服务。

此外,向Kubernetes集群添加服务网格似乎增加了复杂性,但目的是使重要的业务逻辑更加可见。以前,开发人员需要在其代码中构建逻辑。现在,这些功能可以作为Kubernetes平台的一部分提供,从而节省了开发人员的工作量并加速了微服务的交付。

服务网格还为开发团队提供了微服务交互的更多可见性,特别是当可观察性和东西集群流量的可视化作为服务网格解决方案的一部分时。

不过实现这个过程也与团对文化及实际使用场景有关。应当严格评估安全性和敏捷性之间的关系并做出折衷。

总结

本文主要介绍了云原生时代安全性挑战,面对这些挑战应该如何解决。另外在做安全性方面的考虑时,应该尽可能使用和参考随时可用的工具和技术,而不是闷头造车;比如Kubernetes社区给我门提供了RBAC、pod安全策略、网络策略、服务网格、operators等安全性方案。欢迎关注公众号、加我微信,一起讨论,谢谢!

推荐

白话K8S核心组件概念

让我们一起揭开Etcd背后Raft算法的面纱

本文分享自微信公众号 - 云原生技术爱好者社区(programmer_java)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Rancher开源Harvester:基于K8s的超融合基础架构软件
2020年12月17日,业界应用最为广泛的Kubernetes管理平台创建者RancherLabs(以下简称Rancher)宣布推出全新开源软件Harvester,一个通过Kubernetes构建的超融合基础架构(HCI)软件。!图片(https://img.rwimg.top/7592_5649bc00e54d4b30a1419db9c4
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这