1、api网关介绍
api网关现在使用的是一个开源项目(apisix),然后在其上进行的二次开发(修改配置和增加插件),api网关本身相当于是代理服务器,或者说其本质就是一个代理服务器。
apisix的github网址:https://github.com/apache/apisix
使用java编写apisix插件:https://apisix.apache.org/blog/2021/06/21/use-Java-to-write-Apache-APISIX-plugins
中文官网地址:https://apisix.apache.org/zh/docs/apisix/getting-started/
Apache APISIX 是什么?(最下面有视频教程链接和用户实例):https://www.bookstack.cn/read/apache-apisix-1.5-zh/a24c9ed98214f2f0.md
2、apisix安装
2.1 安装依赖
因为apisix是基于OpenResty和etcd实现的,所以需要先安装OpenResty和etcd软件包。
# install epel, `luarocks` need it. wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -ivh epel-release-latest-7.noarch.rpm # install etcd wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz tar -xvf etcd-v3.4.13-linux-amd64.tar.gz && \ cd etcd-v3.4.13-linux-amd64 && \ cp -a etcd etcdctl /usr/bin/ # add OpenResty source yum install yum-utils yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo # install OpenResty and some compilation tools yum install -y openresty-1.19.3.1-1.el7 curl git gcc luarocks lua-devel # start etcd server,这个只能在自己的设备上登录,其他设备无法进行连接 nohup etcd & # 使用这个命令启动,外网可以访问登录 etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'
为什么需要etcd
etcd 是一个分布式、可靠 key-value 存储的分布式系统——也就是一个数据库。当然,它不仅仅用于存储,还提供共享配置及服务发现。
etcd是apisix的配置中心,除了存储配置,etcd还可以为apisix提供以下特性:
集群支持
事务
历史版本管理
变化通知
高性能
APISIX 需要一个配置中心,上面提到的很多功能是传统关系型数据库和 KV 数据库是无法提供的。与 etcd 同类软件还有 Consul、ZooKeeper 等,更详细比较可以参考这里:etcd why,在将来也许会支持其他配置存储方案。
2.2 安装apisix
2.2.1 安装
安装2.7版本:
yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm
需要注意的是:
上面的链接是2.7版本,随着时间流逝,老版本的链接可能会发生变化,如果你想下载其他版本的apisix,先找到:https://github.com/apache/apisix/releases,然后找到对应的版本链接,替换掉上面的即可。
安装环境与执行目录无关,我在apisix-2.7目录下执行命令,执行完毕,发现该目录下什么都没有。
安装好后,检测apisix是否安装完成:
apisix version
启动apisix:
apisix start
默认会安装在/usr/local/apisix路径下,默认端口9080,可通过如下命令检查:
curl 127.0.0.1:9080 {"error_msg":"404 Route Not Found"}
2.2.2 配置问题
安装完成,如果使用其他设备远程发布命令给apisix,需要更改一个配置(位置/usr/local/apisix/conf/config-defualt.yaml):
将所有ip都注释掉即可。
问题二:apisix目录
使用yum安装,默认安装在/usr/local目录下:
2.3 APISIX dashboard(控制台)安装
APISIX早先版本中,dashboard是内置在apisix中的,只需要安装apisix就可以使用其控制台,但是新版本将其扩展成了两个项目(类似于mysql和Navicat了),所以这里需要安装一下。
2.3.1 两种安装方式
第一种方法是命令行安装:
yum -y install https://github.com/apache/apisix-dashboard/releases/download/v2.7/apisix-dashboard-2.7-0.x86_64.rpm
注意:dashboard版本需要与apisix版本一致。
因为上面的方法需要服务器从GitHub上下载,我这边下载时不断报错,连接不上GitHub,只好使用第二种方法,先本地下载,下载地址就是上面的连接:https://github.com/apache/apisix-dashboard/releases/download/v2.7/apisix-dashboard-2.7-0.x86_64.rpm
然后通过rz上传到服务器上,在上传目录运行:
yum -y install apisix-dashboard-2.7-0.x86_64.rpm
卸载控制台:
yum remove apisix
2.3.2 修改配置文件
配置文件路径:/usr/local/apisix/dashboard/conf/conf.yaml
打开以后,如果远程登录要进行配置:
将远程登录IP添加进去,或者将所有的注释掉,这样会默认所有的主机都可以远程访问。
运行命令:
sudo nohup manager-api -p /usr/local/apisix/dashboard/ &
2.3.3 远程登录第一件事,就是关闭防火墙(因为这个问题困扰了半天,将配置文件改来改去就是不对,最后才发现是防火墙没有关闭,也是醉了)
# 关闭防火墙
systemctl stop firewalld
# 关闭防火墙开机自启动
systemctl disable firewalld
通过“ip addr”查询虚拟机IP地址,然后登陆:
# 部署在虚拟机上
IP:9000
# 部署在本地
127.0.0.1:9000
# 查询端口
netstat -anp |grep 9000
登陆账户和密码一样,均为admin。
2.4 问题
问题一:重启系统,发现无法启动apisix
报错:nginx: [emerg] invalid IPv6 address in resolver “[fe80::4e50:77ff:fe44:181c%enp0s3]” in /usr/local/apisix/conf/nginx.conf:82
根据报错信息,发现第82行多了几个乱码,删除之后,启动apisix,发现还是这个问题,之前删除的乱码又出现了,删除配置文件nginx.conf,启动apisix,依然报错。
后来根据nginx.conf删除,又生成,以为是etcd数据库的问题,里面存储了apisix的配置文件内容,无论你怎么删除,下次启动apisix都会去etcd查询配置,然后再次生成。
按照这个思路解决问题,删除etcd数据库里面的内容
etcdctl del --prefix ""
然,并没有效果。
最后不断看报错信息,怀疑是虚拟机网络配置问题,最终找到问题所在:
如上图所示,将ipv6初始化改成no即可。
问题二:
这个我重启了一下就成功了,不知道问题出现在哪里,当然之前将网络文件配置了一下,所有的ipv6选项都变成no。
问题三:远程登录不上去
报错信息如下:
这个是因为你的远程登录ip没有写入apisix的控制台运行列表中(参考2.3.2)。
问题四:登录报错The manager-api and apache apisix are mismatched.
GitHub上也报了这个问题:https://github.com/apache/apisix-dashboard/issues/1811