配置上游健康检查
健康检查是一种根据上游服务响应情况判断其健康或不健康的机制。启用健康检查后,网关只会将请求转发到被认为健康的上游服务,不会转发到被认为不健康的服务。
健康检查通常有两种方式:
- 主动检查:网关主动、定期向上游服务发送请求,并根据这些请求的响应判断上游服务健康状态。
- 被动检查:网关不主动探测,而是根据上游服务对客户端请求的响应判断健康状态。
本文介绍如何通过 Ingress Controller 为上游服务配置主动和被动健康检查。
前置条件
启动示例上游服务
创建 Kubernetes manifest 文件,部署两个 NGINX 实例作为示例上游服务:
nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: aic
name: nginx1
spec:
replicas: 1
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: aic
name: nginx1
spec:
selector:
app: nginx1
ports:
- name: http
port: 8080
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: aic
name: nginx2
spec:
replicas: 1
selector:
matchLabels:
app: nginx2
template:
metadata:
labels:
app: nginx2
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: aic
name: nginx2
spec:
selector:
app: nginx2
ports:
- name: http
port: 8081
targetPort: 80
将配置应用到集群:
kubectl apply -f nginx.yaml
通过端口转发将 NGINX Service 端口暴露到本地:
kubectl port-forward svc/nginx1 8080:8080 &
kubectl port-forward svc/nginx2 8081:8081 &
验证两个 NGINX 实例是否正常运行:
for port in 8080 8081; do
curl -s "http://127.0.0.1:$port" | grep -q "Welcome to nginx" &&
echo "NGINX welcome page available on port $port."
done
你应看到以下响应:
NGINX welcome page available on port 8080.
NGINX welcome page available on port 8081.
启用 Control API
升级网关以启用 Control API。
- APISIX 网关
- API7 网关
导出所有 values(包括默认值):
helm get values -n aic apisix --all > values.yaml
在 values 文件中按如下方式更新配置:
values.yaml
apisix:
enabled: true
control:
enabled: true
升级 Helm release:
helm upgrade -n aic apisix apisix/apisix -f values.yaml
转发 Control API 端口:
kubectl port-forward service/apisix-control 9090:9090 &
默认情况下,Control API 会在 9090 端口启用:
values.yaml
control:
enabled: true
ip: 127.0.0.1
port: 9090
转发 Control API 端口:
kubectl port-forward pod/<api7-gateway-pod-name> 9090:9090 &
配置主动健康检查
主动检查会定期向上游服务发送请求或探针,并根据响应判断上游服务的健康状态。
本节通过两个示例帮助你理解:
- 主动检查如何检测上游状态变化。
- 当所有上游状态均为不健康时,网关如何向上游服务转发客户端请求。