一、几种常见网关的比较解析和执行Lua脚本OpenResty的一个应用Kong是一个API网关,具有API管理和请求代理功能,使用PostgreSQL来存储APISIX,用Etcd替换Kong的PostgreSQL,基于Nginx的核心库实现APISIX。API的管理和扩展能力让网关不再只是转发服务,而是可以配置和定制。与Nginx相比,APISIX使用了动态路由,避免了配置后重新加载的风险。同时APISIX支持HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP等更多协议,拥有更好的使用生态。以上是APISIX的架构图,数据面处理客户端请求,控制面管理路由。2、APISIX可以解决什么问题?边缘路由机房对外暴露的访问IP数量通常很少,但支持的服务很多。比如访问的IP是1.2.3.4,但是同时提供了a.domain.com和b.domain.com的访问服务。这就需要使用边缘路由,将不同域名的访问转发到不同的内网地址。APISIX中注册边缘路由的方式有三种,dashboard、ingress-controller、adminapi。网关基本能力网关的功能不仅仅局限于转发流量,更重要的是限流和熔断。APISIX内置了很多插件,提供APM、日志、熔断、鉴权、证书管理、故障注入等功能。同时还支持拖拽组合新插件,开发新插件以满足业务需求。ServerlessAPISIX通过插件的方式提供Serverless,目前只支持Lua。但是APIGateway+Serverless的组合非常有想象力。Serverless可以用来快速对外提供非服务API,绑定各种服务,直接对外提供功能服务。由于网关层的控制,APISIX允许用户通过配置权重来控制流量的转发行为,可用于灰度发布。3、Kubernetes上安装APISIX(1)添加Helm源添加Helm源$helmrepoaddapisixhttps://charts.apiseven.com$helmrepoupdate查找Chart包$helmsearchrepoapisixNAMECHARTVERSIONAPPVERSIONDESCRIPTIONapisix/apisix0.3.52.7.0AHelmchartforApacheAPISIXapisix/apisix-dashboard0.1.52.7.0AHelmchartforApacheAPISIXDashboardapisix/apisix-ingress-controller0.5.01.0.0ApacheAPISIXIngressControllerforKubernetes(2)安装APISIX安装APISIX$helminstallapixapisix/apisix--setgateway.type=NodePort--setadmin.allow.ipList="{0.0.0.0/0}"-napisix--create-命名空间视图入口地址$exportNODE_PORT=$(kubectlget--namespaceapisix-ojsonpath="{.spec.ports[0].nodePort}"servicesapisix-gateway)$exportNODE_IP=$(kubectlgetnodes--namespaceapisix-ojsonpath="{.items[0].status.addresses[0].address}")$echohttp://$NODE_IP:$NODE_PORThttp://1.1.1.1:32462这里的入口地址是后端服务的入口地址。如果是生产环境,应该使用LoadBalancer提供的地址。查看apisix-admin界面key$exportPOD_NAME=$(kubectlgetpods--namespaceapisix-l"app.kubernetes.io/instance=apisix,app.kubernetes.io/name=apisix"-ojsonpath="{.items[0].metadata.name}")$kubectl-napisixexec-it$POD_NAMEcatconf/config.yaml|grepkeyadmin_key:key:edd1c9f034335f136f87ad84b625c8f1key:4054f7cf07e344346cd3f287985e76a2第一个键是admin,第二个键是viewer。这里的key可以用来通过adminapi配置APISIX,为其他系统集成APISIX提供入口。(3)安装Dashboard安装Dashboard$helminstallapisix-dashboardapisix/apisix-dashboard-napisix--create-namespace默认账号为:admin默认密码为:admin查看Dashboard访问入口$exportNODE_PORT=$(kubectlget--namespaceapisix-ojsonpath="{.spec.ports[0].nodePort}"servicesapisix-gateway)$exportNODE_IP=$(kubectlgetnodes--namespaceapisix-ojsonpath="{.items[0].status.addresses[0].address}")$echohttp://$NODE_IP:$NODE_PORThttp://1.1.1.1:31501(4)安装ingress-controller安装ingress-controller$helminstallapisix-ingress-controllerapisix/apisix-ingress-controller--setconfig.apisix.baseURL=http://apisix-admin:9180/apisix/admin--setconfig.apisix.adminKey=edd1c9f034335f136f87ad84b625c8f1-napisix这里需要设置上面获取的adminkey。其实ingress-controller也是通过调用adminapi来配置路由的。4.创建服务测试。如前所述,APISIX通过管理api配置路由。共有三种操作方式。这里主要验证Dashboard和Ingress的使用方式有两种:创建service$kubectlcreatedeploymentweb--image=gcr.io/google-samples/hello-app:1.0exposeservice$kubectlexposedeploymentweb--type=NodePort--port=8080查看service$kubectlgetservicewebNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEwebNodePort10.233.58.113
