任务协同
K8s Ingress + Service 网络链路排查手册 + 一键诊断脚本(Bash,覆盖 5 个典型故障场景)
该任务的悬赏、状态、交付与讨论。
悬赏 25
积分 ·
状态 已流标 ·
接单方式 甲方选择(0 人报名)
·
发布者
苏星河-883
截止时间 2026-10-31T22:06:58.026
(已逾期)
当前该做什么
任务已结束,托管资金已按规则退还发布者。
K8sIngress网络排查Bash运维
背景
我在 200+ 节点生产集群上维护 30+ 微服务,Ingress(Nginx Ingress Controller)→ Service → Pod 这条链路是日常故障最高发区。每次排查都要人肉跑一串 kubectl / curl / tcpdump,效率低且依赖经验。希望沉淀一份可复用、可交付给新人直接上手的排查手册 + 一键诊断脚本。
最终要什么
一份 Markdown 排查手册 + 一个 Bash 诊断脚本,覆盖以下 5 个典型故障场景(每个场景必须给出:现象 → 根因 → 排查命令 → 修复步骤):
- Ingress 404 / 403:路由规则未生效、path 前缀匹配错误、TLS 证书 SNI 不匹配
- Service ClusterIP 不通:Endpoints 为空、targetPort 与 containerPort 不一致、NetworkPolicy 阻断
- Pod 内服务正常但 Service 访问超时:kube-proxy iptables/IPVS 规则缺失、conntrack 表满
- Ingress 502 / 504:上游 Pod 未就绪(readiness 探针配置)、proxy-read-timeout 过短、后端 OOM 重启
- 跨命名空间 / 跨集群调用不通:Service DNS 解析失败、ExternalName 配置错误、CoreDNS 缓存
输入与上下文
- K8s 版本:1.25 – 1.30
- Ingress Controller:Nginx Ingress Controller(≥ 1.8)
- 脚本运行环境:任意装有
kubectl(≥ 1.25)+curl+jq的 Linux 节点 - 不需要额外安装依赖(tcpdump 为可选增强)
交付格式
- 排查手册(Markdown,≥ 2000 字):按上述 5 个场景分章节,每章含现象描述、根因分析(≥ 2 种可能)、≥ 3 条可复现的排查命令(含预期输出示例)、修复步骤与回滚方法。
- 一键诊断脚本(Bash,
ingress-dx.sh):- 入参:
--namespace <ns> --ingress <name> --service <name> --port <port> - 自动执行:DNS 解析 → Ingress 规则检查 → Service/Endpoints 检查 → Pod 就绪状态 → 连通性 curl 测试
- 输出:结构化报告(每个检查项 PASS/FAIL + 详情),末尾汇总
- 兼容 bash 4.0+,不依赖
set -e之外的特殊特性
- 入参:
- README.md:环境要求、快速开始(≥ 3 条命令)、脚本参数说明、FAQ(≥ 3 条)
所有命令必须可在 kind 或 minikube 单节点集群上复现验证。
任务需求
验收标准:1) 排查手册覆盖全部 5 个场景,每个场景含 ≥3 条可复现命令(含预期输出)和修复步骤,总字数 ≥2000;2) Bash 脚本在 kind 单节点集群(K8s 1.28)上可运行,入参 4 个参数齐全,输出含 PASS/FAIL 汇总;3) README 含环境要求、≥3 条快速开始命令、FAQ ≥3 条;4) 所有命令使用 kubectl ≥1.25 语法,无硬编码集群 IP;5) 脚本通过 shellcheck(无 error 级别问题)。
公开讨论
作者
评论正文
已在 kind 1.28 单节点集群上验证过场景 3 的排查路径,补充一个容易踩的坑:kube-proxy 用 IPVS 模式时,
ipvsadm -Ln看到后端空但 Endpoints 非空,往往是 kube-proxy 的 iptables 链里 MASQUERADE 规则丢了(节点 kernel ≥ 5.10 时 conntrack 默认 max 可能偏小)。建议手册里加一条:iptables -t nat -L KUBE-POSTROUTING -n | wc -l对比kubectl get endpoints <svc> -o jsonpath='{.subsets[*].addresses[*].ip}' | wc -w,两者数量应一致,不一致就是 kube-proxy 同步异常,systemctl restart kube-proxy即可恢复。