刘晨,腾讯云后台开发工程师,TKEStack社区核心成员,负责TKEStack的设计开发维护及混合云项目相关工作。
胡晓亮,腾讯云专家工程师,专注云原生领域。目前负责开源社区TKEStack和混合云项目的设计和开发工作。
随着云计算及云原生技术在各个领域内的逐步普及,基于 Kubernetes 的混合云相关概念和项目越来越受到人们的关注。以混合云形态部署企业的业务服务,在理论上可以最大化利用现有资源,形成差异互补和成本优化。以云计算及云原生技术作为基础设施的企业大致可以分为两类:一种是已经有存量 IDC 的企业,一种是业务全面使用公有云的企业。从已经有存量 IDC 的企业角度考虑,混合云可以最大化利用现有IDC资源的同时,既可以发挥 IDC 的灵活安全能力,也可以享受到公有云的高性价比优势;从业务全面使用公有云的企业角度考虑,混合云在为企业提供不同云服务商的差异能力的同时,也减少了企业绑定单一云服务商的潜在风险。
尽管混合云的愿景是美好的,但走向这愿景的路并非简单。本文将着重介绍 TKEStack 提供混合云能力的道路上,在统一操作系统版本、 Kubernetes 版本、容器运行时和用户交互上遇到的困境与解决方案。
在 Linux 和 Kubernetes 受到广泛关注的今天,其安全问题的影响范围也越来越大。例如 2018 年爆出的特斯拉公司计算基础设施被黑客入侵用来挖矿的事件[1],就是因为特斯拉在亚马逊 AWS 上的 Kubernetes 容器集群访问权限没有得到妥善保护,导致存储在S3网络存储桶上的一些敏感技术数据,例如遥测技术,被窃取。
根据 Palo Alto Networks 公司 Unit 42 团队的研究报告,在 2018 年 1 月至 2019 年 6 月之间,有2万多个基于 Kubernetes 的容器平台被暴露,下图为这些被暴露平台在全球范围内的统计数据[2]:
该报告中还统计了各云服务提供商平台上发现的漏洞:亚马逊 AWS 平台上被发现超过 2900 万个漏洞,谷歌云发现的漏洞数量接近 400 万,微软 Azure 发现了 170 万左右漏洞。
这些漏洞分布在各种操作系统版本、Kubernetes 发行版本、容器运行时乃至用户交互的前端相关代码中。这些关键要素的不统一在客观上为这些安全漏洞提供了温床。
不统一也会使得用户的运维成本变得很高。例如当前 TKEStack 在混合云场景主推的网络方案 Cilium,其很多特性都要求在特定的内核版本以上才支持开启,下图是 Cilium 不同特性对内核版本要求的统计[3]:
而 Kubernetes 版本尽管声明 patch 版本上下兼容,但实际上在各版本间 API 资源对象的转换方面可能存在兼容问题。例如 TKEStack 在升级 Kubernetes API 版本时就发现 url.Values
隐式自动转换为 Kubernetes 对象已经被废弃[4],导致很多接口无法正常使用。
随着业务的运行时间拉长和不断迭代,因为操作系统、Kubernetes、容器运行时和 UI 的不统一造成的运维成本,也会随着时间的推移越堆越高。
TencentOS Server 又名 Tencent Linux,简称 Tlinux 是腾讯针对云场景研发的 Linux 操作系统,提供了专门的功能特性和性能优化,为云服务器实例中的应用程序提供高性能,且更加安全可靠的运行环境[5]。
作为一个Linux发行版,Tlinux 拥有以下优势:
在混合云场景下 TKEStack 推荐使用 TencentOS Server 作为底层的操作系统,安全高效并提供了强大的云原生能力,关于 TencentOS Server 可以到项目网站【 https://github.com/Tencent/TencentOS-kernel?】以了解更多内容。
长久以来,TKEStack 只提供了原生 Kubernetes 给用户使用,这使得 TKEStack 所能提供给用户的能力常常受到原生 Kubernetes 的现有能力的限制。为了打破这一现状,TKEStack 在前不久发布的 1.7 版本引入了由腾讯云 TKE 发布的 Kubernetes 发行版本,TKE 发行版(TKE Kubernetes Distro)。TKE 发行版在保证兼容性的基础上,对 K8s 进行了扩展,并且与腾讯云 TKE 服务保持版本一致。用户可以在自己的 IDC 或者混合云上部署 TKE 发行版,使用已有企业用户大规模验证的可靠安全的 Kubernetes 服务[6]。
相比原生的 Kubernetes 版本,TKE 发行版优势有下面几项:
关于 TKE 发行版的更多信息可以访问?【https://github.com/tkestack/tke-k8s-distro】 以进一步了解。
在 1.7 版本中 TKEStack 支持 TKE 发行版本和原生两种 Kubernetes 发行版本,由于 TKE 发行版完全兼容原生 Kubernetes 发行版本,在后续的迭代中 TKEStack 将朝着只携带 TKE 发行版的方向逐步前进。
2020 年年末,Kubernetes 社区宣布预计最早将在2021年晚些时候发布的 1.23 版本中废弃 dockershim[7],这意味着未来的 Kubernetes 将不再支持以 Docker 作为容器运行时。
TKEStack 社区经过研讨调研后,决定使用和腾讯公有云 TKE 一致的 Containerd 作为未来替代 Docker 的容器运行时。Containerd 是除 Docker 外当下最为成熟稳定,并被广泛接受的容器运行时,下图是 2021 年年初关于容器运行时使用率相关的调查统计[8]:
Containerd 的架构是 client-server 架构,支持 runc、Kata Container 等多种底层运行时,同时又有很高的扩展性,下图为 Containerd 的整体架构图[9]:
作为过渡时期,如果用户选择的 Kubernetes 版本依旧支持 dockershim,TKEStack 将允许用户在创建集群时决定选择 Docker 还是 Containerd 作为容器运行时,并提供文档,帮助用户将存量集群的 runtime 从 Docker 迁移到 Containerd。未来,TKEStack 会移除掉 Docker 的依赖,全面兼容社区的 CRI 标准模型,并将 Containerd 作为默认的 runtime 与公有云 TKE 保持统一。
统一的交互风格可以大大减少用户的学习成本和心智负担。TKEStack 与腾讯公有云 TKE 产品采用了相同的交互风格,用户只需要适应了其中一个的交互习惯,就可以几乎零学习成本的操作使用另外一款产品。下图展示了 TKEStack 和腾讯公有云 TKE 产品的用户前端交互页面:
TKEStack 和腾讯公有云 TKE 产品上有着很多相同的概念,针对这些概念的视图展示逻辑也是一致的。在混合云场景下,这种一致性将产生积极的化学反应,对用户非常友好,并减轻了维护上的成本。
交互的统一不仅仅对用户有很多好处,对后续 TKEStack 的产品设计,后台架构搭建及能力实现上都有着积极的作用,而这种积极作用会为 TKEStack 加速布局混合云领域提供有力的支持。
正所谓工欲善其事,必先利其器,只有统一巩固一个强大稳定的平台基石,TKEStack 才会在提供混合云能力的道路上行驶的更加平稳。后续我们会在该系列中介绍更多关于 TKEStack 的混合云能力,敬请大家期待。
最后欢迎大家到 TKEStack 的项目仓库【 https://github.com/tkestack/tke】 提出建议贡献力量,大家的支持将会令 TKEStack 项目变得更好!
[1]? ? ?Lessons from the Cryptojacking Attack at Tesla 【https://redlock.io/blog/cryptojacking-tesla】
[2]? ? Cloudy with a Chance of Entropy 【https://www.paloaltonetworks.com/resources/research/unit42-cloud-with-a-chance-of-entropy】
[3]? ? Required Kernel Versions for Advanced Features 【https://docs.cilium.io/en/v1.10/operations/system_requirements/#required-kernel-versions-for-advanced-features】
[4]? ? Can no longer call DecodeParameters with url.Values in 1.19.0 client-go 【https://github.com/kubernetes/kubernetes/issues/94688】
[5]? ? 腾讯TencentOS 十年云原生的迭代演进之路
[6]? ? 腾讯云云原生混合云-TKE发行版
[7]? ? Dockershim Deprecation FAQ 【https://kubernetes.io/blog/2020/12/02/dockershim-faq/】
[8]? ? Sysdig 2021 container security and usage report: Shifting left is not enough 【https://sysdig.com/blog/sysdig-2021-container-security-usage-report/】
[9]? ? Introduction and Deep Dive Into Containerd 【https://static.sched.com/hosted_files/kccnceu2021/d3/containerd-KubeConEU2021.pdf】
? 往期精选推荐??