在 Kubernetes 上,从部署 Deployment 到正常提供服务,整个流程可能会出现各种各样问题,有兴趣的可以浏览 Kubernetes Deployment 的故障排查可视化指南(2021 中文版)[1]。从可视化指南也可能看出这些问题实际上都是有迹可循,根据错误信息基本很容易找到解决方法。随着 ChatGPT 的流行,基于 LLM 的文本生成项目不断涌现,k8sgpt[2] 便是其中之一。 k8sgpt 是一个扫描 Kubernetes 集群、诊断和分类问题的工具。它将 SRE 经验编入其分析器,并通过 AI 帮助提取并丰富相关的信息。
您是否应该让多个团队使用同一个 Kubernetes 集群? 您是否可以安全地运行来自不信任用户的不信任工作负载? Kubernetes 是否具备多租户功能? 本文将探讨在运行具有多个租户的集群时面临的挑战。 多租户可分为: 1. 软多租户,适用于信任您的租户 - 比如与同一家公司的团队共享集群时。 2. 硬多租户,适用于您不信任的租户。 您还可以混合使用!
随着云原生技术的普及,其暴露出来的攻击面也被黑客们念念不忘,相关的攻击技术也跟着被“普及”,自动化漏洞利用攻击工具更是如雨后春笋般出现在GitHub开源平台,其中比较有代表性的如cdk-team/CDK。其是一款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。 在漏洞利用门槛如此低廉的今天,作为企业安全的建设者(搬砖人),除了考虑部署容器层面运行时检测平台,在k8s api-server层面,启用日志审计功能,也是一个成本低廉又高效发现入侵攻击的途径。 通过对api-server的日志进行审计分析,对于攻击者的信息收集行为,部署k8s cronjob后门、利用rbac做权限提升等持久化攻击行为都能及时的发现并输出告警。
Kubernetes 作为一项核心技术已成为现代应用程序架构的基础,越来越多的企业使用 Kubernetes 作为容器编排系统。 下面的数据来自 2020 CNCF Survey 的原始数据,可以看到使用 Kubernete 的企业占比达到了 80%。
Kubernetes 定义了一种简单、一致的网络模型,基于扁平网络结构的设计,无需将主机端口与网络端口进行映射便可以进行高效地通讯,也无需其他组件进行转发。该模型也使应用程序很容易从虚拟机或者主机物理机迁移到 Kubernetes 管理的 pod 中。 这篇文章主要深入探索Kubernetes网络模型,并了解容器、pod间如何进行通讯。对于网络模型的实现将会在后面的文章介绍。
网络和操作系统内核,对我来说是既陌生又满是吸引,希望能够拨开层层迷雾找到背后的真相。 在 上一篇文章 中我深入探讨了 Kubernetes 网络模型,这次我想更深入一点:了解数据包在 Kubernetes 中的传输,为学习 Kubernetes 的 eBPF 网络加速做准备,加深对网络和操作系统内核的理解。 文中可能有疏漏之处,还望大家赐教。 在开始之前,我可以用一句话来总结我的学习成果:数据包的流转其实就是一个网络套接字描述符(Socket File Descriptor,中文有点冗长,以下简称 socket fd)的寻址过程。 它不是简单的指 socket fd 的内存地址,还包括它的网络地址。
在 上篇文章 用了整篇的内容来描述网络数据包在 Kubernetes 网络中的轨迹,文章末尾,我们提出了一种假设:同一个内核空间中的两个 socket 可以直接传输数据,是不是就可以省掉内核网络协议栈处理带来的延迟? 不论是同 pod 中的两个不同容器,或者同节点的两个 pod 间的网络通信,实际上都发生在同一个内核空间中,互为对端的两个 socket 也都位于同一个内存中。而在上篇文章的开头也总结了数据包的传输轨迹实际上是 socket 的寻址过程,可以进一步将问题展开:同一节点上的两个 socket 间的通信,如果可以 快速定位到对端的 socket -- 找到其在内存中的地址,我们就可以省掉网络协议栈处理带来的延迟。
近期由于产品需求需要打通多个 K8s 集群的容器网络,要求在一个集群的容器内,通过 Pod IP直接访问另外一个集群的容器,因此笔者对相关网络技术进行了一番学习。本文将解释整体的组网思路,简单分析数据包的流转过程,最后给出详细的实验步骤。
过去几年,公有云凭借着更高扩展性、灵活性、可靠性和安全性,吸引了大量的企业将应用程序部署到公有云上。随着业务规模的不断扩张,企业出于某些原因,如避免厂商锁定、追求更低的延迟、更高的可靠性等,选择将应用部署在更多的公有云上;也有些企业出于数据敏感性等原因,选择将部分应用部署有私有环境中。后者也更像是将上云的过程拉长。不管是多云还是混合云,基础设施都不可避免的存在着差异,企业不得不在适配底层设施上投入了大量的人力物力。 Kubernetes 的出现,完美地解决了这一问题。除了屏蔽基础设施层的差异解决了跨平台的问题,还提供自动化的容器编排、更高的扩展性、弹性和高可用性,其背后更是有着庞大的社区的支持。Kubernetes 的风靡,得到了大量企业的青睐。随着时间的推移,企业使用多个 Kubernetes 集群管理应用的情况越来越普遍。 如何在跨越多个集群、甚至是混合多云的环境下来管理应用成了新的难题。Karmada[1] 的出现正是要解决这一问题。
Envoy Gateway[1] (EG) 首次公开发布 [2] 四个月后,我们很高兴地宣布发布 版本 0.3[3] 起。这个最新版本是几位 Tetrate 同事和整个社区其他人辛勤工作的结晶。Envoy Gateway 现在支持整个 Kubernetes Gateway API[4],包括实验部分 —— 添加了一些强大的新功能,使这个免费的开源软件更接近于功能齐全的 API 网关。 EG 的一大特点是它配置了新的网关 API,而不是旧的和非常有限的 Ingress API[5],或任何为了弥补 Ingress 缺陷的专有 API。虽然 EG 0.2 实现了 Gateway API 的核心部分(完全支持 “基本” HTTP 路由),但 EG 0.3 在其 Gateway API 支持方面更进了一步,这可能是了解其新功能的最佳方式: