配置就绪和存活探针
API7 网关数据面(DP)节点可在状态端口(默认 7085)暴露内置健康端点。可将这些端点用于 Kubernetes 探针、负载均衡器健康检查或容器级检查,确保流量只发送到健康节点。
在以下场景中可以使用本指南:
- 配置 Kubernetes 就绪和存活探针。
- 在非 Helm Kubernetes 清单中添加健康检查。
- 为非 Kubernetes 部署配置 Docker 或外部负载均衡器检查。
健康检查端点
启用数据面 status 配置后,网关会在状态端口(默认 7085)提供以下端点:
| 类型 | 路径 | 用途 |
|---|---|---|
| 存活 | /status | 表示进程已成功启动且正在运行。 |
| 就绪 | /status/ready | 表示网关已准备好代理流量,例如 DP Manager 连接可用。 |
默认情况下,网关进程运行时 /status 返回 200;如果数据面无法访问配置的控制面端点,/status/ready 可返回 503。因此判断节点是否应接收流量时,/status/ready 更合适。
状态端点由数据面 status 配置控制:
apisix:
status:
ip: 0.0.0.0
port: 7085
如果绑定到 127.0.0.1,本地容器检查仍可工作,但外部负载均衡器无法访问。
在 Kubernetes 中配置探针
Helm 配置项
通过 api7/gateway Helm Chart 部署时,在 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 清单部署时,直接在网关容器上配置探针:
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 或其他容器运行时,可以添加类似以下的健康检查:
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 检查的替代方案,可以在代理端口(HTTP 默认为 9080,HTTPS 默认为 9443)使用 TCP Socket 检查。如果需要在状态端点不可用时仍确认网络栈正 常响应,此检查方式很有用:
readinessProbe:
tcpSocket:
port: 9080
initialDelaySeconds: 5
periodSeconds: 10