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

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

作者:佚名 2021-09-08 11:25:45

系统

Linux

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

 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 等更多的协议,具有更好的使用生态。

上面是 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. $ helm repo add apisix https://charts.apiseven.com  
  2. $ helm repo update 
  •  查找 Chart 包 
  1. $ helm search repo apisix  
  2. NAME                             CHART VERSION APP VERSION DESCRIPTION  
  3. apisix/apisix                    0.3.5         2.7.0       A Helm chart for Apache APISIX  
  4. apisix/apisix-dashboard          0.1.5         2.7.0       A Helm chart for Apache APISIX Dashboard  
  5. apisix/apisix-ingress-controller 0.5.0         1.0.0       Apache APISIX Ingress Controller for Kubernetes 

(2)安装 APISIX

  •  安装 APISIX 
  1. $ helm install apisix apisix/apisix  --set gateway.type=NodePort --set admin.allow.ipList="{0.0.0.0/0}"  -n apisix --create-namespace 
  •  查看入口地址 
  1. $ export NODE_PORT=$(kubectl get --namespace apisix -o jsonpath="{.spec.ports[0].nodePort}" services apisix-gateway)  
  2. $ export NODE_IP=$(kubectl get nodes --namespace apisix -o jsonpath="{.items[0].status.addresses[0].address}" 
  3. $ echo http://$NODE_IP:$NODE_PORT  
  4. http://1.1.1.1:32462 

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

  •  查看 apisix-admin 接口 key 
  1. $ export POD_NAME=$(kubectl get pods --namespace apisix -l "app.kubernetes.io/instance=apisix,app.kubernetes.io/name=apisix" -o jsonpath="{.items[0].metadata.name}") 
  2. $ kubectl -n apisix exec -it $POD_NAME cat conf/config.yaml |grep key   
  3.   admin_key:  
  4.       key: edd1c9f034335f136f87ad84b625c8f1  
  5.       key: 4054f7cf07e344346cd3f287985e76a2 

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

(3)安装 Dashboard

  •  安装 Dashboard 
  1. $ helm install apisix-dashboard apisix/apisix-dashboard -n apisix --create-namespace 

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

  •  查看 Dashboard 访问入口 
  1. $ export NODE_PORT=$(kubectl get --namespace apisix -o jsonpath="{.spec.ports[0].nodePort}" services apisix-gateway)  
  2. $ export NODE_IP=$(kubectl get nodes --namespace apisix -o jsonpath="{.items[0].status.addresses[0].address}" 
  3. $ echo http://$NODE_IP:$NODE_PORT  
  4. http://1.1.1.1:31501 

(4)安装 ingress-controller

  •  安装 ingress-controller 
  1. $ helm install apisix-ingress-controller apisix/apisix-ingress-controller   --set config.apisix.baseURL=http://apisix-admin:9180/apisix/admin  --set config.apisix.adminKey=edd1c9f034335f136f87ad84b625c8f1  -n apisix 

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

4、创建服务测试

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

  •  创建一个服务 
  1. $ kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0 
  •  暴露服务 
  1. $ kubectl expose deployment web --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

  •  新建一个路由

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

  •  访问测试

(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 
  •  访问测试

  •  查看创建的路由    

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

  •  查看服务 

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

  •  查看服务 Pod 的 IP 
  1. $ kubectl get pod  -o wide  
  2. NAME                   READY   STATUS    RESTARTS   AGE   IP              NODE    NOMINATED NODE   READINESS GATES  
  3. web-79d88c97d6-2sdlj   1/1     Running   0          27d   10.233.105.34   node4   <none>           <none>  
  4. web-79d88c97d6-7bfbb   1/1     Running   0          27d   10.233.105.32   node4   <none>           <none>  
  5. web-79d88c97d6-hccqk   1/1     Running   0          27d   10.233.105.33   node4   <none>           <none>  
  6. web-79d88c97d6-mh9gz   1/1     Running   0          28d   10.233.105.22   node4   <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://shuyeidc.com/wp/275333.html<

(0)
运维的头像运维
上一篇2025-05-10 03:47
下一篇 2025-05-10 03:48

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注