Kubernetes:从4个方面增强Kubernetes环境的安全性

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Kubernetes:从4个方面增强Kubernetes环境的安全性

目录

基础设施的安全性

1.网络

2.存储

3.主机和操作系统

4.主机访问管理

Kubernetes的安全性

1.etcd

2.Kubernetes集群的访问

3.安全策略

4.工作负载隔离

容器的安全性

1.容器镜像安全

2.容器运行时(Container Runtime)

3.运行中的容器

应用程序的安全性

1.应用程序访问

2.通信

3.应用强化

综上所述



安全必须是任何DevOps流程的一等公民。Kubernetes越来越受欢迎,他的安全性也越来越被组织重视。

Kubernetes中的安全性是一种实践,而不仅仅是一项功能。安全是一个多维问题,必须从不同的角度来解决。

Kubernetes的安全性可以定义为以下四个方面:

  1. Infrastructure(基础设施)
  2. Kubernetes自身
  3. Containers(容器)
  4. Applications(应用)

Kubernetes安全的4个方面

 


基础设施的安全性

基础设施的安全性通常是最基本的任务,也是最重要的任务。但是,在开发过程中经常会忽略它。组织在构建应用程序时,请务必牢记基础架构的安全性,因为它会影响应用程序的架构方式。

基础设施安全涉及多个方面:


1.网络

Kubernetes部署的主要是微服务,同时微服务内部和不同微服务之间都需要通信。因此,组织需要考虑网络设计的各个方面,以确保网络的安全。

  • 流量隔离: Kubernetes控制平面流量必须与数据平面流量隔离。这不仅出于安全原因,而且还避免数据流量影响Kubernetes控制平面流量。
  • 隔离存储流量:类似地,需要将存储流量与常规数据流量隔离开来,以使基础架构中的存储服务不会消耗或中断应用程序网络,反之亦然。
  • 网络细分: Kubernetes对用户隐藏了基础架构,开发人员在设计网络时应牢记这一事实。底层网络基础架构,应该必须同时支持基于第2层VLAN的分段和基于第3层VXLAN的分段,以隔离不彤租户或应用程序之间的流量。
  • 服务质量:在共享的网络基础架构中, noisy neighbors 是一个大问题。因此,能够保证指定Pod或租户的服务水平,同时确保一个Pod的流量不会影响其他Pod,这样的网络基础架构很重要。诸如SR-IOV之类的网络虚拟化技术,可以帮助在共享基础架构上提供虚拟化隔离。
  • 网络策略,防火墙和ACL: 我们将在下文更详细地讨论这些,包括应用程序级别的网络访问控制。


2.存储

对于任何组织来说,存储都是安全性里的关键部分。黑客通常会攻击应用程序存储库中保存的机密数据,例如信用卡信息或个人身份信息。使用Kubernetes的开发人员,应该从以下几个方面确保存储的安全性。

  • 自加密驱动器( Self Encrypting Drives ): 存储安全的一种保障是自加密驱动器。使用这些自加密驱动器,加密就转移到磁盘本身上,数据在写入磁盘时就能得到加密。这样可以确保即使有人物理访问磁盘驱动器,他们也将无法访问数据。
  • 存储卷加密:Kubernetes CSI管理存储卷的生命周期,这样可以将用户与基础存储架构隔离开。同时,存储卷加密可以保护各个存储卷,以防止不安全的访问。
  • 服务质量:在共享的存储基础架构中,大量I/O应用程序可能会影响其他应用程序的性能。因此,能够保证指定Pod或租户的服务水平,同时确保一个Pod的流量不会影响其他Pod,这样的存储基础架构很重要。同样,SR-IOV有助于在PCI级别提供存储隔离。


3.主机和操作系统

组织应该通过以下方式来保护主机和操作系统的安全:

  • 操作系统:站点可靠性工程师( Site Reliability Engineers,SREs)应遵循安全准则来保护主机操作系统。SRE还应该使用防火墙,端口阻止等安全措施。系统常规安全更新和修补程序在可用后,必须立即应用,这样就可以防止黑客和入侵者利用已知漏洞。
  • 启用内核安全性: SELinux和AppArmor之类的内核安全性模块,定义了系统上的应用程序,进程和文件的访问控制。
  • 审核和日志记录:使用Kubernetes的组织应该要有审核和日志记录,这样不仅可以帮助监视系统,还有助于分析安全漏洞。
  • 凭证轮换:用户凭证必须经常更换,并且要遵循严格的安全准则,以免被破解或被盗。
  • 锁定节点:在Kubernetes集群中配置节点后,除了补丁和升级外,无需安装或配置任何新内容。因此,所有节点都必须锁定,并且只能由超级管理员访问,以此来增强安全性。
  • CIS一致性: 网络安全中心( Center for Internet Security,CIS )提供了一致性测试。组织需要查看你的主机设置,并通过一致性测试以确保安全。


4.主机访问管理

Kubernetes集群最薄弱的是节点本身。由于Kubernetes将用户与基础节点隔离开来,因此节点访问控制非常重要。

  • 严格访问:组织应将对节点的root/admin访问权限,限制为几个受信任用户。
  • 锁定节点:即使对于非root用户,应将其限制为通过Kubernetes API服务器进行访问。为了避免对节点上的Kubernetes服务造成任何威胁,应锁定所有节点。
  • 隔离Kubernetes节点: Kubernetes节点必须位于隔离的网络上,并且绝对不能直接暴露给公共网络。。否则对数据平面的开放访问意味着对控制平面的开放访问。理想情况下,应该将节点配置为仅接受来自主节点指定端口的连接。
  • 主节点:主节点访问必须要有网络访问控制列表。


Kubernetes的安全性

在确保基础架构安全的情况下,增强安全的下一步就是Kubernetes自身。


1.etcd

etcd是高可用的键值存储,用作存储Kubernetes集群的所有状态,密钥和信息,这就意味着确保etcd安全非常重要。

  • etcd中的节点应该被授予最小的访问权限。
  • 应该加密包含etcd数据的驱动器。
  • 对etcd的访问必须仅限于主节点。
  • etcd的通信应该要有TLS。


2.Kubernetes集群的访问

Kubernetes访问控制可以细分为以下方面。

  • 身份验证:用户必须先经过身份验证,然后才能访问Kubernetes API。Kubernetes提供了各种身份验证模块-包括客户端证书,密码,普通令牌,引导令牌和JWT令牌。这就要求组织与LDAP,Active Directory或其他身份验证解决方案集成非常重要。

Kubernetes中基于角色的访问控制

 

  • 授权:验证用户身份(即允许其连接到Kubernetes集群)后,下一步是授权,以确定对所请求资源的访问权限。Kubernetes支持多种授权模块,例如基于属性的访问控制(ABAC),基于角色的访问控制(RBAC)和Webhooks。RBAC是最受欢迎的授权插件之一,因为它允许在多租户环境中对单个Kubernetes资源进行精细控制。
  • 准入控制:准入控制,是在用户经过身份验证并被授权访问所请求的资源之后,拦截和控制Kubernetes请求。准入控制的最佳示例是资源配额。
  • TLS:还必须通过TLS保护对Kubernetes API服务器的访问。


3.安全策略

Kubernetes提供了一些可自定义的安全策略,但默认情况下未启用。

  • Pod安全策略:是一个准入控制插件,确保遵循一定的安全准则时pod才能被调度成功。可以定义的策略包括:限制特权Pod的创建,阻止容器作为root用户运行或限制对某些名称空间,网络或存储卷的使用。
  • 网络策略:由容器网络接口(CNI)插件实现,该插件控制pod如何通信。设置pod网络策略非常重要,因为默认情况下pod网络是非隔离的,它们接受来自任何地方的流量。
  • 质量保证:Kubernetes为计算资源(CPU和内存)提供服务质量(QoS)保证,以避免资源匮乏的问题,但它不为I/O(存储和网络)提供QoS。Diamanti等超融合平台增加了对I/O 和QoS的服务质量支持。


4.工作负载隔离

在多租户环境中,每个租户必须要有单独的名称空间,以使工作负载和数据彼此隔离。CNI,CSI和身份验证插件需要支持这些隔离。


容器的安全性

容器在开发过程中和运行时都需要加以保护。


1.容器镜像安全

所有正在运行的容器均基于镜像文件,该镜像文件可以从诸如Docker Hub之类的仓库中下载。

  • 镜像漏洞扫描:必须使用Aqua,Twistlock,Sysdig和Clair等工具对正在构建的容器镜像进行扫描以查找已知漏洞。这些工具可以解析镜像中的程序包和依赖项,来查找已知的漏洞。
  • 镜像签名:组织还应执行严格的准入控制策略,仅允许通过组织签名的镜像。TUF和Notary是用于容器镜像签名的有用工具。
  • 限制特权容器:此外,组织应避免在容器镜像中使用root用户,并防止特权升级。


2.容器运行时(Container Runtime)

今天,大多数环境都使用Docker,而新的运行时(如CRI-O)具有内置的安全功能。


3.运行中的容器

Twistlock,Aqua和Sysdig等许多工具,通过监视网络和系统调用,为运行中的容器,提供连续监视和威胁预防。这些工具还具有拦截和阻止非法调用,确保安全的能力。


应用程序的安全性

应用程序的安全性也很重要。


1.应用程序访问

  • Kubernetes Ingress 的TLS:将你的应用程序暴露给集群外部,最常见做法是使用入口控制器( ingress controller ),例如Envoy或NGINX。所有对入口控制器的外部访问都必须通过TLS,并且入口控制器( ingress controller )与应用程序容器之间的通信也应使用TLS。
  • 加密传输中的所有内容:除少数情况外,默认应加密传输中的所有内容。Istio和Linkerd等许多服务网格提供了mTLS选项,以自动加密Kubernetes集群中的流量。


2.通信

  • 网络: Istio,Linkerd和Consul等服务网格提供了7层网络功能,从而可以限制和控制多个租户之间的流量。
  • 端口:仅在应用程序/容器上公开必要的端口,这一点很重要。


3.应用强化

CI/CD管道中应内置许多DevOp实践,以确保应用程序安全:

  • 定期分析源代码,以避免漏洞和威胁。有许多可用的工具,例如Veracode和Synopsys。
  • 定期扫描代码依赖项以查找新漏洞,以确保它们不会威胁到应用程序的安全。
  • 持续测试你的应用程序,是否受到常见攻击,例如SQL注入,DDoS攻击等。


综上所述

安全始终是组织的头等大事。

在容器和Kubernetes的新时代,拥有强大的安全非常重要。因此,从一开始就应该将安全性纳入开发周期。


译文链接: https://thenewstack.io/a-security-checklist-for-cloud-native-kubernetes-environments/


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6月前
|
Kubernetes Cloud Native 容器
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
1013 1
|
6月前
|
Kubernetes Ubuntu Shell
wsl Ubuntu环境 创建 k8s集群
wsl Ubuntu环境 创建 k8s集群
226 0
|
6月前
|
JSON Kubernetes Linux
Linux环境签发CA证书和K8s需要的证书
Linux环境签发CA证书和K8s需要的证书
87 0
|
6月前
|
Kubernetes Java 测试技术
ChaosBlade常见问题之在K8s环境下演练cpu满载报错如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
305 0
|
1月前
|
Kubernetes 安全 Linux
ansible-install-k8s 之 1 初始化环境
ansible-install-k8s 之 1 初始化环境
|
6月前
|
Kubernetes 负载均衡 应用服务中间件
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
1093 1
|
6月前
|
存储 数据采集 Kubernetes
一文详解K8s环境下Job类日志采集方案
本文介绍了K8s中Job和Cronjob控制器用于非常驻容器编排的场景,以及Job容器的特点:增删频率高、生命周期短和突发并发大。文章重点讨论了Job日志采集的关键考虑点,包括容器发现速度、开始采集延时和弹性支持,并对比了5种采集方案:DaemonSet采集、Sidecar采集、ECI采集、同容器采集和独立存储采集。对于短生命周期Job,建议使用Sidecar或ECI采集,通过调整参数确保数据完整性。对于突发大量Job,需要关注服务端资源限制和采集容器的资源调整。文章总结了不同场景下的推荐采集方案,并指出iLogtail和SLS未来可能的优化方向。
|
2月前
|
Kubernetes Linux Docker
在centos7上搭建k8s环境
在centos7上搭建k8s环境
|
3月前
|
Kubernetes 安全 数据安全/隐私保护
Kubernetes 安全性最佳实践
【8月更文第29天】随着容器化和微服务架构的普及,Kubernetes 已成为管理容器化应用的标准平台。然而,随着 Kubernetes 的广泛采用,其安全性问题也日益受到关注。本文将深入探讨 Kubernetes 的安全最佳实践,并通过具体的代码示例来展示如何保护 Kubernetes 集群免受攻击。
172 2
|
3月前
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?