前言

APISIX是一个高性能、可扩展的开源API网关,被广泛应用于API管理和服务治理。在本文中,我们将为您介绍APISIX的概念和功能,深入探讨它在API管理和服务治理中的作用和优势。我们还将提供详细的安装和入门指南,帮助您轻松部署和开始使用APISIX。无论您是API开发人员、系统管理员还是架构师,本文都将成为您APISIX入门的重要指南。

关于APISIX

APISIX是一个基于OpenResty(Nginx+Lua)和etcd实现的云原生、高性能、可扩展的微服务API开源网关,具有动态路由热插件加载等特点,可手动配置路由负载均衡限速限流身份验证等,方便操作,同时也可以根据自己的需求开发插件;虽然是Lua语言开发,但提供了如Java、Go、Python等语言的插件Runner,方便不同技术栈的同学使用,非常高效方便。欢迎访问官方网站得到更多信息。

APISIX安装

APISIX可以使用多种方式安装,如Docker容器部署、K8S容器部署、RPM方式部署

部署etcd集群

Apisix需要使用etcd存储数据,并且需要使用3.4.0以上版本。如果是生产环境,需部署高可用的etcd集群。

准备3台机器,如下:
机器1:172.16.32.73
机器2:172.16.32.54
机器3:172.16.32.86

Docker

  1. 创建install.sh脚本

    cname="etcd-01"
    logs="/opt/data/"${cname}
    docker run -d --name ${cname} \
            --restart=unless-stopped \
            --net=host \
            --privileged=true \
            --env ALLOW_NONE_AUTHENTICATION=yes \
            --env ETCD_NAME=${cname} \
            --env ETCD_ADVERTISE_CLIENT_URLS=http://${cname}:2379 \
            --env ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 \
            --env ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \
            --env ETCD_INITIAL_ADVERTISE_PEER_URLS=http://${cname}:2380 \
            --env ETCD_INITIAL_CLUSTER=etcd-01=http://etcd-01:2380,etcd-02=http://etcd-02:2380,etcd-03=http://etcd-03:2380 \
            --env ETCD_INITIAL_CLUSTER_STATE=new \
            --env ETCD_INITIAL_CLUSTER_TOKEN=lbx-etcd-cluster \
            --env TZ=Asia/Shanghai \
            --add-host etcd-01:172.16.32.73 --add-host etcd-02:172.16.32.54 --add-host etcd-03:172.16.32.86 \
            -v ${logs}/data:/bitnami/etcd/data \
        bitnami/etcd:3.5.1-debian-10-r36
    

    说明:

    • 这里使用了bitnami的etcd镜像
    • 使用环境变量的方式直接配置etcd需要的各个配置信息
    • 使用host方式,直接将机器IP配置到host中
    • 将etcd产生的数据目录/bitnami/etcd/data持久化到宿主机的/data
    • docker直接使用host网络,如果端口被占用,可以使用bridge网络,将2379、2380端口开放,然后根据具体情况修改各个env配置
  2. 修改脚本权限并执行脚本

    chmod +x install.sh
    ./install.sh
    
  3. 在3台机器上均执行上面的脚本,注意修改cname即可

安装APISIX

Docker

  1. 创建install.sh脚本

    cname="apisix"
    port1=18080
    port2=18443
    logs="/opt/data/"${cname}
    
    docker run --hostname=${cname} -d --privileged=true --restart=always -p 9091:9091 -p ${port1}:9080 -p ${port2}:9443 --name ${cname} -v ${logs}/logs:/usr/local/apisix/logs -v ${logs}/config.yaml:/usr/local/apisix/conf/config.yaml --add-host=etcd-01:172.16.32.73 --add-host=etcd-02:172.16.32.54 --add-host=etcd-03:172.16.32.86 apache/apisix:2.10.4-centos
    

    说明:

    • 9091是Prometheus监控的端口,如果不需要可以不开放此端口
    • 9080是默认配置的http端口,如果修改了配置文件,需调整此端口
    • 9443是默认配置的https端口,如果修改了配置文件,需调整此端口
    • etcd的配置采用host的方式,故需要在启动容器时添加host
    • apisix的镜像版本可以到官方dockerhub查询
  2. 调整config.yaml

    相较于默认配置,建议调整一下配置

    apisix:
      node_listen:                      # 默认HTTP端口是9080,可以同时监听其他端口
        - 9080
    
      allow_admin:                  
        - 0.0.0.0/24              # 调整可以访问admin api的IP,生产环境建议调整
    
      admin_key:
        -
          name: admin
          key: edd1c9f034335f136f87ad84b625c8f1  # 修改admin默认密码,默认密码是admin,生产环境建议修改
          role: admin                 # admin: 可以管理所有配置,viewer:只读所有配置
          
      ssl:
        enable: true
        listen:                       # 默认HTTPS端口是9443,可以同时监听其他端口
          - 9443
        ssl_protocols: TLSv1 TLSv1.1 TLSv1.2 TLSv1.3    # 默认支持的TLS协议比较少,部分旧客户端无法兼容,可以新增其他版本的TLS协议
        ssl_ciphers: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA
        
    nginx_config:                     
      error_log: /dev/stderr    # 错误日志的目录地址,可以写目录,如logs/error.log,也可以写/dev/stderr,日志会输出到docker控制台(错误类型)
      
      http_configuration_snippet: |
        client_body_buffer_size 10M;  # 调整默认的nginx缓存
        
      http:
        access_log: /dev/stdout # 访问日志的目录地址,可以写目录,如logs/access.log,也可以写/dev/stdout,日志会输出到docker控制台(普通类型)
        access_log_format: "$remote_addr - $remote_user [$time_local] $http_host \"$request\" $status $body_bytes_sent $request_time \"$http_referer\" \"$http_user_agent\" $upstream_addr $upstream_status $upstream_response_time \"$upstream_scheme://$upstream_host$upstream_uri\"" # 可以调整access日志的格式.
        
    etcd:
      host:                           # 调整etcd集群的配置
        - "http://etcd-01:2379"     
        - "http://etcd-02:2379"
        - "http://etcd-03:2379"
        
    plugins:   
      - prometheus                     # priority: 500       # 普罗米修斯插件
      - log-rotate                    # priority: 100        # 日志切分插件
      
    plugin_attr:
      log-rotate:
        interval: 3600    # 切割文件时间,单位秒
        max_kept: 168     # 保存的最大日志文件数
        enable_compression: false    # 是否开启压缩,需要gzip
      prometheus: # 普罗米修斯配置
        export_uri: /apisix/prometheus/metrics # 数据接口
        enable_export_server: true
        export_addr:
          ip: 0.0.0.0 # 可以访问的IP
          port: 9091 # 端口
      server-info:
        report_interval: 60  # 服务器信息上报时长,单位秒
        report_ttl: 3600     # 服务器在etcd中存活的时间,单位秒
    

    其余配置可以查阅官方文档

  3. 执行启动命令

    chmod +x install.sh
    ./install.sh
    
  4. 查看容器状态

    docker ps
    
  5. 查看启动日志

    docker logs apisix
    

    如果出现以下日志,则启动正常

    /usr/local/openresty/luajit/bin/luajit ./apisix/cli/apisix.lua init
    /usr/local/openresty/luajit/bin/luajit ./apisix/cli/apisix.lua init_etcd
    
  6. 通过ip:port可以访问接口

    > curl 127.0.0.1:9080
    {"error_msg":"404 Route Not Found"}
    

K8S

这里使用腾讯云可视化面板配置,其他服务商大同小异

  1. 创建ConfigMap,名称为apisix,配置为config.yaml中的配置(参考Docker方式的config.yaml即可)

  2. 新增工作负载

    image-20220425154653934

    说明:

    • 主机别名为部署etcd集群的地址
    • 数据卷需要选择上一步创建的ConfigMap,并挂载到容器中/usr/local/apisix/conf/config.yaml
    • 环境变量建议添加TZ,值为Asia/Shanghai,这样容器内的时间才会与北京时间同步
  3. 创建service

    image-20220425154917534

    说明:

    • 根据实际情况,开放http、https、普罗米修斯端口

RPM

  1. 下载RPM包

    sudo mkdir -p apisix
    sudo yum install -y https://repos.apiseven.com/packages/centos/apache-apisix-repo-1.0-1.noarch.rpm
    sudo yum clean all && yum makecache
    sudo yum install -y --downloadonly --downloaddir=./apisix apisix
    
  2. ./apisix文件夹拷贝到目标机器,安装Apisix

    sudo yum install ./apisix/*.rpm
    
  3. 修改配置文件,可参考docker方式搭建的config.yaml

    vim ./apisix/conf/config.yaml
    
  4. 通过systemd启动或关闭apisix

    systemctl start apisix
    systemctl stop apisix