Apache APISIX容器化:Docker与Kubernetes部署

Apache APISIX容器化:Docker与Kubernetes部署

【免费下载链接】apisix The Cloud-Native API Gateway 【免费下载链接】apisix 项目地址: https://gitcode.com/GitHub_Trending/ap/apisix

前言:云原生时代的API网关挑战

在微服务架构盛行的今天,API网关(API Gateway)已成为现代应用架构的核心组件。传统部署方式面临环境一致性差、扩展性有限、运维复杂度高等痛点。Apache APISIX作为云原生API网关,天然支持容器化部署,为企业提供了更灵活、高效的解决方案。

通过本文,您将掌握:

  • ✅ Apache APISIX的Docker容器化部署方法
  • ✅ Kubernetes集群中的生产级部署策略
  • ✅ 高可用架构设计与最佳实践
  • ✅ 监控与运维的完整解决方案

一、Apache APISIX架构概览

在深入部署细节前,先了解APISIX的核心架构:

mermaid

核心组件说明

组件作用部署要求
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+
CPU2核4核+
内存4GB8GB+
存储20GB50GB+

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 高可用架构设计

mermaid

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_statusCounterHTTP状态码统计5xx > 1%
apisix_bandwidthGauge带宽使用情况> 80% 容量
apisix_etcd_reachableGaugeetcd连接状态== 0
apisix_nginx_connectionsGaugeNginx连接数> 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的有机结合,我们可以实现:

  1. 快速部署:利用容器化技术快速搭建开发、测试和生产环境
  2. 弹性扩展:根据流量自动扩缩容,提高资源利用率
  3. 高可用性:多副本部署和负载均衡确保服务连续性
  4. 简化运维:统一的配置管理和监控体系降低运维成本
  5. 安全可靠:网络策略和访问控制保障系统安全

在实际生产环境中,建议结合具体业务需求选择合适的部署方案,并建立完善的监控告警体系。随着业务的发展,可以进一步探索服务网格(Service Mesh)集成、多集群部署等高级特性,构建更加健壮和灵活的API网关架构。

记住,成功的容器化部署不仅仅是技术实现,更需要结合DevOps文化和持续改进的理念,不断优化和调整部署策略,以适应快速变化的业务需求。

【免费下载链接】apisix The Cloud-Native API Gateway 【免费下载链接】apisix 项目地址: https://gitcode.com/GitHub_Trending/ap/apisix

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值