跳到主要内容
版本:3.10.x

配置就绪和存活探针

API7 网关数据面(DP)节点可在状态端口(默认 7085)暴露内置健康端点。可将这些端点用于 Kubernetes 探针、负载均衡器健康检查或容器级检查,确保流量只发送到健康节点。

在以下场景中使用本指南:

  • 配置 Kubernetes 就绪和存活探针。
  • 在非 Helm Kubernetes 清单中添加健康检查。
  • 为非 Kubernetes 部署配置 Docker 或外部负载均衡器检查。

健康检查端点​

配置数据面的 status 块后,API7 网关会在状态端口(默认 7085)提供健康检查端点。

类型路径用途
存活/status表示进程已成功启动且正在运行。
就绪/status/ready对已连接的网关,检查 worker 同步状态及 DP Manager 可用性。

如果希望节点失去 DP Manager 连接时停止接收流量,使用感知同步状态的就绪检查。如果希望节点在中断期间继续使用缓存配置处理流量,请检查已发布的流量端口,或仍可基于缓存配置成功响应的路径。对于从备用存储启动的节点,请参阅备用恢复。

状态端点由数据面的 status 配置控制:

config.yaml
apisix:
status:
ip: 0.0.0.0
port: 7085

如果状态端点绑定到 127.0.0.1,本地容器检查仍可工作,但外部负载均衡器无法访问。

在 Kubernetes 中配置探针​

Helm 配置项​

通过 api7/gateway Helm Chart 部署 API7 网关时,在 values.yaml 中启用状态端点并配置探针。

values.yaml
api7ee:
status_endpoint:
enabled: true
ip: 0.0.0.0
port: 7085

gateway:
livenessProbe:
httpGet:
path: /status
port: 7085
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /status/ready
port: 7085
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3

Helm Chart 通过 api7ee.status_endpoint 暴露底层运行时的 apisix.status 块,并通过 gateway.livenessProbe 和 gateway.readinessProbe 配置 Kubernetes Pod 探针。

本例使用 /status 检查进程存活,使用 /status/ready 检查就绪状态并感知同步情况。

非 Helm Kubernetes 清单​

使用原始 Deployment 清单而非 Helm 部署 API7 网关时,直接在网关容器上配置探针:

deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api7-gateway
spec:
template:
spec:
containers:
- name: gateway
image: api7/api7-ee-3-gateway:3.10.9
ports:
- containerPort: 9080
- containerPort: 9443
- containerPort: 7085
livenessProbe:
httpGet:
path: /status
port: 7085
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /status/ready
port: 7085
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3

通过 Kubernetes Service 暴露网关时,不要将客户端流量发送到 7085 端口;该端口仅用于健康检查和运维访问。

在 Kubernetes 外配置检查​

Docker 或容器运行时检查​

对于 Docker 部署,将配置的状态端口发布到宿主机,并从宿主机查询端点:

curl -i "http://127.0.0.1:7085/status"
curl -i "http://127.0.0.1:7085/status/ready"

对于 3.10.9 网关容器内的 Docker Compose 检查,使用镜像自带的 wget:

docker-compose.yaml
services:
gateway:
image: api7/api7-ee-3-gateway:3.10.9
volumes:
- ./gateway_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
ports:
- "9080:9080"
- "9443:9443"
- "7085:7085"
healthcheck:
test: ["CMD-SHELL", "wget -q -O- http://127.0.0.1:7085/status/ready >/dev/null 2>&1 || exit 1"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s

该模式适用于本地开发、Docker Compose 或基于虚拟机的部署,便于编排器获取简单的容器健康信号。

外部负载均衡器检查​

对于位于负载均衡器之后的虚拟机、物理机或 Docker 部署,针对数据面状态 API 配置健康检查:

  • 仅需确认进程运行时,使用 http://<dp-host>:7085/status。
  • 希望停止向失去控制面连接的节点路由流量时,使用 http://<dp-host>:7085/status/ready。

如果希望负载均衡器在中断期间继续向使用缓存配置的节点路由流量,请检查已发布的流量端口,或仍可基于缓存配置成功响应的路径。

TCP Socket 检查​

作为 HTTP 检查的替代方案,可以在代理端口(HTTP 默认为 9080,HTTPS 默认为 9443)执行 TCP Socket 检查。当状态端点不可用时,如果仍需确认网络栈可以响应,可使用这种检查。

deployment.yaml
readinessProbe:
tcpSocket:
port: 9080
initialDelaySeconds: 5
periodSeconds: 10

预期响应​

  • 成功:200 OK 表示本次具体检查通过。
  • 就绪失败:/status/ready 返回 503 Service Unavailable 表示某个 worker 未同步,或所有配置的 DP Manager 端点均不可用。检查响应体和网关日志以区分原因。
  • 失败:其他状态码、连接拒绝或超时均表示健康检查失败。

推荐默认值​

  • 存活检查使用 /status。
  • 流量接收资格依赖与 DP Manager 同步时,使用 /status/ready。
  • 仅允许编排器、负载均衡器或运维网络访问状态端口。
  • 在 Kubernetes 外运行时,确保 config.yaml 将状态端口绑定到健康检查器可访问的地址。

后续步骤​