本工具用于快速诊断 Kubernetes 集群中服务的流量问题,帮助 SRE 和运维人员在用户反馈服务无法访问或访问异常时进行系统化排查。通过一系列检查,它能够自动识别常见问题并提供清晰的错误提示和解决建议。
下载工具脚本./k8s-service-check.sh -s <service_name> -n <namespace>
./k8s-service-check.sh -s <service_name> -n <namespace> [-p <protocol>] [-o <port>] [-i <ingress_host>] [-h <health_check_path>]
| 参数 | 说明 | 是否必填 | 默认值 |
|---|---|---|---|
-s, --service |
服务名称 | 是 | - |
-n, --namespace |
命名空间 | 是 | - |
-p, --protocol |
协议类型 (http|https|tcp) | 否 | http |
-o, --port |
服务端口 | 否 | 80 |
-i, --ingress |
Ingress 主机名(如果通过 Ingress 暴露) | 否 | - |
-h, --health |
健康检查路径(HTTP/HTTPS 服务) | 否 | / |
./k8s-service-check.sh -s nginx -n default
./k8s-service-check.sh -s my-api -n api-system -p https -o 443 -h /healthz
./k8s-service-check.sh -s web-app -n frontend -i webapp.example.com
nicolaka/netshoot 镜像,您可以根据需要替换为其他具有网络诊断工具的镜像。
症状: 服务无法访问,没有可用的 Endpoints
排查过程:
./k8s-service-check.sh -s frontend -n webappWARNING: Service selector 'app=frontend' doesn't match any podskubectl get pods -n webapp --show-labelsapp=frontend-v2,而不是 app=frontend解决方案: 更新服务选择器以匹配正确的 Pod 标签
kubectl patch svc frontend -n webapp -p '{"spec":{"selector":{"app":"frontend-v2"}}}'
症状: 服务有 Endpoints,但从某些命名空间无法访问
排查过程:
./k8s-service-check.sh -s api -n backendWARNING: Found restrictive NetworkPolicy that may block service traffickubectl get networkpolicy -n backend解决方案: 更新 NetworkPolicy 以允许来自所需来源的流量:
kubectl edit networkpolicy api-access -n backend
添加所需的命名空间标签到 namespaceSelector 规则中。
有时候,自动化工具可能无法发现所有问题。以下是一些手动排查技巧:
kubectl logs -n <namespace> <pod-name>
kubectl exec -it -n <namespace> <pod-name> -- ip addr
kubectl exec -it -n <namespace> <pod-name> -- netstat -tuln
kubectl logs -n kube-system -l k8s-app=kube-proxy
kubectl debug node/<node-name> -it --image=nicolaka/netshoot -- iptables-save | grep <service-name>
kubectl debug node/<node-name> -it --image=nicolaka/netshoot -- tcpdump -i any port <port>