随笔 - 378  文章 - 0  评论 - 5  阅读 - 6085

容器内无netstat时的7种端口排查方案

Kubernetes生产实战:容器内无netstat时的7种端口排查方案

在安全加固的容器环境中,很多基础工具(如netstat)会被精简。本文将分享在生产环境中无需进入容器即可排查端口问题的实战技巧,并附带完整操作示例。


一、快速诊断三板斧(1分钟定位问题)

1. 使用kubectl端口转发

# 将容器端口映射到本地
kubectl port-forward pod/<pod-name> 8080:80

# 新终端测试连通性
curl -v http://localhost:8080/health

适用场景:快速验证容器端口是否监听

2. 检查容器镜像元数据

# 查看容器启动命令
kubectl describe pod <pod-name> | grep -A 10 "Command"

# 获取镜像暴露端口列表
docker inspect <image-name> | jq '.[0].Config.ExposedPorts'

适用场景:确认应用设计监听端口

3. 查看K8s服务端点

# 获取Service实际转发地址
kubectl get endpoints <service-name>

# 直接访问PodIP
curl http://<pod-ip>:<port>

避坑提示:确保防火墙放行节点间Pod网络


二、高级诊断方法(无需容器权限)

4. 使用临时诊断容器

# 使用nmap镜像扫描目标容器
kubectl run -it --rm --image=instrumentisto/nmap nmap \
  -- nmap -p 1-65535 <pod-ip>

# 使用busybox telnet测试
kubectl run -it --rm --image=busybox telnet \
  -- telnet <pod-ip> 80

生产建议:预构建白名单诊断镜像

5. 分析proc文件系统

# 查看容器进程ID
crictl inspect <container-id> | grep pid

# 进入主机命名空间
nsenter -t <pid> -n

# 查看端口监听
cat /proc/net/tcp | awk '{print $2}' | grep ':0050'

端口解码工具

# 将0050转换为十进制端口
print(int("0050", 16))  # 输出80

6. eBPF深度观测

# 使用bpftrace跟踪TCP连接
kubectl trace node <node-name> \
  -e 'tracepoint:syscalls:sys_enter_connect {
       printf("pid=%d addr=%s\n", pid, args->uservaddr);}'

# 使用BCC工具监听
kubectl debug node/<node-name> -it --image=docker.io/nicolaka/netshoot \
  -- tcpconnect-bpfcc

三、生产环境最佳实践

7. 应用内建探针配置

livenessProbe:
  exec:
    command:
    - /bin/sh
    - -c
    - "ss -ln | grep -q :8080"  # 使用ss替代netstat

readinessProbe:
  httpGet:
    path: /metrics
    port: 8080

8. 安全容器镜像构建

FROM alpine:3.16
RUN apk add --no-cache iproute2  # 安装ss命令
CMD ["ss -ltn"]  # 等价于netstat -ltn

9. 集群级端口监控

# Prometheus监控规则
- record: container_port_usage
  expr: count by (pod, namespace) (netstat_socket_tcp_info{state="LISTEN"})

四、典型生产案例解析

案例1:Java应用端口冲突
现象:Pod反复重启但无日志
排查

kubectl exec <pod> -- jcmd 1 VM.command_line | grep address
# 输出:-Djava.rmi.server.hostname=0.0.0.0 -XX:MaxRAMPercentage=75.0

结论:JMX端口1099被占用

案例2:Node.js应用僵尸连接
排查工具

kubectl debug <pod> -it --image=nicolaka/netshoot \
  -- sockstat -
posted on   Leo-Yide  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示