Apache APISIX容器化:Docker与Kubernetes部署
【免费下载链接】apisix The Cloud-Native API Gateway 项目地址: https://gitcode.com/GitHub_Trending/ap/apisix
前言:云原生时代的API网关挑战
在微服务架构盛行的今天,API网关(API Gateway)已成为现代应用架构的核心组件。传统部署方式面临环境一致性差、扩展性有限、运维复杂度高等痛点。Apache APISIX作为云原生API网关,天然支持容器化部署,为企业提供了更灵活、高效的解决方案。
通过本文,您将掌握:
- ✅ Apache APISIX的Docker容器化部署方法
- ✅ Kubernetes集群中的生产级部署策略
- ✅ 高可用架构设计与最佳实践
- ✅ 监控与运维的完整解决方案
一、Apache APISIX架构概览
在深入部署细节前,先了解APISIX的核心架构:
核心组件说明
| 组件 | 作用 | 部署要求 |
|---|---|---|
| APISIX网关节点 | 处理所有入站请求,执行路由和插件逻辑 | 无状态,可水平扩展 |
| etcd集群 | 存储所有配置数据,保证配置一致性 | 3节点或5节点集群 |
| 监控组件 | 收集指标、日志和追踪数据 | 可选,建议生产环境部署 |
二、Docker容器化部署
2.1 基础环境准备
首先确保系统已安装Docker和Docker Compose:
# 安装Docker
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2.2 单机开发环境部署
创建docker-compose.yml文件:
version: "3.8"
services:
# etcd配置中心
etcd:
image: bitnami/etcd:3.5.4
environment:
ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379"
ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
ports:
- "2379:2379"
- "2380:2380"
# APISIX网关
apisix:
image: apache/apisix:3.8.0-debian
depends_on:
- etcd
ports:
- "9080:9080" # 管理端口
- "9091:9091" # 控制端口
- "9443:9443" # HTTPS端口
- "9180:9180" # Admin API端口
volumes:
- ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
environment:
- APISIX_DEPLOYMENT=traditional
创建配置文件apisix_conf/config.yaml:
apisix:
node_listen: 9080
enable_admin: true
admin_key:
- name: "admin"
key: edd1c9f034335f136f87ad84b625c8f1
role: admin
etcd:
host:
- "http://etcd:2379"
prefix: "/apisix"
timeout: 30
plugins:
- prometheus
- zipkin
- key-auth
- jwt-auth
- limit-req
启动服务:
docker-compose up -d
2.3 验证部署
# 检查服务状态
docker-compose ps
# 测试APISIX Admin API
curl http://localhost:9180/apisix/admin/routes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
# 创建测试路由
curl http://localhost:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
-X PUT -d '
{
"uri": "/get",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
# 测试路由
curl http://localhost:9080/get
三、Kubernetes生产环境部署
3.1 集群环境要求
| 资源类型 | 最低要求 | 推荐配置 |
|---|---|---|
| Kubernetes版本 | v1.19+ | v1.23+ |
| CPU | 2核 | 4核+ |
| 内存 | 4GB | 8GB+ |
| 存储 | 20GB | 50GB+ |
3.2 使用Helm部署
首先添加APISIX Helm仓库:
helm repo add apisix https://charts.apiseven.com
helm repo update
创建values.yaml配置文件:
# values.yaml
apisix:
enabled: true
replicaCount: 3
image:
repository: apache/apisix
tag: 3.8.0-debian
pullPolicy: IfNotPresent
config:
config.yaml: |
apisix:
node_listen: 9080
enable_admin: true
admin_key:
- name: "admin"
key: edd1c9f034335f136f87ad84b625c8f1
role: admin
etcd:
host:
- "http://apisix-etcd:2379"
prefix: "/apisix"
service:
type: LoadBalancer
ports:
- name: http
port: 9080
targetPort: 9080
- name: https
port: 9443
targetPort: 9443
- name: admin
port: 9180
targetPort: 9180
etcd:
enabled: true
replicaCount: 3
auth:
rbac:
create: false
persistence:
enabled: true
size: 8Gi
dashboard:
enabled: true
执行部署命令:
# 创建命名空间
kubectl create namespace apisix
# 部署APISIX
helm install apisix apisix/apisix -n apisix -f values.yaml
# 查看部署状态
kubectl get all -n apisix
3.3 高可用架构设计
3.4 网络策略配置
创建NetworkPolicy确保网络安全:
# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: apisix-network-policy
namespace: apisix
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: apisix
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 9080
- protocol: TCP
port: 9443
egress:
- to:
- podSelector:
matchLabels:
app: etcd
ports:
- protocol: TCP
port: 2379
四、监控与运维
4.1 Prometheus监控配置
启用Prometheus插件并配置监控:
# prometheus-values.yaml
plugins:
- prometheus
plugin_attrs:
prometheus:
export_addr:
ip: "0.0.0.0"
port: 9091
export_uri: "/metrics"
# ServiceMonitor配置
serviceMonitor:
enabled: true
namespace: apisix
interval: 15s
scrapeTimeout: 10s
path: /apisix/prometheus/metrics
port: prometheus
4.2 关键监控指标
| 指标名称 | 类型 | 说明 | 告警阈值 |
|---|---|---|---|
| apisix_http_status | Counter | HTTP状态码统计 | 5xx > 1% |
| apisix_bandwidth | Gauge | 带宽使用情况 | > 80% 容量 |
| apisix_etcd_reachable | Gauge | etcd连接状态 | == 0 |
| apisix_nginx_connections | Gauge | Nginx连接数 | > 80% 最大连接数 |
4.3 日志收集配置
使用Fluentd或Filebeat收集日志:
# log-sidecar.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: apisix-log-config
namespace: apisix
data:
fluent.conf: |
<source>
@type tail
path /usr/local/apisix/logs/access.log
pos_file /var/log/fluentd/access.log.pos
tag apisix.access
<parse>
@type json
</parse>
</source>
<match apisix.access>
@type elasticsearch
host elasticsearch-logging
port 9200
logstash_format true
logstash_prefix apisix-access
</match>
五、最佳实践与故障排除
5.1 性能优化建议
# 高性能配置示例
nginx_config:
http:
client_max_body_size: 100m
client_body_buffer_size: 256k
keepalive_timeout: 120s
keepalive_requests: 10000
sendfile: on
tcp_nopush: on
tcp_nodelay: on
upstream:
keepalive: 256
keepalive_requests: 10000
keepalive_timeout: 60s
5.2 常见问题排查
问题1:etcd连接失败
# 检查etcd状态
kubectl exec -n apisix deployment/apisix -- curl http://apisix-etcd:2379/health
# 查看APISIX日志
kubectl logs -n apisix deployment/apisix -f
问题2:配置同步延迟
# 检查配置同步状态
curl http://localhost:9180/apisix/admin/plugins/reload \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT
# 强制重新加载配置
kubectl rollout restart deployment/apisix -n apisix
问题3:内存泄漏
# 监控内存使用
kubectl top pods -n apisix
# 分析内存分配
kubectl exec -n apisix deployment/apisix -- \
curl http://localhost:9091/apisix/prometheus/metrics | grep process_resident_memory_bytes
5.3 自动化运维脚本
创建健康检查脚本:
#!/bin/bash
# health-check.sh
set -e
# 检查APISIX服务状态
check_apisix() {
local status=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:9080/status)
if [ "$status" -ne 200 ]; then
echo "APISIX服务异常,状态码: $status"
return 1
fi
echo "APISIX服务正常"
}
# 检查etcd连接
check_etcd() {
if ! curl -s http://localhost:2379/health | grep -q '"health":"true"'; then
echo "etcd连接异常"
return 1
fi
echo "etcd连接正常"
}
# 执行检查
check_apisix
check_etcd
六、版本升级与回滚
6.1 平滑升级策略
# 金丝雀发布
kubectl set image deployment/apisix \
apisix=apache/apisix:3.8.0-debian -n apisix --record
# 逐步扩容
kubectl scale deployment apisix --replicas=4 -n apisix
kubectl rollout status deployment/apisix -n apisix
# 验证新版本
curl http://localhost:9080/status
6.2 快速回滚方案
# 查看发布历史
kubectl rollout history deployment/apisix -n apisix
# 回滚到上一个版本
kubectl rollout undo deployment/apisix -n apisix
# 指定回滚版本
kubectl rollout undo deployment/apisix --to-revision=2 -n apisix
总结
Apache APISIX的容器化部署为现代云原生应用提供了强大的API网关解决方案。通过Docker和Kubernetes的有机结合,我们可以实现:
- 快速部署:利用容器化技术快速搭建开发、测试和生产环境
- 弹性扩展:根据流量自动扩缩容,提高资源利用率
- 高可用性:多副本部署和负载均衡确保服务连续性
- 简化运维:统一的配置管理和监控体系降低运维成本
- 安全可靠:网络策略和访问控制保障系统安全
在实际生产环境中,建议结合具体业务需求选择合适的部署方案,并建立完善的监控告警体系。随着业务的发展,可以进一步探索服务网格(Service Mesh)集成、多集群部署等高级特性,构建更加健壮和灵活的API网关架构。
记住,成功的容器化部署不仅仅是技术实现,更需要结合DevOps文化和持续改进的理念,不断优化和调整部署策略,以适应快速变化的业务需求。
【免费下载链接】apisix The Cloud-Native API Gateway 项目地址: https://gitcode.com/GitHub_Trending/ap/apisix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



