写点什么

从修复 Kubernetes 集群中,我学到了什么

  • 2023-05-13
    北京
  • 本文字数:2747 字

    阅读完需:约 9 分钟

从修复 Kubernetes 集群中,我学到了什么

人们都很吝啬。这是 David Flanagan 在他的 YouTube 系列节目“Klustered”中修复了 50 多个故意破坏的 Kubernetes 集群所学到的第一件事。


在一个案例中,提交者用 unicode doppleganger 替换了一个’c’字符——它在终端输出上看起来与 c 相同——从而导致了一个错误,这造成了 Flanagan 对自己以及对其修补集群的能力产生了怀疑。


Flanagan 上周在坦帕(Tampa)举行的 Civo Navigate 会议上说:“我实在是太恨这个人了,这段时间太久了,我们足足用了两个小时才把它修复好。我很喜欢这个插曲,因为我可以告诉你,我很聪明,而且在 Kubernetes 方面也做得很好。但是,这一插曲使我对某些我认为并没有错误的东西产生了怀疑。实际上,我觉得 6 个数字将会在 64 位的系统中造成任何的溢出——当然不会。不过,调整起来比较困难。”


在那场会议之后,Klustered 制定了一个不受 Unicode 干扰的方针。


“你只能从错误中吸取教训,”Flanagan 表示,“这就是为什么我真的喜欢做 Klustered。如果你只是有一个工作正常的集群,你永远也不会真正学会如何在一定的规模之外运行它。而 Klustered 给我们带来的情况是,我们可以让人们从他们自己的公司、他们自己的组织、他们自己的团队中带来他们的失败,我们可以在实时流格式中复制这些问题,但它也让我们看到个人是如何调试它的。”


Linux 问题


他说,调试是很难的,即使你有一个来自红帽的团队来解决这个问题,正如他在另一集由红帽和 Talos 的团队参加的节目中所了解的那样。在这种情况下,红帽从重要的二进制文件中删除了可执行位,如 kubectl、kubeadm,甚至 Perl——它有能力在一台机器上执行大多数 Sys 调用;限制了 Talos 修复故障的能力。


“我们从这一集学到的是,你实际上可以在 Linux 上执行动态链接器。所以我们有这个 ld-linux.so,你实际上可以在一台机器上执行任何二进制文件,通过该链接器代理它。所以你可以 bin.chmod,像这样,这是一个非常酷的技巧。”


/lib/ld-linux.so  /bin.chmod +x /bin/chmod
复制代码


人们还修改了 Linux 文件系统上的属性。


“有人知道 Linux 文件系统中有哪些属性吗?”他问道。“不,当然不知道。为什么要知道?”


但这些属性允许你进入非常低的级别并访问文件系统。他展示了他们如何将文件标记为不可更改。


“所以你可以打包一个文件,你知道,kubectl 或 Kubernetes 必须写到这个文件,并将其标记为不可变,你就立即破坏了系统,”他说,“你不可能通过运行你的常规 LS 命令来检测这种破坏,你实际上确实需要对文件做一个 lsattr,当你把它们全部列出时,要理解这些晦涩的引用是什么意思。所以,再次强调,Klustered 只是给了我们一个环境,我们可以从那些做了我们以前没有做过的事情的人那里提取所有这些知识。”


在另一集中,他邀请了曾在安全和 Kubernetes 领域工作的内核黑客 Kris Nóva,以及曾在谷歌工作的 minikube 维护者 Thomas Stromberg,后者还从事入侵取证分析工作。Stromberg 不得不由安全行业精英 Nova 修复损坏的集群。


“Thomas 来了,运行这个 FLS 命令,”他说,“这是非常古老的工具包,写于 90 年代末,叫做 Sleuth Kit,对 Linux 文件系统进行取证分析。”


他补充道:“通过运行这个命令,他得到了对 Linux 文件系统每一次修改的时间顺序变化。他得到了过去 48 小时内他想回答的每一个问题的答案。所以我很高兴我们有机会与大家分享知识。”。


常见网络故障


在该节目中,网络故障往往是相当常见的。Kubernetes 有核心的网络策略来防止这些故障的发生。但尽管如此,故障还是会发生。


“然而,我们现在看到了碎片化,因为其他 CNI 供应商带来了他们自己对网络策略的适应性,”Flanagan 接着说。“仅仅检查网络政策或集群网络政策是不够的。……你需要知道从网络层面成功操作 Kubernetes 集群,这个集群将继续发展,变得非常繁琐、可怕、复杂,但也更容易。”


Flanagan 对 Kubernetes 最大的不满是默认的 DNS 策略。


“谁认为 Kubernetes 中的默认 DNS 策略是默认 DNS 策略?现在我们有这个叫 Default 的 DNS 策略,”他说,“但它不是默认的。默认是集群优先,这意味着它将尝试在集群内解决 DNS 名称。而默认策略实际上是解析到主机上的默认路由。”


Flanagan 说,他一直在与 Tom Hockin 等人和 Kubernetes 的其他评论员讨论,社区如何能够消除一些异常情况,这些异常情况基本上会绊倒那些只是没有遇到过这些问题的人。


eBPF 改变了格局


他说,eBPF 也在改变格局而不是进入 Linux 机器,运行 IP table-l,他注意到这已经在开发者的头脑中根深蒂固了 20 年。现在,开发者应该倾听所有的 eBPF 探测和流量策略。从本质上讲,你需要有其他的 eBPF 工具来理解现有的 eBPF 工具。


他建议查看 Hubble,以便对旧的网络策略进行可视化表示 – 特别是 Kubernetes 和 Cilium,他补充说。Hubble 还带有一个 CLI。


“我们有工具来了解我们集群内的网络。如果你有幸使用 Cilium,如果你使用其他 CNI,你将不得不寻找其他工具,但它们确实也存在。”他说。


他还推荐了 Cilium Editor。


“你可以构建一个 Kubernetes 网络策略,或者通过拖动方框、改变标签和改变端口号来构建一个 Cilium 网络策略,”Flanagan 说,“所以你实际上不需要再学习如何浏览这些深奥的 YAML 文件。”


他说,Ciluim Editor 将允许你使用拖放的方式来构建 Kubernetes 网络策略。


其他学习经验


当然,还有其他方法可以破坏 Kubernetes 集群。他指出,你可以攻击容器运行时。人们已经回滚了多达 25 个版本的 kubectl 二进制文件;25 个版本实际上破坏了向后兼容性,因此它不能与 API 服务器对话。存储是你自己的 CSI 提供商的另一个考虑因素,他补充说。


他还推荐了三种资源:


  • Brendan Gregg’s book;

  • BCC;

  • Ebpfkit;


他想让工程师们承认他们不知道的东西并分享知识。


他说:“我给人们的一条规则是,请不要安静地坐在那里,用谷歌搜索相机以获得答案,然后说,哦,我知道如何解决这个问题。我很想让高级工程师为我们行业的新人制定更好的规范,消除我们过去 30 年来建立的英雄文化。”


作者简介:


Loraine Lawson,资深技术作者,25 年来一直从事从数据集成到安全的技术问题的报道。在加入 The New Stack 之前,她是银行技术网站 Bank AutomationNews 的编辑。她还曾为“IT Business Edge”担任自由撰稿人、“Tech Republic”的 IT 经理编辑。


原文链接


https://thenewstack.io/what-david-flanagan-learned-fixing-kubernetes-clusters/


声明:本文为 InfoQ 翻译,未经许可禁止转载。


今日好文推荐


后摩尔定律时代,如何提升云效益的天花板


可悲的现实,大部分技术领导者可能并不称职


百度回应文心一言“套壳”质疑;TikTok在美经历生死时刻;IT外包行业面临最大规模裁员,埃森哲将暴力裁员1.9万人 | Q资讯


集成GPT-4的编程神器来了,GitHub发布Copilot X:编程30年,突然就不需要手敲代码了?!


2023-05-13 20:0610011

评论

发布
暂无评论
发现更多内容

三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!

冰河

Docker 云原生 k8s

《华为数据之道》读书笔记:第 6 章 面向“自助消费”的数据服务建设

方志

数据中台 数据仓库 数字化转型 数据治理

区块链开发落地,联盟链系统平台搭建

t13823115967

区块链 区块链开发落地 联盟链系统平台搭建

区块链政务系统开发解决方案

t13823115967

区块链+ 区块链开发落地 政务系统开发解决方案

一枚程序猿的MacBook M1详细体验报告

Zhendong

甲方日常 59

句子

工作 随笔杂谈 日常

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

小Q

Java 学习 架构 面试 JVM

面试无忧:源码+实践,讲到MySQL调优的底层算法实现

小Q

Java 数据库 学习 面试 算法

二分发代码模板

小兵

监控之美——监控系统选型分析及误区探讨

华章IT

运维 云原生 监控 Prometheus

前嗅教你大数据:常见几种编码介绍

前嗅大数据

大数据 编码 编码指南

免费下载O’Reilly出版社全新之作《建立机器学习流水线》

计算机与AI

学习

5分钟学会6个阿里内部编程的方法

Java架构师迁哥

架构师训练营第 1 期 - 第 10 周 - 学习总结

wgl

极客大学架构师训练营

Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念

程序员小航

spring 源码 源码分析 ioc

现在Php、Java、Python横行霸道的市场,C++程序员们都在干什么呢?

ShenDu_Linux

c++ 程序员 编程语言 C语言 软件工程师

架构师训练营第一期-第十周学习总结

卖猪肉的大叔

极客大学架构师训练营

苹果开始告别英特尔

罗燕珊

macOS Big Sur 芯片 苹果 MacBook 英特尔

微博和B站屏蔽马保国相关信息:自媒体蹭热度要适可而止

石头IT视角

CPU飙高问题排查

程序猿玄微子

Spock单元测试框架实战指南四 - 异常测试

Java老k

单元测试 spock

【薪火计划】06 - 你推崇的领导方式是怎么样的?

码上生长

管理

《华为数据之道》读书笔记:第 8 章 打造“清洁数据”的质量综合管理能力

方志

数字化转型 数据质量管理

聊聊销售背后的策略

吴晨曦

创业 销售管理

今年最火的 Golang 云原生开源项目,可能就是它了!

孙健波

Kubernetes k8s OAM KubeVela CloudNative

根治可扩展、高可用、高性能“神器”:SpringCloud+Nginx高并发编程手册

Java架构追梦

Java nginx 架构 面试 微服务

Nginx的反向代理与负载均衡--配置Nginx

Linux服务器开发

nginx 负载均衡 反向代理 后端 Linux服务器

磁盘到底是怎样工作的?一文理解硬盘结构

Guanngxu

操作系统

《华为数据之道》读书笔记:第 7章 打造“数字孪生”的数据全量感知能力

方志

数据中台 数字化转型

使用 Go 实现 Async/Await 模式

Roc

channel goroutines Async Go 语言

阿里内部“高并发通关秘籍”曝光,看完带给你独一无二的认知!

比伯

Java 编程 架构 面试 计算机

从修复 Kubernetes 集群中,我学到了什么_语言 & 开发_Loraine Lawson_InfoQ精选文章