首页 > 其他分享 >【K8s】专题十五(6):Kubernetes 网络之 Pod 网络调试

【K8s】专题十五(6):Kubernetes 网络之 Pod 网络调试

时间:2024-12-27 17:54:57浏览次数:12  
标签:Kubernetes -- namespace 网络 空间 命名 Pod 调试

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【K8s】专题十五(5):Kubernetes 网络之 CoreDNS


目录

一、基本介绍

二、Pod 网络调试

1、调试工具

2、调试原理

3、调试过程

三、nsenter 常用参数


一、基本介绍

在实际工作中,我们经常会遇到一些疑似网络方面的故障问题,从而需要对 Kubernetes 集群中的 Pod 进行网络调试。

但是由于最小化原则,Pod 的容器镜像中通常并不会安装 ping、curl、telnet、tcpdump 等调试工具,或者在 Pod 容器中可以临时安装工具但是效率不高,都给 Pod 网络调试带来困难。

针对上述场景的问题,笔者将在本文介绍一种 Pod 网络调试方法,以灵活应对网络调试需求。


二、Pod 网络调试
1、调试工具

nsenter 是 Linux 操作系统的一种命令行工具,允许用户进入指定进程的某个命名空间,并在该命名空间下灵活使用主机的命令行工具、执行特权操作等。

命名空间则是 Linux 内核的一种功能,用于将进程的资源隔离在不同的环境中,从而提高安全性和可靠性。常见的命名空间包括:

  • Mount:文件系统命名空间
  • UTS:主机名和域名命名空间
  • IPC:进程间通信命名空间
  • PID:进程命名空间
  • Network:网络命名空间
  • User:用户命名空间

通常在 Linux 操作系统中,默认安装有 nsenter。手动安装命令如下:

yum install -y util-linux || apt install -y util-linux

2、调试原理

在文章【Docker】专题一:Docker 基本架构 中提到,容器的本质是进程,但可以运行于独立的命名空间,拥有自己的 root 文件系统、网络配置、进程空间,甚至用户 ID 空间。

由此可见,我们可以通过 nsenter 进入 Pod 中容器(进程)的网络命名空间,利用 Node 节点已有的命令行工具实现对 Pod 进行网络调试。

3、调试过程

调试过程在使用 Containerd 作为运行时的 Kubernetes 集群中进行验证

  • 作为对比,进入 Pod 内容器查看是否安装有 ping、curl、telnet、tcpdump 等调试工具,可以看到相关命令都不存在
kubectl exec -it <pod_name> bash

  • 确定 Pod 所在 Node 节点
kubectl get po <pod_name> -owide

  • 登录到 Pod 所在 Node 节点
  • 在 Node 节点上操作,获取 Pod 内某个容器的 ID
crictl ps | grep <pod_name>

  • 根据容器 ID 获取容器 PID
crictl inspect <container_id> | grep -i pid

  • 进入容器网络命名空间,并验证
nsenter -t <pid> -n

  • 使用 Node 节点已安装的 ping、curl、telnet、tcpdump 等工具进行网络调试接口


三、nsenter 常用参数
-t <pid>:指定要进入的目标进程的 ID
-m:进入目标进程的文件系统命名空间
-u:进入目标进程的用户命名空间
-i:进入目标进程的 IPC 命名空间
-n:进入目标进程的网络命名空间
-p:进入目标进程的 PID 命名空间
--root=/path/to/root:指定容器根文件系统路径(仅在进入挂载命名空间时有效)
--wd=/path/to/workdir:指定工作目录

=======================================================================
nsenter -h

Usage:
 nsenter [options] [<program> [<argument>...]]

Run a program with namespaces of other processes.

Options:
 -a, --all              enter all namespaces
 -t, --target <pid>     target process to get namespaces from
 -m, --mount[=<file>]   enter mount namespace
 -u, --uts[=<file>]     enter UTS namespace (hostname etc)
 -i, --ipc[=<file>]     enter System V IPC namespace
 -n, --net[=<file>]     enter network namespace
 -p, --pid[=<file>]     enter pid namespace
 -C, --cgroup[=<file>]  enter cgroup namespace
 -U, --user[=<file>]    enter user namespace
 -S, --setuid <uid>     set uid in entered namespace
 -G, --setgid <gid>     set gid in entered namespace
     --preserve-credentials do not touch uids or gids
 -r, --root[=<dir>]     set the root directory
 -w, --wd[=<dir>]       set the working directory
 -F, --no-fork          do not fork before exec'ing <program>
 -Z, --follow-context   set SELinux context according to --target PID

 -h, --help             display this help
 -V, --version          display version

For more details see nsenter(1).

标签:Kubernetes,--,namespace,网络,空间,命名,Pod,调试
From: https://blog.csdn.net/2401_82795112/article/details/144751079

相关文章

  • 网络安全技术
    在网络关键位置,如果只使用一台防火墙设备,就会因为设备的单点故障导致网络中断如果部署两台独立的防火墙,容易出现主备状态不一致的情况,会话的状态信息也不同步防火墙双机热备:​   双机热备需要两台硬件和软件配置都相同的防火墙,两机之间通过独立的链路连接,用来同步信息和......
  • 学习干货万字全面解析网络安全、黑客技术,小白看完面试网安工作和护网蓝队初级竟然秒通
    前言本次环境以DVWA靶场(不太安全的网站)及CTF题目(夺旗赛)先对OWASPTOP10漏洞原理通俗概述,接着对基础代码解析,然后执行的命令落地到本地复现,前端进行复现后分析流量包,植入CTF题目,最后演示WAF流量经过,以及最高级别代码防护分析包括最终流程图,分析较为详细,对于初学者,网安爱......
  • 原生js发起网络请求
    网页常见的集中网络请求XMLHttpRequest:是浏览器原生的网络请求对象,通过创建实例、设置请求方法与URL、监听状态变化等多个步骤来发起和处理请求。例如先 newXMLHttpRequest() 创建实例,再用 open 方法设置请求细节,最后 send 发送请求,并通过 onreadystatechange 事件......
  • 通过 PowerShell,你可以实现强大的安全监控和自动化响应。结合进程、模块、驱动程序、
    在PowerShell中,通过收集进程、模块和驱动程序信息,可以获取有关系统状态、潜在安全问题、恶意活动的指示等数据。这类信息对于安全防护、漏洞分析和系统审计非常重要。下面,我将详细说明如何通过PowerShell来收集这些数据,并加以分析。1. 收集进程信息进程是操作系统中运行的......
  • PowerShell 提供了多种强大且灵活的方式来进行外发数据传输。无论是通过 HTTP 请求、F
    在WindowsPowerShell中,"数据传输外发"(或类似的表述,可能是“外发数据传输”)并没有明确的、标准的技术术语。不过,这可能指的是数据的外发传输(outbounddatatransfer),即从本地计算机传送到外部服务器或其他系统的过程。在PowerShell中,数据传输通常通过不同的网络通信协议来进行......
  • 高级神经网络API——Keras 简介和一般工作流程
    概述Keras是一个高级神经网络API,它用Python语言编写,能够在TensorFlow、Theano或者CNTK等深度学习框架之上运行。它的设计理念是简单、快速地构建和实验深度学习模型。Keras提供了易于使用的接口,使得用户可以专注于模型架构的设计和训练,而不必深入了解底层复杂的计算......
  • 网络原理之HTTP(如果想知道网络原理中有关HTTP的知识,那么只看这一篇就足够了!)
         前言:HTTP(超文本传输协议)是互联网通信的核心协议,广泛应用于客户端与服务器之间的数据交换,它基于请求-响应模型,支持浏览器、服务器等应用程序之间的交互,自1991年诞生以来,HTTP不断发展,演化为多个版本(如HTTP/1.1、HTTP/2、HTTP/3),并在现代网络架构中发挥着至关重要的......
  • GA/T1400视图库平台EasyCVR关于网络故障排查的思路和常用排错方法
    在当今这个高度依赖网络的时代,无论是企业还是个人,网络的稳定性和可靠性都至关重要。然而,网络故障的发生往往不可避免,它们可能会影响到我们的日常工作和沟通效率。对于经常与电脑、交换机等网络设备打交道的朋友来说,掌握一些基本的网络故障排查和处理技巧是非常必要的。本文将为大......
  • 网络安全2025最详细学习路线,建议收藏!
     为了帮助小伙伴们系统化学习网络安全,我整理了一套超详细的学习路线,无论你是零基础入门还是想进一步提升,都可以参考!而且资料包免费分享,赶紧收藏!​第一阶段:网络安全基础入门1.计算机基础学习目标:掌握计算机系统组成和操作。推荐内容:操作系......
  • 2025年转行进入网络安全领域薪资及工作安排与前景如何
     如果你计划在2025年转行到网络安全领域,以下是一些建议,可以帮助你顺利过渡并打下坚实的基础:1.薪资情况初级职位(0-3年经验)薪资范围:大约8k-15k/月(根据地区、公司规模和工作内容有所不同)。职位类型:包括网络安全运维、信息安全管理员、安全工程师等。工作内容:监控......