首页 文章 精选 留言 我的

精选列表

搜索[系统],共10000篇文章
优秀的个人博客,低调大师

如何在系统内直接抓容器的网络报文

排查过很多次pod网络有问题的场景 ,一直没太弄明白,pod内的网络报文怎么抓,今天遇到一个liveness健康检查失败的问题,liveness是kubelet去访问pod(发生get请求)来确认的,那么对应的访问日志在pod内是可以看到的,因此可以尝试抓包排查,但是pod并不能简简单单的使用tcpdump抓包即可,docker/kubectl cp 一个tcpdump进去也不好使,那么,pod内的包怎么抓呢?容器的网络隔离使用的是linux的network namespace ,因此我们到对应的ns里面抓包即可,下面演示1.查看指定 pod 运行在哪个宿主机上拿到宿主机的信息,然后登陆上去 cn-shenzhen.192.168.0.178 # kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE busybox-5fc755d7d9-nc8bz 1/1 Running 2 5d5h 172.20.2.21 cn-shenzhen.192.168.0.178 <none> 2.获得容器的 pid登录到对应的node上,下面演示的是两种找pid的方法 # docker ps|grep busy d5ae39bad811 busybox "sleep 360000" 29 minutes ago Up 29 minutes k8s_busybox_busybox-5fc755d7d9-nc8bz_default_b9a845f1-f09b-11e9-a7ea-00163e0e34c8_2 cdab20715cd9 registry-vpc.cn-shenzhen.aliyuncs.com/acs/pause-amd64:3.0 "/pause" 29 minutes ago Up 29 minutes k8s_POD_busybox-5fc755d7d9-nc8bz_default_b9a845f1-f09b-11e9-a7ea-00163e0e34c8_4 [root@izwz9314kt10onbwuw6odez ~]# docker inspect -f {{.State.Pid}} d5ae39bad811 6875 3.进入该容器的 network namespace nsenter依赖util-linux,因此提前安装 # yum -y install util-linux.x86_64 进入到对应容器的network ns里面,并指向ip a查看ip # nsenter --target 6875 -n [root@izwz9314kt10onbwuw6odez ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 3: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether d2:cc:e9:b1:f6:9d brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.20.2.21/25 brd 172.20.2.127 scope global eth0 valid_lft forever preferred_lft forever 对比一下第一步拿到的pod ip 是一样的 4.使用 tcpdump 抓包,指定 eth0 网卡直接抓包尝试 tcpdump -i eth0 tcp and port 80 -vvv 新开一个窗口进入到pod里面配合访问测试 # kubectl exec -it busybox-5fc755d7d9-nc8bz sh / # nc -vz www.baidu.com 80 www.baidu.com (14.215.177.38:80) open 5.退出network namespace直接exit即可 # exit logout [root@izwz9314kt10onbwuw6odez ~]# ifconfig cali4f23c4d62c6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.20.2.1 netmask 255.255.255.255 broadcast 172.20.2.1 ether 3e:65:de:6b:77:69 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ...... 实战:模拟kubelet的liveness健康检查失败抓包1.起个nginx的deployment,加上一个不存在的路径做liveness livenessProbe: failureThreshold: 5 httpGet: path: /muyuan.html port: 80 scheme: HTTP initialDelaySeconds: 5 periodSeconds: 20 successThreshold: 1 timeoutSeconds: 1 2,确认node,并登陆获取pid # kubectl get pods -o wide -l app=nginx NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE nginx-deployment-basic-58d68cc69d-cg9xr 1/1 Running 0 10s 172.20.2.233 cn-shenzhen.192.168.0.131 <none> 获取pid # docker inspect -f {{.State.Pid}} ca32f2599302 7030 进入ns # nsenter --target 7030 -n 3,抓到kubelet的包了 # tcpdump -i any port 80 -nnvv tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 18:33:15.996389 IP (tos 0x0, ttl 64, id 9563, offset 0, flags [DF], proto TCP (6), length 60) 172.20.2.129.34098 > 172.20.2.233.80: Flags [S], cksum 0x5dc1 (incorrect -> 0x3346), seq 2310580335, win 29200, options [mss 1460,sackOK,TS val 3575092 ecr 0,nop,wscale 9], length 0 18:33:15.996426 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60) 172.20.2.233.80 > 172.20.2.129.34098: Flags [S.], cksum 0x5dc1 (incorrect -> 0xdef8), seq 2455778657, ack 2310580336, win 28960, options [mss 1460,sackOK,TS val 3575092 ecr 3575092,nop,wscale 9], length 0 18:33:15.996448 IP (tos 0x0, ttl 64, id 9564, offset 0, flags [DF], proto TCP (6), length 52) 172.20.2.129.34098 > 172.20.2.233.80: Flags [.], cksum 0x5db9 (incorrect -> 0x7ead), seq 1, ack 1, win 58, options [nop,nop,TS val 3575092 ecr 3575092], length 0 18:33:15.996591 IP (tos 0x0, ttl 64, id 9565, offset 0, flags [DF], proto TCP (6), length 176) 172.20.2.129.34098 > 172.20.2.233.80: Flags [P.], cksum 0x5e35 (incorrect -> 0x3eab), seq 1:125, ack 1, win 58, options [nop,nop,TS val 3575092 ecr 3575092], length 124: HTTP, length: 124 GET /muyuan.html HTTP/1.1 Host: 172.20.2.233:80 User-Agent: kube-probe/1.12+ Accept-Encoding: gzip Connection: close 18:33:15.996611 IP (tos 0x0, ttl 64, id 47190, offset 0, flags [DF], proto TCP (6), length 52) 172.20.2.233.80 > 172.20.2.129.34098: Flags [.], cksum 0x5db9 (incorrect -> 0x7e32), seq 1, ack 125, win 57, options [nop,nop,TS val 3575092 ecr 3575092], length 0 18:33:15.996721 IP (tos 0x0, ttl 64, id 47191, offset 0, flags [DF], proto TCP (6), length 369) 172.20.2.233.80 > 172.20.2.129.34098: Flags [P.], cksum 0x5ef6 (incorrect -> 0xe1af), seq 1:318, ack 125, win 57, options [nop,nop,TS val 3575092 ecr 3575092], length 317: HTTP, length: 317 HTTP/1.1 404 Not Found Server: nginx/1.7.9 Date: Tue, 22 Oct 2019 10:33:15 GMT Content-Type: text/html Content-Length: 168 Connection: close <html> <head><title>404 Not Found</title></head> <body bgcolor="white"> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.7.9</center> </body> </html> 18:33:15.996747 IP (tos 0x0, ttl 64, id 9566, offset 0, flags [DF], proto TCP (6), length 52)

优秀的个人博客,低调大师

Git 2.24 发布,分布式版本控制系统

Git 2.24已经发布,该版本包含了来自 78 个贡献者的功能增加和 bug 修复。其中带来一些亮点,比如特性宏,commit-graph,新可选全新的仓库历史重写工具 filter-repo 等,内容如下: Feature macros 在 Git 2.24 中,可以选择使用 feature 宏功能(一种包含许多其他功能的 Git 配置)。这些是由 Git 的开发人员手动选择的,通过它可以选择加入某个功能或根据存储库的特性采用一些设置。例如,假设有一个特别大的存储库,当我们发现其运行缓慢时,通常会将 index.version 设置为 4,但这并不是好的解决方法。而现在有另外一种选择:通过下面方式启用 feature.manyFiles: git config feature.manyFiles true 目前 feature 宏功能只包括 feature.experimenta l和 feature.manyFiles,以后可能会新添加新的宏。 Commit graphs by default(默认启用提交图) 在 Git 2.24 中,默认会启用提交图,此前该功能是在实验性 core.commitGraph 配置启用,但经过大量测试,已经可以默认启用。除了之外,还有一些提交图其他的改进: 所有 commit-graph 子命令(例如 git commit-graph write,git commit-graph verify 等)都支持 -[no-] progress。 引入了一个新的配置值,用于在获取时自动更新 commit-graph 文件,该配置值利用提交图链将部分历史记录写入提交图链中,以供以后压缩。 修复了许多错误,以改善 commit-graph 命令的性能和可靠性,尤其是在面对损坏的存储库时。 commit-graph 命令现在还支持Git的最新跟踪机制 trace2 Alternative history rewriting tools 如果想对存储库的历史记录执行复杂的操作(例如从存储库的历史记录中删除文件或提取与一个目录有关的历史记录),可以试用 git filter-branch。git filter-branch 是一个历史悠久的且功能强大的重写历史记录的工具。 但是,git filter-branch 使用非常复杂,而且操作特别慢,并且经常会导致很多意想不到的误操作导致仓库库损坏和数据丢失。 Git 2.24 中推荐 git filter-repo(github/newren/git-filter-repo)。git filter-repo 可以避免用户在使用 git filter-branch 遇到的很多坑。git filter-repo 无需按顺序重新处理每个提交,而是对历史记录进行高效的流表示,可以更高效地运作。该工具功能极其强大,其所有功能都具有详细的文档。下面是有关如何使用 git filter-repo 的一些特点: git filter-repo --analyze 提供了易于理解的度量选择,用于分析存储库的大小。这包括每种对象有多少个,文件和目录最大,扩展名占用最多空间等等 可以使用 --path-{glob,regex} 和类似的选项来过滤存储库的历史记录,使其仅包含某些路径 重写历史记录时,所有重写的提交(连同其祖先)将获得一个新的 SHA-1 来识别它们。默认情况下,git filter-repo 会更新对这些 SHA-1 的所有其他引用,就像其他引用它们的提交消息一样 可以对历史记录执行"查找和替换"操作 git filter-repo 是可扩展的,它提供了一个灵活的接口,用于在 Python 中指定回调以及定义新的子命令 更多详情请见发布说明。 参考: http://baijiahao.baidu.com/s?id=1649358058435736187&wfr=spider&for=pc

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册