当前位置: 首页 > 科技观察

如何在Kubernetes上快速部署云原生微服务网关APISIX

时间:2023-03-22 11:09:49 科技观察

一、几种常见网关的比较解析和执行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.1138080:30572/TCP28d(1)Dashboard配置routeCreateanewupstreamservice这里需要填写上面创建的集群访问地址:web.default.svc.cluster.local新建路由点击下一步后,选择上面创建的服务web,相关参数会自动填写。接入测试(二)Ingress配置路由创建ApisixRoute路由这里虽然部署了ingress-controller组件,但是使用的时候会创建ApisixRoute对象。apiVersion:apisix.apache.org/v1kind:ApisixRoutemetadata:name:web-routespec:http:-name:webmatch:hosts:-dev4.chenshaowen.compaths:-"/router-web/*"backend:serviceName:webservicePort:8080访问test查看创建的路由,可以发现路由被ingress-controller接管了,不要手动编辑。查看服务,可以看到服务主要由四个后端提供。查看服务Pod的IP$kubectlgetpod-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESweb-79d88c97d6-2sdlj1/1Running027d10.233.105.34node4web-79d88c97d6-7bfbb1/1Running027d10.233.105.32node4web-79d88c97d6-hccqk1/1Running027d10.233.105.33node4web-79d88c97d6-mh9gz1/1Running028d10.233.105.22node4APISIX会直接使用Pod的IP地址作为流量后端,不经过Service转发,这是基于不同的关于Kubernetes的服务转发和负载均衡机制。5.总结本文主要简单描述了几种网关的区别,思考了APISIX可以帮助我们解决哪些问题,最后在Kubernetes上进行了实践。内容如下:APISIX是一个基于Nginx网络库的API网关应用。它使用Etcd作为存储后端。APISIX可以用作边缘路由。其动态特性避免了Nginxreload带来的抖动。APISIX提供adminapi管理路由。一共有三种方法可以配置。Kubernetes下的APISIX跳过KubernetesService,直接将流量转发到PodIP6。参考https://github.com/apache/apisixhttps://bbs.huaweicloud.com/blogs/125686https://github.com/apache/apisix-ingress-controller/blob/master/docs/en/最新/概念/apisix_route.md

最新推荐
猜你喜欢