https://ikouchiha47.github.io/2024/02/05/how-containers-work.html
这篇文章深入介绍了Linux容器的原理,以及它们如何利用Linux内核的各种特性,如命名空间(namespaces
)、控制组(cgroups
)和capabilities
来实现进程隔离。文章深入探讨了Linux文件系统、挂载点和用户命名空间的工作原理,以及如何利用它们来调试和与运行中的容器进行交互。
关键点:
- Linux容器使用命名空间和控制组来隔离主机系统上的进程。
- 用户命名空间隔离了诸如用户ID和功能等安全相关的标识符和属性。
- 挂载命名空间提供了对每个命名空间实例中看到的挂载列表的隔离,允许容器拥有自己的根文件系统。
- 进程ID(PID)命名空间隔离了进程ID数字空间,允许容器独立管理自己的进程。
- 可以使用`
nsenter`
、`unshare`
和`setns`
等工具检查和调试Linux容器,访问各种命名空间和挂载点。- 其他安全特性如
AppArmor
和seccomp
可用于进一步限制容器内进程的功能。
https://medium.com/@noah_h/top-offensive-techniques-for-kubernetes-a71399d133b2
这篇文章提供了一个全面的Kubernetes渗透测试检查表,涵盖了Kubernetes安全的各个方面,包括控制平面、etcd
、kubelet
、kube-apiserver
、静态Pods、恶意准入控制器、RBAC滥用以及横向移动技术。文章还讨论了针对EKS(Amazon Elastic Kubernetes Service
)集群的特定考虑因素。
关键点
- etcd是一个高可用和分布式的键值数据存储,保存了集群的所有状态数据,直接访问etcd可以让攻击者完全控制集群。
- kubelet负责管理每个工作节点上的Pods,并暴露了自己的API,攻击者可以利用这些API获得对节点及其容器的控制权。
-
kube-apiserver
是与Kubernetes集群交互的主要入口点,访问它可以让攻击者枚举和管理集群资源。- 准入控制器用于控制集群内的资源创建,注册一个恶意的准入控制器可以帮助攻击者提升权限或建立持久化访问。
- RBAC滥用技术,如窃取服务账户令牌、模拟身份和权限提升,可以让攻击者获得集群内更高的访问权限。
- 横向移动技术,如在节点上创建资源、端口转发和利用临时容器,可以帮助攻击者在集群内部移动并访问敏感资源。
- 在EKS环境中,攻击者可以利用
kube2iam
/KIAM
和aws-auth ConfigMap
获取和维持对集群的访问。
https://devopsvoyager.hashnode.dev/exploring-kubernetes-api-groups-and-versions
文章介绍了Kubernetes中不同类型的API组,包括核心API组和命名API组。它解释了这些组的目的和结构,并提供了实例来说明它们的用途。
关键点
- 核心API组包含了Kubernetes集群操作中的基本资源,如Pod、服务和名称空间。
- 命名API组是用户创建的自定义组,用于在核心API组之外扩展Kubernetes的资源和功能。
- 核心API组的端点位于
/api/v1
,而命名组的API端点为/apis/$GROUP_NAME/$VERSION
。- 文章举例说明了如何使用名为
game.spacebattle.io
的命名API组创建管理服务器的自定义资源。
https://komodor.com/learn/kubernetes-eol-understanding-the-k8s-release-cycle-and-how-to-prepare-for-eol/?utm_source=lkw
本文讨论了Kubernetes版本发布周期并为Kubernetes版本的生命周期结束(EOL
)做准备的重要性。它涵盖了使用过时和EOL
的Kubernetes版本的风险、Kubernetes发布政策、版本偏差政策以及为Kubernetes EOL做准备的最佳实践。
关键点
- 什么是Kubernetes生命周期结束(EOL)以及使用过时和EOL Kubernetes版本的风险。
- 最近的Kubernetes版本及其
EOL
日期。- 了解Kubernetes发布政策和版本偏差政策。
- 组织应该多频繁更新Kubernetes。
- 为Kubernetes EOL做准备的最佳实践,包括了解发布和EOL日期、实施主动升级策略、管理依赖性和兼容性、升级后监控和验证。
- 使用
Komodor
帮助排查Kubernetes升级问题。
https://medium.com/codex/running-jvm-applications-on-kubernetes-beyond-java-jar-a095949f3e34
该文章讨论了在Kubernetes编排的容器环境中运行Java虚拟机(JVM)
应用程序的重要技巧。它涵盖了JVM调优、内存大小设置、CPU过量预订以及使用水平Pod自动扩缩器(HPA)
有效扩缩JVM应用程序等主题。
关键点
- 避免在高并发服务端环境中使用SerialGC,确保JVM不被限制在1个可用CPU上。[1][3][4][5][6]
- 将JVM堆大小配置在容器可用内存的
50%-75%
之间,留出剩余部分给非堆和操作系统使用。使用负载测试来验证配置的堆大小是否合适。- 将
Xms
(初始堆大小)设置等于Xmx
(最大堆大小),避免JVM处理动态内存分配和释放任务。- 对于运行在容器中的JVM应用程序,可以过量预订CPU资源,将请求设置低于限制,而将内存请求和限制保持一致。这可以优化集群效率和成本,特别是在开发环境中。
- 在扩缩JVM应用程序时,使用CPU指标作为
HPA
的默认配置,因为它可以反映应用程序的需求,由于垃圾回收过程的CPU密集型特性。
https://medium.com/@ridhoadya/unveiling-the-battlefield-attacking-and-defending-kubernetes-clusters-9702cdbe941a
本文讨论了保护 Kubernetes 集群免受网络威胁的挑战,并提供了降低风险的实际步骤。它涵盖了 Kubernetes 的 MITRE ATT&CK
矩阵、真实的攻击场景以及强化 Kubernetes 部署的各种最佳实践。
关键点
由于 Kubernetes 集群的广泛采用,它正在成为恶意行为者有利可图的目标。
本文演示了一种场景,攻击者通过易受攻击的应用程序获取 Kubernetes 集群的访问权限,并提升权限以控制整个集群。
本文提出了几种保护 Kubernetes 集群的最佳实践,例如实施强大的访问控制、网络策略、运行时安全工具以及敏感数据的安全存储。
https://cloud.google.com/blog/products/containers-kubernetes/understanding-kubernetes-dynamic-resource-scaling-and-cpu-boost
本文讨论了 Kubernetes 中一个名为 Kube Startup CPU Boost
的新功能,它旨在解决应用程序在启动阶段需要额外 CPU 资源的问题。
关键点
- Kubernetes 提供了在 Pod 模板中配置应用程序资源的方法,但资源需求可能会随时间变化,导致资源利用率低或成本过高。
- Java 应用程序通常在启动时需要更多资源,因为需要进行密集的计算操作,将这些应用程序容器化会使得很难利用容器运行时的弹性特性。
-
Kube Startup CPU Boost
是一个开源解决方案,它利用 Kubernetes 的 in-place 资源调整特性,在 Pod 启动期间增加 CPU 资源,并在应用程序运行后将其降回原始值。- 该解决方案使用
mutating admission webhook
来增加容器资源,一旦 Pod 达到所需状态,管理器就会将容器资源更新回原始值,而无需重启 Pod。- 管理员在使用此解决方案时应考虑集群容量和节点配置,因为它需要额外的 CPU 资源来加快启动速度,这需要在速度和成本之间权衡。
https://lalitchaturveditech.medium.com/optimize-java-performance-on-kubernetes-5f055d406ecf
本文讨论了在Kubernetes上优化Java性能的综合指南
关键点
根据负载测试和监控情况,为pod和容器设置合适的CPU和内存限制。
在执行优化时,要考虑服务的类型(关键服务或非关键服务)。
有效利用Kubernetes探针,避免性能降低和不必要的扩缩容。
升级
Java
版本以获得性能改进。为Kubernetes集群选择合适的垃圾回收器。
使用小型基础操作系统镜像来最小化资源消耗。
缩短应用程序的启动和预热时间以提高性能。
更多K8S学习资料以及SRE学习手册,请扫码关注哦!