api网关现在使用的是一个开源项目(apisix),然后在其上进行的二次开发(修改配置和增加插件),api网关本身相当于是代理服务器,或者说其本质就是一个代理服务器。
因为apisix是基于OpenResty和etcd实现的,所以需要先安装OpenResty和etcd软件包。
先使用yum安装,这个最方便,同时会配好系统环境
# 安装 OpenResty, etcd 和 编译工具
sudo yum install -y etcd openresty curl git gcc luarocks lua-devel
# 开启 etcd server
sudo service etcd start
使用该方法安装完后,发现etcd版本与apisix2.7需求的版本不一致,yum库里面的etcd版本是3.3(已经是最新了),但是apisix(版本是2.7的)需要3.4版本,没办法,只能用yum卸载etcd,然后去GitHub下载最新的3.4。
安装方法参考下面的etcd安装方法。
安装前需要安装相关依赖:OpenResty ,etcd。若已安装,可忽略。
# install epel, `luarocks` need it.
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo 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 && \
sudo cp -a etcd etcdctl /usr/bin/
# add OpenResty source
sudo yum install yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
# install OpenResty and some compilation tools
sudo yum install -y openresty 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'
问题一:wget命令未找到
使用wget命令时,提示为找到命令,安装wget命令:
yum -y install wget
问题二:ssl链接未建立
在使用wget下载etcd时,因为是在GitHub上下载,建链经常出现问题,可以参考:https://www.shuzhiduo.com/A/q4zVyXp7dK/
但是,说实话,上面的两种方法依然没有作用,只好本地下载,然后通过rz上传到服务上(不会使用rz命令,可以参考:https://www.cnblogs.com/patrick-yeh/p/12922829.html)
etcd 是一个分布式、可靠 key-value 存储的分布式系统——也就是一个数据库。当然,它不仅仅用于存储,还提供共享配置及服务发现。
etcd是apisix的配置中心,除了存储配置,etcd还可以为apisix提供以下特性:
APISIX 需要一个配置中心,上面提到的很多功能是传统关系型数据库和 KV 数据库是无法提供的。与 etcd 同类软件还有 Consul、ZooKeeper 等,更详细比较可以参考这里:etcd why,在将来也许会支持其他配置存储方案。
安装2.7版本:
sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm
需要注意的是:
安装好后,检测apisix是否安装完成:
apisix version
启动apisix:
apisix start
默认会安装在/usr/local/apisix路径下,默认端口9080,可通过如下命令检查:
curl 127.0.0.1:9080
{"error_msg":"404 Route Not Found"}
安装完成,如果使用其他设备远程发布命令给apisix,需要更改一个配置(位置/usr/local/apisix/conf/config-defualt.yaml):
将所有ip都注释掉即可。
问题一:apisix无法安装成功
和安装etcd一样,无法从GitHub上下载内容,暂时只能从本地下载,然后通过rz上传到服务器上。
问题二:apisix目录
使用yum安装,默认安装在/usr/local目录下:
APISIX早先版本中,dashboard是内置在apisix中的,只需要安装apisix就可以使用其控制台,但是新版本将其扩展成了两个项目(类似于mysql和Navicat了),所以这里需要安装一下。
第一种方法是命令行安装:
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
配置文件路径:/usr/local/apisix/dashboard/conf/conf.yaml
打开以后,如果远程登录要进行配置:
将远程登录IP添加进去,或者将所有的注释掉,这样会默认所有的主机都可以远程访问。
运行命令:
sudo nohup manager-api -p /usr/local/apisix/dashboard/ &
第一件事,就是关闭防火墙(因为这个问题困扰了半天,将配置文件改来改去就是不对,最后才发现是防火墙没有关闭,也是醉了)
# 关闭防火墙
systemctl stop firewalld
# 关闭防火墙开机自启动
systemctl disable firewalld
通过“ip addr”查询虚拟机IP地址,然后登陆:
# 部署在虚拟机上
IP:9000
# 部署在本地
127.0.0.1:9000
# 查询端口
netstat -anp |grep 9000
登陆账户和密码一样,均为admin。
报错: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)。
GitHub上也报了这个问题:https://github.com/apache/apisix-dashboard/issues/1811