以下是使用 curl -Lv
测试带有 HTTP Liveness Probe 的 Pod 的详细步骤及示例命令:
📌 前置条件
- Pod 已正常运行
✅ 执行kubectl get pods -n <namespace>
确保目标 Pod 状态为Running
。 - 知道以下关键信息
- Pod 名称 & Namespace
- 容器暴露的端口 (本例为
8080
) - 健康检查路径 (本例为
/healthz
)
🛠️ 方案一:通过本地主机 + Port Forwarding(推荐)
⚠️ 适用场景:快速本地测试 / 无 Service 暴露的情况
# 步骤 1: 建立本地端口转发 (将本机 9999 → Pod 的 8080)
kubectl port-forward pod/busybox2 -n ns2 9999:8080 &
# 步骤 2: 在新终端中使用 curl 测试
curl -Lv http://localhost:9999/healthz
⚡️ 命令解析:
组件 | 作用 |
---|---|
kubectl port-forward |
建立持久化的端口映射通道 |
pod/busybox2 -n ns2 |
指定目标 Pod 及其所在命名空间 |
9999:8080 |
本地端口 9999 ↔ Pod 内容器端口 8080 |
& |
后台运行转发进程 |
curl -Lv |
-L 跟随重定向, -v 显示详细请求/响应头 |
🛠️ 方案二:直接登录容器内部测试(调试专用)
# 步骤 1: 进入容器交互式终端
kubectl exec -it busybox2 -n ns2 -- /bin/sh
# 步骤 2: 在容器内执行 curl (目标是自身容器)
curl -Lv http://localhost:8080/healthz
💡 优势对比:
特性 | Port Forwarding | Exec Into Container |
---|---|---|
是否需要 Service | ❌ 否 | ❌ 否 |
模拟外部访问 | ✅ 是 | ❌ 仅能测试容器内部行为 |
适合生产环境验证 | ✅ 优先选择 | ⚠️ 仅限调试用途 |
🔍 典型输出解读(正常情况)
> GET /healthz HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.68.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< X-Custom-Header: ProbeCheck
< Content-Length: 27
<
{"status":"healthy","timestamp":1623456789}
❗️ 异常情况处理指南:
现象 | 可能原因 | 解决方案 |
---|---|---|
Connection refused |
应用未在 8080 端口启动 |
检查容器日志 kubectl logs busybox2 -n ns2 |
404 Not Found |
路径错误或未实现 /healthz |
核对应用代码中的健康检查端点 |
5xx Server Error |
应用崩溃或资源不足 | 查看容器资源限制 & 应用错误日志 |
超时无响应 | 网络策略阻止访问 | 检查 NetworkPolicy 或防火墙规则 |
🔧 高级技巧:带认证的健康检查
若你的健康检查需要身份验证:
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: Authorization
value: Bearer <YourToken> # 替换为实际令牌
测试时需同步携带相同请求头:
curl -Lv \
-H "Authorization: Bearer <YourToken>" \
http://localhost:9999/healthz
📝 总结表格
目标 | 推荐方法 | 命令示例 |
---|---|---|
本地快速测试 | Port Forwarding | kubectl port-forward ... ; curl http://localhost:9999/healthz |
验证容器内部行为 | Exec Into Container | kubectl exec -it busybox2 -n ns2 -- curl http://localhost:8080/healthz |
生产环境验证 | 结合 Service | 创建 NodePort/ClusterIP Service 后直接访问 Service IP |
💡 最佳实践:对于生产环境的健康检查验证,建议通过创建临时 Service(如 NodePort)进行真实流量测试,而非依赖 port-forwarding。