k8s pod网络排查教程
2023-12-19 22:59:51
1、背景
背景:在日常的k8s运维中,经常会遇到pod之间网络无法访问,域名无法解释的情况。且容器中网络排查命令不全,导致无法准确定位问题。
2、nsenter介绍
#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
#!/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
文章来源:https://blog.csdn.net/litaimin/article/details/135087892
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!