apisix tcp mysql_APISIX 入门(国产微服务网关)

一、 概述9 q& q" ?; e8 X) q

7 j$ }4 V( m- X/ R* [0 fGitee上的官方文档链接。! O8 T. C: J' K( J* @8 \

APISIX 是基于 OpenResty + etcd 实现的云原生、高性能、可扩展的微服务 API 网关。它是国人开源,目前已经进入 Apache 进行孵化。* ?% F+ S" m* O' i' m

2 x8 L3 c) N; @6 y. ^5 F# h% P! s1 L. s2 [7 d. L% \

OpenResty:通过 Lua 扩展 Nginx 实现的可伸缩的 Web 平台。

- E7 E3 H. i6 }0 q

etcd:Key/Value 存储系统。

' E/ V1 B5 U' k! \APISIX 通过插件机制,提供了动态负载平衡、身份验证、限流限速等等功能,当然我们也可以自己开发插件进行拓展。

0 A5 l0 X/ |! g$ f. D# i% w

apisix tcp mysql_APISIX 入门(国产微服务网关)_第1张图片

3 W  [' N( U! ~/ M+ w% [# X; |% F* x# }' J9 @* ?7 W( J0 ]. d5 d

动态负载均衡:跨多个上游服务的动态负载均衡,目前已支持 round-robin 轮询和一致性哈希算法。1 W. l2 k9 h. |: E6 V* Y

身份验证:支持 key-auth、JWT、basic-auth、wolf-rbac 等多种认证方式。

, f/ L, F4 K6 o" W, [

限流限速:可以基于速率、请求数、并发等维度限制。& E/ E# K0 r  ^7 h并且 APISIX 还支持 A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、监控报警、服务可观测性、服务治理等等高级功能,这在作为微服务 API 网关非常重要的特性。

( C' F. \% ]7 p% ]$ t下面,我们正式进入 APISIX 的极简入门之旅。

2 H7 X; _- ~: q8 M6 [" h) L二、安装$ [2 W* R4 \! p9 B! ^; D

. v1 G3 \+ x( @7 I) |+ ?7 M9 A6 \在《APISIX 官方文档 —— 安装》中,介绍了源码包、RPM 包、Luarocks、Docker 四种安装方式。这里我们使用 CentOS 7.X 系统,所以采用 RPM 包。; H8 U2 X. x  E/ Q3 z3 s' B( H% T

因为 APISIX 是基于 OpenResty + etcd 来实现,所以需要安装它们两个。

* ^- ^* i4 o" J) @3 `2.1 安装依赖

}' ?* A; k  d  o: ^! L2 p! F; p$ A5 ~' w

CentOS 7脚本

. i- K+ D# t7 m! A2 d, R# 安装 epel, `luarocks` 需要它wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmsudo rpm -ivh epel-release-latest-7.noarch.rpm# 添加 OpenResty 源sudo yum install yum-utilssudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo# 安装 OpenResty, etcd 和 编译工具sudo yum install -y etcd openresty curl git gcc luarocks lua-devel# 开启 etcd serversudo service etcd start2.2 安装 Apache APISIX

+ m: u7 S# d# T0 o1 B. p1 P* r1 A  ]. m: J' _5 `

通过 RPM 包安装(CentOS 7),其他安装方式见链接。

% R4 S8 B+ Y) H9 r- H" p2.2.1 安装脚本:

' G. K  D# Q4 p" T  ^7 |' ^+ G' U! D

/ b8 H( j/ m4 bsudo yum install -y https://github.com/apache/incubator-apisix/releases/download/1.3/apisix-1.3-0.el7.noarch.rpm7 G* z  ]. f6 U' T3 M" s# t

一定要看到最后打印如下信息才安装成功,否则查看报错信息来解决。7 D3 g$ {9 I, y" J* @) s

Installed:  apisix.noarch 0:1.3-0                                                                                                                                                                                          Complete!此时,APISIX 安装在/usr/local/apisix/目录,使用如下命令查看各个文件夹:0 n2 |# W% C% ?0 l$ s0 d, j

$ cd /usr/local/apisix/$ ls -lstotal 404 drwxr-xr-x 8 root   root 4096 May  1 11:40 apisix # APISIX 程序4 drwx------ 2 nobody root 4096 May  1 20:44 client_body_temp4 drwxr-xr-x 3 root   root 4096 May  1 20:50 conf # 配置文件4 drwxr-xr-x 6 root   root 4096 May  1 20:40 dashboard # APISIX 控制台4 drwxr-xr-x 5 root   root 4096 May  1 20:40 deps4 drwx------ 2 nobody root 4096 May  1 20:44 fastcgi_temp4 drwxrwxr-x 2 root   root 4096 May  1 20:44 logs # 日志文件4 drwx------ 2 nobody root 4096 May  1 20:44 proxy_temp4 drwx------ 2 nobody root 4096 May  1 20:44 scgi_temp4 drwx------ 2 nobody root 4096 May  1 20:44 uwsgi_temp2.2.2 启动 APISIX命令:0 ^5 R4 @# S( f; \. [

5 B. H6 L7 @/ E' G; s4 \3 wsudo apisix start( @. b; T; U9 L4 v5 ^5 W

默认情况下,APISIX 启动在 9080 端口,使用如下命令测试服务是否正常启动:% L+ n, X0 R/ S

$ curl http://127.0.0.1:9080/{"error_msg":"failed to match any routes"}三、APISIX 控制台

7 W' T' U6 v. U5 s+ C( i, _  a6 q$ A$ D0 u* B' M' E2 \

APISIX 内置控制台功能,方便我们进行 APISIX 的 Route、Consumer、Service、SSL、Upstream 的查看与维护。也就是上面看到的dashboard文件夹。' N' d) W2 y6 G7 Z5 i; }

在/usr/local/apisix/conf/nginx.conf配置文件中,设置了 APISIX 控制台的访问路径为/apisix/dashboard。如下文所示:

7 h4 Y2 D7 _) \* D8 \. c" ?! i% ]        location /apisix/dashboard {                allow 127.0.0.0/24;                deny all;            alias dashboard/;            try_files $uri $uri/index.html /index.html;        }考虑到安全性,APISIX 控制台只允许本机访问,因此我们需要修改/usr/local/apisix/conf/config.yaml配置文件,增加允许访问的远程 IP 地址。如下所示:

, q3 l3 _# u" ~4 n  |  allow_admin:                  # http://nginx.org/en/docs/http/ngx_http_access_module.html#allow    - 127.0.0.0/24              # If we don't set any IP list, then any IP access is allowed by default.    - 211.94.246.0/24           # 新增加的远程IP地址段。修改完配置后,使用 apisix restart 命令,重启 APISIX 来生效配置。然后,使用浏览器访问 http://101.133.227.13:9080/apisix/dashboard地址,进入 APISIX 控制台。结果如下图所示:

' P: K3 c! t! j9 a- {/ M+ L

5 Y% w0 V. m: z( r: Y9 i. r9 [

apisix tcp mysql_APISIX 入门(国产微服务网关)_第2张图片) N! D3 E3 C, u  U* d1 g8 }

使用默认的“admin/123456”账号,登录 APISIX 控制台。1 s* }" y3 u4 @, e1 d  X

四、动态负载均衡4 q, ^% ], h! ~. G

/ t- i  m9 Q* x& D  }

对后端服务提供的 API 接口进行负载均衡。我们启动同一个springboot服务在2个不同端口18080 和 28080。. w5 o# T. [) l' v0 X+ ]$ G

% @. T2 n5 b) x# z5 \9 E

apisix tcp mysql_APISIX 入门(国产微服务网关)_第3张图片) d* e1 V! l" u6 O# `+ C3 l4 P

4.1启动2个微服务命令" ~1 }* v" Z* N

" J* O2 N$ k9 j" s+ W

java -jar vue-springboot-0.0.1-SNAPSHOT-exec.jar --server.port=18080

$ r# X1 a$ d( U6 e- J& }java -jar vue-springboot-0.0.1-SNAPSHOT-exec.jar --server.port=28080# H* _* d: _$ _$ a" r! i

4.2 验证服务是否正常- U9 G0 f8 O0 V* H. G$ M+ M$ N+ s

! S) K/ H4 u2 M# o9 r% Qcurl -k --tlsv1 https://localhost:18080/v2/vue/api/programLanguage/getAll- U9 ^# }( P1 }

curl -k --tlsv1 https://localhost:28080/v2/vue/api/programLanguage/getAll

$ G- G6 n, A0 t5 U1 {" l' l1 [返回:7 j, w# g9 k) T' z0 z

["C","vue","java","PHP","Python","C++"]2 g/ s' [; R0 U/ u6 `

如果正常返回数据即可。

6 W- C% v  j) O& M" W3 k4.3 重要概念

6 X: _1 i! x$ @5 }3 w/ A7 ^2 m3 n: ]; U0 i& y$ ~9 X, {

一个微服务可以通过 APISIX 的路由、服务、上游和插件等多个实体之间的关系进行配置。 Route(路由)与客户端请求匹配,并指定它们到达 APISIX 后如何发送到 Upstream(上游,后端 API 服务)。 Service(服务)为上游服务提供了抽象。因此,您可以创建单个 Service 并在多个 Route 中引用它。0 r% v8 r& _! E* ?8 a

4.4 创建 APISIX Upstream(上游,后端 API 服务)

6 O& _. B+ t6 ]$ U7 I+ n$ E0 k9 }% i- f& e6 G

APISIX Upstream,是虚拟主机抽象,对给定的多个服务节点按照配置规则进行负载均衡。它根据配置规则在给定的一组服务节点上执行负载平衡。 因此,单个上游配置可以由提供相同服务的多个服务器组成。每个节点将包括一个 key(地址/ip:port)和一个 value (节点的权重)。 服务可以通过轮询或一致哈希(cHash)机制进行负载平衡。

- O9 q. n  x7 z1 R配置路由时,可以直接设置 Upstream 信息,也可以使用服务抽象来引用 Upstream 信息。3 T. O4 @- r' X, X* B! l( \$ Z% P

在 APISIX 控制台的「Upstream」菜单中,创建一个 APISIX Upstream。如下图所示:

8 q7 b7 x. ~& w6 b' `

: o4 N8 e7 A3 e) z& {2 W( F

apisix tcp mysql_APISIX 入门(国产微服务网关)_第4张图片

( N6 n- n8 V4 i* n$ U0 V/ h( q: w2 Q4.5 创建 APISIX Route, a2 e: o8 k0 M% Q4 I

8 T& \3 s: {$ q! K& L

APISIX Route,字面意思就是路由,通过定义一些规则来匹配客户端的请求,然后根据匹配结果加载并执行相应的 插件,并把请求转发给到指定 Upstream。

/ E- p) \0 k2 {. ^: G+ f

& D! t) l- s* x3 n

apisix tcp mysql_APISIX 入门(国产微服务网关)_第5张图片4.6 测试7 G1 W8 `+ P- {+ ~4 ~2 J( W1 c

4 c( \6 G! Y7 n1 w/ P# C我们来请求 APISIX 网关地址+url,转发请求到后端服务。# F$ o* u, d  {2 M( a0 h: B

4.6.1 浏览器访问& [' U3 I( q/ P

% N4 ~) \# ~& ^& D# _2 _" }

地址:http://101.133.227.13:9080/v2/vue/api/programLanguage/getAll,注意:101.133.227.13:9080是APISIX 网关IP和端口号,不是Springboot微服务的。

! f" D7 `% ]" K4 }& ?9 A返回错误:

5 `2 J- G" K+ X: M, g4 v$ OBad RequestThis combination of host and port requires TLS.默认情况下,Apache APISIX 通过 HTTP 协议代理请求。如果我们的后端托管在 HTTPS 环境中,让我们使用proxy-rewrite插件将方案更改为 HTTPS,记得点击页面下方保存 按钮才能生效。* D/ i. ?1 @  i4 L( H

/ }1 W7 @+ b; ^, ~3 H- \

apisix tcp mysql_APISIX 入门(国产微服务网关)_第6张图片

. M" ]. r' _6 P: U7 c3 |* C; S4.6.2 浏览器再次访问/ V% Z4 ?- U- Y- T) w

. F' @  H& O% J& k. s

http://101.133.227.13:9080/v2/vue/api/programLanguage/getAll,+ [$ h/ B2 B' F

或者命令行方式访问curl -i -X GET "http://101.133.227.13:9080/v2/vue/api/programLanguage/getAll"。. g& G  d5 G$ K9 M, g0 }1 }

正常返回结果:["C","vue","java","PHP","Python","C++"]。

6 a7 {: ^7 j/ W, j$ C; N1 NAPI 也可以通过 HTTPs(9443)端口服务访问。如果您使用的是自签名证书,那么通过 curl 命令使用 -k 参数忽略自签名证书错误。注意:使用了https和9443端口。9 T: n. i% U: Q

curl -i -k -X GET "https://101.133.227.13:9443/v2/vue/api/programLanguage/getAll"4 V; [9 p* d5 b+ E0 }4 A; v

+ ~8 D4 w. H4 D, X1 p  ?* L

apisix tcp mysql_APISIX 入门(国产微服务网关)_第7张图片

4 L  J* a2 U& y9 ?$ I( I1 w0 D2 n2 L) c. m0 `. s( x# |4 h

Java吧 收集整理 java论坛 www.java8.com

你可能感兴趣的:(apisix,tcp,mysql)