Kubernetes安全三步谈:如何监控与控制Kubernetes中的资源消耗问题

逻辑浮尘
• 阅读 1479

或许很多人可能认为资源消耗并非安全问题,但实际上不合理的资源消耗会让黑客有可乘之机,来攻击K8s的组件。本文将介绍如何处理资源消耗或noisy neighbor问题,包括如何管理Pods中的资源以及管理项目和资源配额等。

Kubernetes安全三步谈:如何监控与控制Kubernetes中的资源消耗问题


本文是关于Kubernetes安全系列三篇文章中的最后一篇。在第一篇文章中,我们分享了如何确保企业的Kubernetes集群免受外部攻击;第二篇文章介绍了三种保护Kubernetes免受内部威胁的方法。在本文中,我们将介绍如何处理资源消耗或noisy neighbor问题。

对于那些设置了多租户Kubernetes集群的集群管理员而言,他们十分关注和担心的一个问题是,如何防止共同租户成为“noisy neighbor”,即一个垄断了CPU、内存、存储和其他资源的人。Noisy neighbor会对共享基础设施的其他用户资源的性能产生极坏的影响。

如此一来,跟踪Kubernetes容器和Pod的资源使用情况,对集群管理而言非常重要,因为它不仅可以保持容器编排系统处于最佳运行状态,降低运维成本,还可以加强Kubernetes的整体安全状况。

一些运维团队可能不认为资源消耗是一种重要的安全问题,至少没有保护Kubernetes免受内部和外部网络攻击重要。但这种观点是不正确的。因为厉害的黑客会利用功能不良的基础设施,来找到攻击Kubernetes组件的方法。

“安全不仅仅是‘不要闯进我的房子’,而是‘我怎么能让我的房子一直保持良好的运行状态’,”Rancher Labs的高级解决方案架构师Adrian Goins表示。

运维团队需要最大限度地利用Kubernetes Pods(一组具有共享存储和网络资源的一个或多个容器)所消耗的资源,以确保每个用户都能拥有最佳性能,并且能监控成本分配的使用情况。“使用等于成本,”Goins说,“因为Kubernetes资源都是运行在AWS、谷歌云、阿里云等等云提供商的底层计算基础设施上,一切资源消耗都以为着金钱成本。即使集群是在数据中心的裸机上运行,过多的使用也会花费硬件、电力和其他资源。”

默认情况下,配置容器时,对其可以使用的资源量没有任何限制。如果容器不能高效运行,部署容器的组织必将支付超额费用。值得庆幸的是,Kubernetes具有帮助运维团队管理和优化Kubernetes资源利用能力的功能。

管理Pods中的资源

当管理员定义Pod时,他们可以选择指定每个容器需要多少CPU和内存(RAM)。当容器指定了资源请求时,调度程序可以更好地决定将Pod放在哪个节点上。根据Kubernetes的文档,当容器指定了限制时,可以按指定的方式处理节点上的资源争用。

默认情况下,Kubernetes集群中的所有资源都是在默认的命名空间中创建的。命名空间是一种逻辑地将集群资源进行分组的方法,包括用于指定资源配额的选项。

管理员可以在命名空间上设置资源限制或配额,为在命名空间中运行的工作负载或应用程序分配一定量的CPU、RAM或存储——Kubernetes集群中的三个资源。“如果在命名空间中启动另一个资源会超出预设的配额,那么任何新资源都无法启动,”Goins指出。

“当你应用了资源配额时,意味着你强制在该命名空间中运行的所有内容为其自身设置资源限制。限制有两种类型:预留,和最大限制,”Goins解释说。例如,通过预留,管理员可以让Kubernetes集群为WordPress站点分配128 MB的RAM。对于部署的每个WordPress Pod,服务器本身将保证128 MB的RAM。因此,如果管理员将资源请求与1GB的资源配额相结合,则用户只能在超过其限制之前运行八个WordPress Pod。在那之后,他们将无法再使用RAM了。

资源限制的第二部分是最大限度。管理员可以预留128 MB的资源请求和最多256 MB的RAM。“如果Pod超过256 MB的RAM使用量,Kubernetes会杀死它并重新启动它,”Goins说。“如此以来,用户可以免受失控过程和noisy neighbor的影响。”

项目和资源配额

像Rancher这样的平台,旨在通过提供直观的界面和集中管理任务(如全局层的角色描述)来简化Kubernetes的管理。

正如前一篇关于内部威胁防护的文章所述,Rancher包含一个有助于减轻集群管理负担的“项目(Project)”资源,来超越命名空间。在Rancher中,Project允许管理员将多个命名空间作为单个实体进行管理。因此,Rancher可以将资源配额应用于Projects。

在标准Kubernetes部署中,资源配额只能应用于单独的命名空间。但是,管理员无法通过单次操作,同时将配额应用于命名空间。资源配额必须经过多次操作。

然而在Rancher中,管理员可以将资源配额应用于Project,然后将配额传播到每个命名空间。然后,Kubernetes会使用本机版本的资源配额,来强制执行管理员限制。如果管理员希望更改特定命名空间的配额,则可以覆盖以前的配额。

强化和优化Kubernetes

毋庸置疑,Kubernetes已成为容器编排的标准,这也促使大多数云和虚拟化供应商将其作为标准基础架构来提供。但是,对与Kubernetes环境相关的安全问题的普遍缺乏认识,可能会使各种组件暴露于来自网络集群内外的攻击中。

本系列文章的上两篇中提供了一些可行的步骤,来告诉大家如何通过使用Kubernetes功能和容器管理解决方案(如Rancher),来加强Kubernetes对外部和内部网络威胁的防范。企业应通过基于角色的访问控制(RBAC)和强身份验证从外部保护Kubernetes API访问。对于内部人员保护,由于Kubernetes集群是多用户,因此组织需要通过RBAC、逻辑隔离和NetworkPolicies来保护交叉通信。

为了防止其他租户垄断CPU、内存、存储和其他资源从而拖累整个集群的性能,Kubernetes提供资源限制和配额等功能,以帮助运维团队管理和优化Kubernetes资源利用功能。最后,除了可用的默认设置之外,业界还有一些非常有效的工具可以帮助用户完成Kubernetes集群的管理和保护。例如像Rancher这样的平台就是一种高度优化的容器管理解决方案,专为将多个集群部署到生产环境中的组织而构建,企业用户可以更轻松地管理和运行各地的Kubernetes。它可以保护Kubernetes集群免受外部黑客威胁、内部隐患甚至noisy neighbor。

点赞
收藏
评论区
推荐文章
Prodan Labs Prodan Labs
4年前
Kubernetes自定义调度器 — 初识调度框架
Kubernetes已经成为容器编排(Orchestration)平台的事实标准,它为容器化应用提供了简单且高效部署的方式、大规模可伸缩、资源调度等生命周期管理功能。kubescheduler作为kubernetes的核心组件,它负责整个集群资源的调度功能,根据特定的调度算法或调度策略,将Pod调度到最优的Node节点,使集群的资源得到合理且充分的利用。
Stella981 Stella981
3年前
Python与MySQL如何保持长连接
Python与MySQL如何保持长连接介绍在python后端开发中,时常会与数据库交互,重复的断开、连接会大大消耗数据库资源。所以一般都是定义全局变量,来弥补这个缺陷。但是Python与Mysql长连接的过程中,如果长时间没有交互,它是会断开的。再次执行sql语句是就会
Wesley13 Wesley13
3年前
kubernetes资源
在Docker的设计实现中,容器中的数据是临时的,即当容器被销毁时,其中的数据将会丢失。如果需要持久化数据,需要使用Docker数据卷挂载宿主机上的文件或者目录到容器中。在K8S中,当Pod重建的时候,数据是会丢失的,K8S也是通过数据卷挂载来提供Pod数据的持久化的。K8S数据卷是对Docker数据卷的扩展,K8S数据卷是Pod级别的,可以用来实现Pod中
Wesley13 Wesley13
3年前
Java多线程编程
  在计算机中,线程是稀缺资源,创建过多的线程,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配、调优和监控,有以下好处:降低资源消耗;提高响应速度;提高线程的可管理性。  Java多线程编程常用到多线程框架Executor,使用此框架可以方便、高效的对线程进行管理,我们先了解下Executor
Wesley13 Wesley13
3年前
Oracle 中定位重要(消耗资源多)的SQL
在分析SQL性能的时候,经常需要确定资源消耗多的SQL,总结如下:1查看值得怀疑的SQLselectsubstr(to\_char(s.pct,'99.00'),2)||'%'load,       s.executionsexecutes,       p.sql\_text from(select
Stella981 Stella981
3年前
K8s(7)
仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,以及管理集群资源。您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如部署,作业,守护进程等)。例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序
Wesley13 Wesley13
3年前
K8S知道,K9S呢?
k9s是用于管理Kubernetes集群的CLI。通过封装kubectl功能,k9s可以让开发者快速查看并解决运行Kubernetes时的日常问题。部分特性跟踪在Kubernetes集群运行的资源的实时活动处理Kubernetes标准资源和自定义资源跟踪与资源相关联的
Stella981 Stella981
3年前
OpenShift Router通过分片实现不同环境网络南北流量隔离
在企业实践中,通常会部署多个OpenShift集群:开发测试、生产等。每个集群都是独立的,通过物理资源进行隔离。这种方式管理简单,易于理解,但是消耗的资源更多,每个集群都需要额外的控制节点及运维节点。有没有办法,使不同环境运行在同一个集群上,并且它们之间实现隔离呢?答案是可以的。对于不同的环境,做好资源隔离,我们需要对计算资源——宿主机做好
Stella981 Stella981
3年前
CDS是一个企业级的持续交付和DevOps自动化开源平台
CDS是一个企业级的持续交付和DevOps自动化开源平台弹性CDS资源/worker是按需启动的,以确保用户的等待时间较短,并且不会过度消耗空闲资源可扩展的在CDS中,任何类型的操作(Kubernetes和OpenStack部署、推送到Kafka、cve的测试……)都可以在高级插件中捕获,供用户作为构建块使用。这些插件易于编写和使
Stella981 Stella981
3年前
Kubernetes 的资源管理
作者:KimWuestkamp翻译:Bach(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%2FNnutG4dDnm2zWY5MDiSGpQ)(才云)校对:bot(https://www.oschina.net
MySQL慢日志分析,资源消耗监控,执行计划
慢日志Mysql提供了慢日志记录,可以监控执行时间超过设定值的sql,并予以记录。查看是否开启了慢查询日志:sqlshowvariableslike'%slow%';sqlshowvariableslike'%longquerytime%';可以看到慢查询
逻辑浮尘
逻辑浮尘
Lv1
家在梦中何日到,春来江上几人还?
文章
2
粉丝
0
获赞
0
热门文章