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

2025-05-27 0 100

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

1、几种常见网关的比较

  • Nginx, 模块化设计的反向代理软件,C 语言开发
  • OpenResty, 以 Nginx 为核心的 Web 开发平台,可以解析执行 Lua 脚本
  • Kong, OpenResty 的一个应用,是一个 API 网关,具有 API 管理和请求代理的功能,使用 PostgreSQL 存储
  • APISIX, 替换了 Kong 的 PostgreSQL 为 Etcd,基于 Nginx 的核心库实现

APISIX 的优势在于提供了 API 的管理和扩展能力,让网关不再仅仅转发服务,而是可以被配置、定制化。相较于 Nginx,APISIX 使用的是动态路由,避免了配置之后 reload 产生的风险。同时,APISIX 支持 HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP 等更多的协议,具有更好的使用生态。

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

上面是 APISIX 的架构图,数据面处理客户端请求,控制面管理路由。

2、APISIX 能解决什么问题

  • 边缘路由

机房对外暴露的访问入口 IP 数量,通常是极少的,但是却支撑了很多个服务。比如,访问的 IP 是 1.2.3.4,但却同时提供了 a.domain.com、b.domain.com 的访问服务。这就需要用到边缘路由,边缘路由会将不同域名的访问,转发到不同的内网地址。

APISIX 中三种方式可以注册边缘路由,dashboard、ingress-controller、admin api。

网关的功能不限于转发流量,更重要的是限流、熔断等。

APISIX 内置了很多插件,提供 APM、日志、熔断、鉴权、证书管理、故障注入等功能。同时,也支持拖拽组合新的插件、开发新插件以满足业务需求。

  • Serverless

APISIX 通过插件的方式提供 Serverless,目前仅支持 Lua。但 APIGateway + Serverless 的组合,极具想象力。

利用 Serverless 可以快速对外提供无服务的 API,粘合各种服务,也可以对外直接提供功能服务。

  • 灰度发布

由于对网关层进行了控制,APISIX 允许用户通过配置权重控制流量的转发行为,可以用来做灰度发布使用。

3、Kubernetes 上安装 APISIX

(1)添加 Helm 源

  • 添加 Helm 源
  1. $helmrepoaddapisixhttps://charts.apiseven.com
  2. $helmrepoupdate
  • 查找 Chart 包
  1. $helmsearchrepoapisix
  2. NAMECHARTVERSIONAPPVERSIONDESCRIPTION
  3. apisix/apisix0.3.52.7.0AHelmchartforApacheAPISIX
  4. apisix/apisix-dashboard0.1.52.7.0AHelmchartforApacheAPISIXDashboard
  5. apisix/apisix-ingress-controller0.5.01.0.0ApacheAPISIXIngressControllerforKubernetes

(2)安装 APISIX

  1. $helminstallapisixapisix/apisix–setgateway.type=NodePort–setadmin.allow.ipList="{0.0.0.0/0}"-napisix–create-namespace
  • 查看入口地址
  1. $exportNODE_PORT=$(kubectlget–namespaceapisix-ojsonpath="{.spec.ports[0].nodePort}"servicesapisix-gateway)
  2. $exportNODE_IP=$(kubectlgetnodes–namespaceapisix-ojsonpath="{.items[0].status.addresses[0].address}")
  3. $echohttp://$NODE_IP:$NODE_PORT
  4. http://1.1.1.1:32462

这里的入口地址是后端服务的入口地址,如果是生成环境,应该使用 LoadBalancer 提供的地址。

  • 查看 apisix-admin 接口 key
  1. $exportPOD_NAME=$(kubectlgetpods–namespaceapisix-l"app.kubernetes.io/instance=apisix,app.kubernetes.io/name=apisix"-ojsonpath="{.items[0].metadata.name}")
  2. $kubectl-napisixexec-it$POD_NAMEcatconf/config.yaml|grepkey
  3. admin_key:
  4. key:edd1c9f034335f136f87ad84b625c8f1
  5. key:4054f7cf07e344346cd3f287985e76a2

第一个 key 是 admin,第二个 key 是 viewer。这里的 key 可以用来通过 admin api 来配置 APISIX,给其他系统集成 APISIX 提供了入口。

(3)安装 Dashboard

  • 安装 Dashboard
  1. $helminstallapisix-dashboardapisix/apisix-dashboard-napisix–create-namespace

默认账户是:admin 默认密码是:admin

  • 查看 Dashboard 访问入口
  1. $exportNODE_PORT=$(kubectlget–namespaceapisix-ojsonpath="{.spec.ports[0].nodePort}"servicesapisix-gateway)
  2. $exportNODE_IP=$(kubectlgetnodes–namespaceapisix-ojsonpath="{.items[0].status.addresses[0].address}")
  3. $echohttp://$NODE_IP:$NODE_PORT
  4. http://1.1.1.1:31501

(4)安装 ingress-controller

  • 安装 ingress-controller
  1. $helminstallapisix-ingress-controllerapisix/apisix-ingress-controller–setconfig.apisix.baseURL=http://apisix-admin:9180/apisix/admin–setconfig.apisix.adminKey=edd1c9f034335f136f87ad84b625c8f1-napisix

这里就会需要设置上面获取到的 admin key, 实际上 ingress-controller 也是通过调用 admin api 来配置路由的。

4、创建服务测试

前面提到 APISIX 通过 admin api 配置路由,有三种方式可以操作。这里主要验证使用 Dashboard 和 Ingress 两种方式:

  • 创建一个服务
  1. $kubectlcreatedeploymentweb–image=gcr.io/google-samples/hello-app:1.0
  • 暴露服务
  1. $kubectlexposedeploymentweb–type=NodePort–port=8080
  • 查看服务

$ kubectl get service web

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

web NodePort 10.233.58.113 <none> 8080:30572/TCP 28d

(1)Dashboard 配置路由

  • 新建一个上游服务

这里需要填入上面创建的集群访问地址:web.default.svc.cluster.local

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

  • 新建一个路由

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

点击下一步之后,选择上面创建的服务 web,相关的参数就会自动填充。

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

  • 访问测试

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

(2)Ingress 配置路由

  • 创建一个 ApisixRoute 路由

虽然这里部署的是 ingress-controller 组件,但是使用时创建的是 ApisixRoute 对象。

  1. apiVersion:apisix.apache.org/v1
  2. kind:ApisixRoute
  3. metadata:
  4. name:web-route
  5. spec:
  6. http:
  7. -name:web
  8. match:
  9. hosts:
  10. -dev4.chenshaowen.com
  11. paths:
  12. -"/router-web/*"
  13. backend:
  14. serviceName:web
  15. servicePort:8080
  • 访问测试

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

  • 查看创建的路由

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

可以发现路由是被 ingress-controller 接管的,人工不要编辑。

  • 查看服务

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

可以看到服务主要是由四个后端提供。

  • 查看服务 Pod 的 IP
  1. $kubectlgetpod-owide
  2. NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATES
  3. web-79d88c97d6-2sdlj1/1Running027d10.233.105.34node4<none><none>
  4. web-79d88c97d6-7bfbb1/1Running027d10.233.105.32node4<none><none>
  5. web-79d88c97d6-hccqk1/1Running027d10.233.105.33node4<none><none>
  6. web-79d88c97d6-mh9gz1/1Running028d10.233.105.22node4<none><none>

APISIX 会将 Pod 的 IP 地址直接作为流量后端,而不需要经过 Service 的转发,这有别于 Kubernetes 的服务转发、负载均衡机制。

5、总结

本文主要简述了几种网关的区别,思考了 APISIX 主要能帮助我们解决什么问题,最后在 Kubernetes 上进行了实践。内容如下:

  • APISIX 是基于 Nginx 网络库实现的 API 网关应用,使用 Etcd 作为存储后端
  • APISIX 能作为边缘路由使用,其动态特性,避免了 Nginx reload 带来的抖动
  • APISIX 提供了 admin api 管理路由,有三种方式可以进行配置
  • Kubernetes 下的 APISIX 跳过了 Kubernetes Service 直接将流量转发到 Pod IP

6、参考

  • https://github.com/apache/apisix
  • https://bbs.huaweicloud.com/blogs/125686
  • https://github.com/apache/apisix-ingress-controller/blob/master/docs/en/latest/concepts/apisix_route.md

原文链接:https://mp.weixin.qq.com/s/4vGk4vu9a4WLjJLQwfBcEg

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 行业资讯 如何快速的在 Kubernetes 上部署云原生微服务网关 APISIX https://www.kuaiidc.com/63222.html

相关文章

发表评论
暂无评论