写点什么

APISIX 的安装和简单使用

作者:飞翔123
  • 2022 年 9 月 26 日
    北京
  • 本文字数:3235 字

    阅读完需:约 11 分钟

APISIX 是一个云原生、高性能、可扩展的微服务 API 网关。它是基于 Nginx 和 etcd 来实现,和传统 API 网关相比,APISIX 具备动态路由和插件热加载,特别适合微服务体系下的 API 管理。

APISIX 安装

首先安装依赖https://github.com/apache/incubator-apisix/blob/master/doc/zh-cn/install-dependencies.md


# 安装 OpenResty, etcd 和 编译工具sudo yum install -y etcd openresty curl git gcc luarocks lua-devel
# 开启 etcd serversudo service etcd start
复制代码


依赖 openresty 的新版本 OpenResty 1.15.8.3。检查下 etcd 是否已经正常启动。


ps aux | grep etcdetcd      2769  2.2  4.2 10856200 21364 ?      Ssl  14:54   0:00 /usr/bin/etcd --name=default --data-dir=/var/lib/etcd/default.etcd --listen-client-urls=http://localhost:2379
复制代码


可以看到,监听的端口号是 2379.也可以看下 etcd 的配置,也可以看到端口号。


/etc/etcd/etcd.conf
复制代码


接下来安装主角 apisix 官方安装 yum 安装 sudo yum install -y https://github.com/apache/incubator-apisix/releases/download/1.3/apisix-1.3-0.el7.noarch.rpm发现下载不下来,直接下载 rpm 包手动安装。


https://github.com/apache/incubator-apisix/releases/download/1.3/apisix-1.3-0.el7.noarch.rpm
复制代码


手动安装,并且启动 apisix


rpm -ivh apisix-1.3-0.el7.noarch.rpm准备中...                          ################################# [100%]正在升级/安装...   1:apisix-1.3-0                     ################################# [100%]apisix start
复制代码


检查下 apisix 是否启动成功


ps aux | grep nginxroot      2978  0.0  0.5 178996  2616 ?        Ss   08:14   0:00 nginx: master process openresty -p /usr/local/apisix -c /usr/local/apisix/conf/nginx.confnobody    2979  0.6  2.4 191600 12368 ?        R    08:14   0:00 nginx: worker processnobody    2980  0.1  0.4 173672  2120 ?        S    08:14   0:00 nginx: cache manager processnobody    2981  0.0  0.4 173672  2120 ?        S    08:14   0:00 nginx: cache loader process
复制代码


启动成功,也可以到 apisix 的 Nginx conf 的配置路径。

APISIX 简单使用

这是官方的入门指南https://github.com/apache/incubator-apisix/blob/master/doc/zh-cn/getting-started.md


我们先配置下 upstream


curl "http://127.0.0.1:9080/apisix/admin/upstreams/50" -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '> {>     "type": "roundrobin",>     "nodes": {>         "127.0.0.1:7080": 1>     }> }'{"node":{"value":{"type":"roundrobin","nodes":{"127.0.0.1:7080":1},"hash_on":"vars","id":"50"},"createdIndex":22,"key":"\/apisix\/upstreams\/50","modifiedIndex":22},"prevNode":{"value":"{\"hash_on\":\"vars\",\"id\":\"50\",\"nodes\":{\"httpbin.org:80\":1},\"type\":\"roundrobin\"}","createdIndex":19,"key":"\/apisix\/upstreams\/50","modifiedIndex":19},"action":"set"}
复制代码


再给刚刚配置的 upstream 配置 router


curl "http://127.0.0.1:9080/apisix/admin/routes/5" -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '> {>     "uri": "/get",>     "host": "httpbin.org",>     "upstream_id": 50> }'{"node":{"value":{"host":"httpbin.org","upstream_id":50,"uri":"\/get","priority":0},"createdIndex":25,"key":"\/apisix\/routes\/5","modifiedIndex":25},"prevNode":{"value":"{\"host\":\"httpbin.org\",\"plugins\":{\"proxy-rewrite\":{\"scheme\":\"https\"}},\"uri\":\"\\\/get\",\"upstream_id\":50,\"priority\":0}","createdIndex":24,"key":"\/apisix\/routes\/5","modifiedIndex":24},"action":"set"}
复制代码


现在的流程就是这样的的。终端请求 httpbin.org/get->APISIX 代理-> 127.0.0.1:7080


我们再启动一个 Nginx 服务,使得上游服务 127.0.0.1:7080/get 可以正常提供服务。


vim /usr/local/openresty/nginx/conf/nginx.conf添加7080的端口服务    server {        listen       7080;        location /get {            echo "success";        }    }
启动Nginx WEB服务sudo /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
curl 'http://127.0.0.1:7080/get'success说明7080能够正常提供服务了
复制代码


我们在终端试下是否代理成功


curl -i -X GET "http://127.0.0.1:9080/get?foo1=bar1&foo2=bar2" -H "Host: httpbin.org"HTTP/1.1 200 OKContent-Type: application/octet-streamTransfer-Encoding: chunkedConnection: keep-aliveServer: APISIX web serverDate: Sun, 28 Jun 2020 15:52:03 GMT
success
复制代码


打印了 success,说明整个网络流程是通畅的。

APISIX 控制台安装

新版本的 APISIX 已经内置了 dashboard 可视化 WEB 控制台,可以很直观的看到各种 router 配置、upstream 配置等等。浏览器直接访问就可以打开 dashboardhttp://127.0.0.1:9080/apisix/dashboard


出现下面的报错,可能是 etced 服务忘记启动了


connection refused
复制代码


启动下 etcd 服务就正常了 service etcd start 如果是虚拟机或者 docker 机器的话,可能需要打开 admin 的访问显示


vim /usr/local/apisix/conf/config.yaml找到 allow_admin- 127.0.0.0/24 该为 - all就是允许所有IP访问,生产环境可不能这样,有非常大的安全风险
复制代码


正常访问 http://127.0.0.1:9080/apisix/dashboard 就能在左侧的 Routes 和 Upstream 看到上面用 curl 设置的 routes 和 upstream。


etcd 命令行简单使用

etcd 是一个分布式、可靠的 key-value 存储的分布式系统,主要用于服务发现。最著名的 k8s 就是用 etcd 存储配置数据的。命令行主要使用 etcdctl 执行 etcd 命令,先看下帮助菜单


etcdctl -hNAME:   etcdctl - A simple command line client for etcd.
WARNING: Environment variable ETCDCTL_API is not set; defaults to etcdctl v2. Set environment variable ETCDCTL_API=3 to use v3 API or ETCDCTL_API=2 to use v2 API.
USAGE: etcdctl [global options] command [command options] [arguments...]
VERSION: 3.3.11
COMMANDS: backup backup an etcd directory cluster-health check the health of the etcd cluster mk make a new key with a given value mkdir make a new directory rm remove a key or a directory rmdir removes the key if it is an empty directory or a key-value pair get retrieve the value of a key ls retrieve a directory set set the value of a key setdir create a new directory or update an existing directory TTL update update an existing key with a given value updatedir update an existing directory watch watch a key for changes exec-watch watch a key for changes and exec an executable member member add, remove and list subcommands user user add, grant and revoke subcommands role role add, grant and revoke subcommands auth overall auth controls
复制代码


最常用几个命令 ls get set rm rmdir mk mkdir 等等,名字都比较通俗易懂。


etcdctl ls/apisix
etcdctl ls /apisix/apisix/upstreams/apisix/node_status/apisix/ssl/apisix/routes/apisix/services
etcdctl ls /apisix/upstreams/apisix/upstreams/50
etcdctl get /apisix/upstreams/50{"hash_on":"vars","id":"50","nodes":{"127.0.0.1:7080":1},"type":"roundrobin"}
复制代码


用户头像

飞翔123

关注

是多福多寿 2017.08.31 加入

awsf首都发生大

评论

发布
暂无评论
APISIX的安装和简单使用_飞翔123_InfoQ写作社区