禁忌乱情短篇合集小说

一篇带给你Apache APISIX 初体验

作者:admin    文章来源:未知    点击数:    更新时间:2022-01-08 05:45
兼职招募 | 51CTO社区编辑添盟指南

Apache APISIX 是一个基于 OpenResty 和 Etcd 实现的动态、实时、高性能的 API 网关,现在已经进入 Apache 进走孵化。挑供了雄厚的流量管理功能,如负载平衡、动态路由、动态 upstream、A/B测试、金丝雀发布、限速、熔断、退守凶意抨击、认证、监控指标、服务可不益看测性、服务治理等。能够行使 APISIX 来处理传统的南北流量以及服务之间的东西向流量。

与传统 API 网关相比,APISIX 具有动态路由和炎添载插件功能,避免了配置之后的 reload 操作,同时 APISIX 声援 HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP 等更众的制定。而且还内置了 Dashboard,挑供重大而变通的界面。同样也挑供了雄厚的插件声援功能,而且还能够让用户自定义插件。

上图是 APISIX 的架构图,团体上分成数据面和限制面两个片面,限制面用来管理路由,主要经历 etcd 来实现配置中央,数据面用来处理客户端乞求,经历 APISIX 自身来实现,会一连往 watch etcd 中的 route、upstream 等数据。

APISIX Ingress

同样行为一个 API 网关,APISIX 也声援行为 Kubernetes 的一个 Ingress 限制器进走行使。APISIX Ingress 在架构上分成了两片面,一片面是 APISIX Ingress Controller,行为限制面它将完善配置管理与分发。另一片面 APISIX(代理) 负责承载营业流量。

当 Client 发首乞求,到达 Apache APISIX 后,会直接把响答的营业流量传输到后端(如 Service Pod),从而完善转发过程。此过程不必要经过 Ingress Controller,云云做能够保证一旦有题目展现,或者是进走变更、扩缩容或者迁移处理等,都不会影响到用户和营业流量。

同时在配置端,用户经历 kubectl apply 创建资源,可将自定义 CRD 配置行使到 K8s 集群,Ingress Controller 会赓续 watch 这些资源变更,来将响答配置行使到 Apache APISIX(经历 admin api)。

从上图能够望出 APISIX Ingress 采用了数据面与限制面的别离架构,因此用户能够选择将数据面安放在 K8s 集群内部或表部。但 Ingress Nginx 是将限制面和数据面放在了联相符个 Pod 中,倘若 Pod 或限制面展现一点闪失,整个 Pod 就会挂失踪,进而影响到营业流量。这栽架构别离,给用户挑供了比较方便的安放选择,同时在营业架构调整场景下,也方便进走有关数据的迁移与行使。

APISIX Ingress 限制器现在声援的中央特性包括:

全动态,声援高级路由匹配规则,可与 Apache APISIX 官方 50 众个插件 & 客户自定义插件进走扩展行使 声援 CRD,更容易理解声明式配置 兼容原生 Ingress 资源对象 声援流量切分 服务自动注册发现,无惧扩缩容 更变通的负载平衡策略,自带健康检查功能 声援 gRPC 与 TCP 4 层代理 安设

吾们这里在 Kubernetes 集群中来行使 APISIX,能够经历 Helm Chart 来进走安设,最先增补官方挑供的 Helm Chart 仓库:

➜ helm repo add apisix https://charts.apiseven.com ➜ helm repo update 

原由 APISIX 的 Chart 包中包含 dashboard 和 ingress 限制器的倚赖,吾们只必要在 values 中启用即可安设 ingress 限制器了:

➜ helm fetch apisix/apisix ➜ tar -xvf apisix-0.7.2.tgz ➜ mkdir -p apisix/ci 

在 apisix/ci 现在录中新建一个用于安设的 values 文件,内容如下所示:

# ci/prod.yaml apisix:   enabled: true    nodeSelector:  # 固定在node2节点上     kubernetes.io/hostname: node2  gateway:   type: NodePort   externalTrafficPolicy: Cluster   http:     enabled: true     servicePort: 80     containerPort: 9080  etcd:   enabled: true  # 会自动创建3个节点的etcd集群   replicaCount: 1  # 众副本必要修改下模板,这里一时运走一个etcd pod  dashboard:   enabled: true  ingress-controller:   enabled: true   config:     apisix:       serviceName: apisix-admin       serviceNamespace: apisix  # 指定命名空间,倘若不是 ingress-apisix 必要重新指定 

经测试官方的 Helm Chart 包对 etcd 众节点集群声援不是很益,吾测试跑3个节点会出题目,答该还必要重新修改模板往兼容,另表对表部的 etcd tls 集群兼容度也不益,比如 dashboard 的 Chart 必要本身修改模板往声援 tls,因此这里吾们测试先改成 1 个副本的 etcd 集群。

APISIX 必要倚赖 etcd,默认情况下 Helm Chart 会自动安设一个3副本的 etcd 集群,必要挑供一个默认的 StorageClass,倘若你已经有默认的存储类则能够无视下面的步骤,这里吾们安设一个 nfs 的 provisioner,用下面的命令能够安设一个默认的 StorageClass:

➜ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ ➜ helm upgrade --install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=192.168.31.31 \  # 指定nfs地址 --set nfs.path=/var/lib/k8s/data \  # nfs路径 --set image.repository=cnych/nfs-subdir-external-provisioner \ --set storageClass.defaultClass=true -n kube-system 

安设完善后会自动创建一个 StorageClass:

➜ kubectl get sc NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE nfs-client (default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate              true                   35s 

然后直接实走下面的命令进走一键安设:

➜ helm upgrade --install apisix ./apisix -f ./apisix/ci/prod.yaml -n apisix Release "apisix" does not exist. Installing it now. NAME: apisix LAST DEPLOYED: Thu Dec 30 16:28:38 2021 NAMESPACE: apisix STATUS: deployed REVISION: 1 NOTES: 1. Get the application URL by running these commands:   export NODE_PORT=$(kubectl get --namespace apisix -o jsonpath="{.spec.ports[0].nodePort}" services apisix-gateway)   export NODE_IP=$(kubectl get nodes --namespace apisix -o jsonpath="{.items[0].status.addresses[0].address}")   echo http://$NODE_IP:$NODE_PORT 

平常就能够成功安放 apisix 了:

➜ kubectl get pods -n apisix NAME                                         READY   STATUS    RESTARTS   AGE apisix-dashboard-b69d5c768-r6tqk             1/1     Running   0          85m apisix-etcd-0                                1/1     Running   0          90m apisix-fb8cdb569-wz9gq                       1/1     Running   0          87m apisix-ingress-controller-7d5bbf5dd5-r6khq   1/1     Running   0          85m ➜ kubectl get svc -n apisix NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE apisix-admin                ClusterIP   10.97.108.252    <none>        9180/TCP            3h apisix-dashboard            NodePort    10.108.202.136   <none>        80:31756/TCP        3h apisix-etcd                 ClusterIP   10.107.150.100   <none>        2379/TCP,2380/TCP   3h apisix-etcd-headless        ClusterIP   None             <none>        2379/TCP,2380/TCP   3h apisix-gateway              NodePort    10.97.214.188    <none>        80:32200/TCP        3h apisix-ingress-controller   ClusterIP   10.103.176.26    <none>        80/TCP              3h 
测试

现在吾们能够为 Dashboard 创建一个路由规则,新建一个如下所示的 ApisixRoute 资源对象即可:

apiVersion: apisix.apache.org/v2beta2 kind: ApisixRoute metadata:   name: dashboard   namespace: apisix spec:   http:     - name: root       match:         hosts:           - apisix.qikqiak.com         paths:           - "/*"       backends:       - serviceName: apisix-dashboard         servicePort: 80 

创建后 apisix-ingress-controller 会将上面的资源对象经历 admin api 映射成 APISIX 中的配置:

➜ kubectl get apisixroute -n apisix NAME        HOSTS                    URIS     AGE dashboard   ["apisix.qikqiak.com"]   ["/*"]   75m 

因此其实吾们的访问入口是 APISIX,而 apisix-ingress-controller 只是一个用于监听 crds,然后将 crds 翻译成 APISIX 的配置的工具而已,现在就能够经历 apisix-gateway 的 NodePort 端口往访问吾们的 dashboard 了:

默认登录用户名和暗号都是 admin,登录后在路由菜单下平常能够望到上面吾们创建的这个 dashboard 的路由新闻:

点击更众下面的查望就能够望到在 APISIX 下面真实的路由配相新闻:

因此吾们要行使 APISIX,也肯定要理解其中的路由 Route 这个概念,路由(Route)是乞求的入口点,它定义了客户端乞求与服务之间的匹配规则,路由能够与服务(Service)、上游(Upstream)有关,一个服务可对答一组路由,一个路由能够对答一个上游对象(一组后端服务节点),因此,每个匹配到路由的乞求将被网关代理到路由绑定的上游服务中。

理解了路由后自然就清新了吾们还必要一个上游 Upstream 进走有关,这个概念和 Nginx 中的 Upstream 基本是相反的,在上游菜单下能够望到吾们上面创建的 dashboard 对答的上游服务:

其实就是将 Kubernetes 中的 Endpoints 映射成 APISIX 中的 Upstream,然后吾们能够本身在 APISIX 这儿进走负载。

APISIX 挑供的 Dashboard 功能照样专门周详的,吾们甚至都能够直接在页面上进走一切的配置,包括插件这些,专门方便。

自然还有许众其他高级的功能,比如流量切分、乞求认证等等,这些高级功能在 crds 中往行使则更添方便了,自然也是声援原生的 Ingress 资源对象的,关于 APISIX 的更众高级用法,后续再进走表明。

【编辑保举】

鸿蒙官方战略配相符共建——HarmonyOS技术社区 迅速晓畅 “幼字端” 和 “大字端” 及 Go 说话中的行使 又一个“无人造厂”诞生,剩下的工人干什么? 比 netstat 益用?Linux 网络状态工具 ss 详解 Spring Boot 五栽炎安放手段,极速开发就是生产力! 开源的勾引——数据库篇


    友情链接

    Powered by 禁忌乱情短篇合集小说-黄色直播软件-美女的奶没有遮挡 @2018 RSS地图 HTML地图

    Copyright 站群 © 2013-2021 365建站器 版权所有