苏州建设工程交易中心网站,做个app需要多少费用,人力资源公司网站建设,大连网站空间1、背景
背景#xff1a;在日常的k8s运维中#xff0c;经常会遇到pod之间网络无法访问#xff0c;域名无法解释的情况。且容器中网络排查命令不全#xff0c;导致无法准确定位问题。
2、nsenter介绍
#Centos 下载方式
$ yum install util-linux -ynsenter 是一个 Linux …1、背景
背景在日常的k8s运维中经常会遇到pod之间网络无法访问域名无法解释的情况。且容器中网络排查命令不全导致无法准确定位问题。
2、nsenter介绍
#Centos 下载方式
$ yum install util-linux -ynsenter 是一个 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 bashfunction e_net() {set -eupodkubectl get pod ${pod_name} -n ${namespace} -o template --template{{range .status.containerStatuses}}{{.containerID}}{{end}} | sed s/docker:\/\/\(.*\)$/\1/piddocker inspect -f {{.State.Pid}} $podecho -e \033[32m Entering pod netns for ${namespace}/${pod_name} \033[0m\ncmdnsenter -n -t ${pid}echo -e \033[32m Execute the command: ${cmd} \033[0m${cmd}
}# 运行函数
pod_name$1
namespace${2-default}
e_netchmod 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