k8s pod网络排查教程

1、背景

背景:在日常的k8s运维中,经常会遇到pod之间网络无法访问,域名无法解释的情况。且容器中网络排查命令不全,导致无法准确定位问题。

2、nsenter介绍

bash 复制代码
#Centos 下载方式
$ yum install util-linux -y

nsenter 是一个 Linux 命令行工具,作用是可以进入 Linux 系统下某个进程的命令空间,如 network namespace、mount namespace、uts namespace、ipc namespace、pid namspace、user namespace、cgroup

所以使用 nsenter 调试容器网络,可以按照以下步骤操作:

1、找到pod中容器的进程id

2、通过nsenter命令进入

由于找到pod中容器的进程id比较麻烦,所以这里写了一个脚本工具去完成上述过程

vim e-net.sh

bash 复制代码
#!/usr/bin/env bash

function e_net() {
  set -eu
  pod=`kubectl get pod ${pod_name} -n ${namespace} -o template --template='{{range .status.containerStatuses}}{{.containerID}}{{end}}' | sed 's/docker:\/\/\(.*\)$/\1/'`
  pid=`docker inspect -f {{.State.Pid}} $pod`
  echo -e "\033[32m Entering pod netns for ${namespace}/${pod_name} \033[0m\n"
  cmd="nsenter -n -t ${pid}"
  echo -e "\033[32m Execute the command: ${cmd} \033[0m"
  ${cmd}
}

# 运行函数
pod_name=$1
namespace=${2-"default"}
e_net

chmod +x e-net.sh

3、案例

比如我需要排查k8s中 devops名称空间中jenkins容器的网络

1、获取pod名称

kubectl get pods -n devops

2、通过脚本加入容器命名空间

e-net.sh jenkins-bf5ffdf5b-zgxqs devops

3、验证

执行ip a ,可以看到ip已经和容器内部的ip一致

4、此时就可以通过宿主机的各种命令去排查网络问题(ping、nc、telnet、nslookup)

注意如果通过nslookup去排查域名,需要指定k8s Coredns的地址,不然默认访问的是宿主机的dns,达不到排查的效果。

nslookup loki.log.svc.cluster.local 10.96.0.10

相关推荐
其实防守也摸鱼3 小时前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
.柒宇.4 小时前
AI掘金头条项目-K8s部署实战教程
python·云原生·容器·kubernetes·fastapi
S1998_1997111609•X4 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则
AI精钢5 小时前
AI Agent 从上线到删库跑路始末
网络·人工智能·云原生·aigc
笨笨饿6 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
geneculture7 小时前
《智能通信速分多次传输技术(VDMT)》专利文件的全文汉英双语对照版本
服务器·网络·人工智能·融智学的重要应用·哲学与科学统一性·融智时代(杂志)·人机间性
xrui588 小时前
2026实战:深度解析 Gemini 3.1 镜像站函数调用在自动化运维工单中的应用
linux·服务器·网络
Python私教8 小时前
GenericAgent记忆系统深度解析:四层架构如何让AI拥有永不遗忘的大脑
网络·人工智能·架构
时空系9 小时前
第9篇:成员功能——为结构体添加能力 Rust中文编程
开发语言·网络·rust
@encryption9 小时前
VLAN --- 深度学习
网络