前言
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
-
创建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配置
-
修改脚本权限并执行脚本
chmod +x install.sh ./install.sh
-
在3台机器上均执行上面的脚本,注意修改cname即可
安装APISIX
Docker
-
创建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查询
-
调整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中存活的时间,单位秒
其余配置可以查阅官方文档
-
执行启动命令
chmod +x install.sh ./install.sh
-
查看容器状态
docker ps
-
查看启动日志
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
-
通过ip:port可以访问接口
> curl 127.0.0.1:9080 {"error_msg":"404 Route Not Found"}
K8S
这里使用腾讯云可视化面板配置,其他服务商大同小异
-
创建ConfigMap,名称为
apisix
,配置为config.yaml中的配置(参考Docker方式的config.yaml即可) -
新增工作负载
说明:
- 主机别名为部署etcd集群的地址
- 数据卷需要选择上一步创建的ConfigMap,并挂载到容器中
/usr/local/apisix/conf/config.yaml
- 环境变量建议添加
TZ
,值为Asia/Shanghai
,这样容器内的时间才会与北京时间同步
-
创建service
说明:
- 根据实际情况,开放http、https、普罗米修斯端口
RPM
-
下载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
-
将
./apisix
文件夹拷贝到目标机器,安装Apisixsudo yum install ./apisix/*.rpm
-
修改配置文件,可参考docker方式搭建的config.yaml
vim ./apisix/conf/config.yaml
-
通过systemd启动或关闭apisix
systemctl start apisix systemctl stop apisix