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

配置就绪和存活探针

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

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

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

健康检查端点

启用数据面 status 配置后,网关会在状态端口提供以下端点:

类型路径用途
存活/status表示进程已成功启动且正在运行。
就绪/status/ready表示网关已准备好代理流量,例如 DP Manager 连接可用。
备注

默认情况下,网关进程运行时 /status 返回 200;如果数据面无法访问配置的控制面端点,/status/ready 可返回 503。因此判断节点是否应接收流量时,/status/ready 更合适。

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

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

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

在 Kubernetes 中配置探针

Helm 配置项

通过 api7/gateway Helm Chart 部署时,在 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

除非有特殊原因需要共用端点,否则存活检查使用 /status,就绪检查使用 /status/ready

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

非 Helm Kubernetes 清单

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

deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api7-gateway
spec:
template:
spec:
containers:
- name: gateway
image: api7/api7-ee-3-gateway:latest
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 运行 API7 网关,可以从主机或网关容器内部查询状态端点:

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

如果未将 7085 发布到主机,请先发布该端口。对于 Docker Compose 或其他容器运行时,可以添加类似以下的健康检查:

docker-compose.yaml
services:
gateway:
image: api7/api7-ee-3-gateway:${GATEWAY_VERSION}
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 默认 9080、HTTPS 默认 9443)使用 TCP 检查:

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

预期响应

  • 成功200 OK 表示实例健康。
  • 就绪失败/status/ready 返回 503 Service Unavailable 表示所有配置的 DP Manager(etcd.host)端点均不可用。
  • 失败:其他状态码、连接拒绝或超时都表示健康检查失败。

推荐默认值

  • 存活检查使用 /status
  • 就绪检查和承载流量的负载均衡器使用 /status/ready
  • 仅允许编排器、负载均衡器或运维网络访问状态端口。
  • 在 Kubernetes 外运行时,确保 config.yaml 将状态端口绑定到健康检查器可访问的地址。

后续步骤