简单测试 APISIX2.6 网关
apache apisix是一个动态的、实时的、高性能的 api 网关。它提供丰富的流量管理功能,例如负载均衡、动态上游服务、金丝雀发布、断路、身份验证、可观察性等。您可以使用 apache apisix 来处理传统的南北流量,以及服务之间的东西流量。2019 年 10 月份,深圳支流科技把网关 apisix 贡献给 apache 基金会,他们提供商业版本,以下内容基于社区版本。
apisix地址:
dashboard:
中文文档地址:
1、安装apisix 和 apisix dashboard
官方文档介绍了源码包、rpm 包、docker 以及helm chart安装方式,这里我们在k8s 环境下使用 apisix, 所以选择使用helm chart方式安装,安装文档参见 。
日前支流科技提供了一个在线 helm charts 仓库 , 用户可通过该仓库轻松安装 apache apisix、apache apisix-dashboard 和 apache apisix-ingress-controller (而不需要提前 clone 对应的项目)。
一共有3个helm chart:
- apache apisix helm chart :
- apache apisix dashboard helm chart:
- apache apisix ingress controller helm chart:
添加仓库并获取更新
helm repo add apisix https://charts.apiseven.com helm repo update
查看仓库中可用的 charts 包
helm search repo apisix
> helm search repo apisix
name chart version app version description
apisix/apisix 0.3.4 2.6.0 a helm chart for apache apisix
apisix/apisix-dashboard 0.1.4 2.6.0 a helm chart for apache apisix dashboard
apisix/apisix-ingress-controller 0.4.2 0.6.0 apache apisix ingress controller for kubernetes
安装 apache apisix 到目标 kubernetes 集群中
helm install apisix apisix/apisix --set gateway.type = nodeport --set admin.allow.iplist="{0.0.0.0/0}" --namespace ingress-apisix
创建了四个service资源,apisix-etcd 和 apisix-etcd-headless是etcd服务, 一个是处理真实流量的apisix-gateway
,;另一个是充当控制平面来处理所有配置更改的服务apisix-admin
。
网关服务类型设置为nodeport
,以便客户端可以通过节点 ip 和分配的端口访问 apache apisix。
还有一点需要注意的是,该allow.iplist
字段要根据pod cidr设置进行自定义,请注意我这里偷懒把所有的ip 都打开了,这个在生产环境下是不推荐这么干的。这样apisix-ingress-controller实例才能访问apisix实例
安装apisix-dashboard也建议通过 helm charts 安装,将其安装在与 apache apisix 相同的命名空间中
helm install apisix-dashboard apisix/apisix-dashboard --namespace ingress-apisix
安装 apisix-ingress-controller
通过 helm charts 安装 apisix-ingress-controller,建议将其安装在与 apache apisix 相同的命名空间中。
helm install apisix-ingress-controller apisix/apisix-ingress-controller --set config.apisix.baseurl= --set config.apisix.adminkey=edd1c9f034335f136f87ad84b625c8f1 --namespace apisix-gateway
上述命令中使用的管理密钥是默认的,如果您在部署 apisix 时更改了管理密钥配置,请记住在此处更改。将image.tag
更改为您想要的 apisix-ingress-controller 版本。
kubectl get service --namespace apisix-gateway 检测一下是否成功安装了:
访问apisix-dashboard 的默认用户名/密码是admin/admin:
登录成功进入控制台
我们下面部署一个asp.net core应用程序来测试一下apisix:
我选用asp.net core 的官方示例: ,创建一个 deployment:aspnetappdemo 和 service:aspnetdemo
apiversion: apps/v1
kind: deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
name: aspnetappdemo
namespace: default
spec:
progressdeadlineseconds: 600
replicas: 1
revisionhistorylimit: 10
selector:
matchlabels:
workload.user.cattle.io/workloadselector: apps.deployment-default-aspnetappdemo
strategy:
rollingupdate:
maxsurge: 25%
maxunavailable: 25%
type: rollingupdate
template:
metadata:
labels:
workload.user.cattle.io/workloadselector: apps.deployment-default-aspnetappdemo
spec:
containers:
- image: mcr.microsoft.com/dotnet/samples:aspnetapp
imagepullpolicy: always
name: container-0
resources: {}
terminationmessagepath: /dev/termination-log
terminationmessagepolicy: file
dnspolicy: clusterfirst
restartpolicy: always
schedulername: default-scheduler
securitycontext: {}
terminationgraceperiodseconds: 30
----------------------------------------------------------------------------------------------------
apiversion: v1
kind: service
metadata:
name: aspnetdemo
namespace: default
spec:
clusterip: 10.43.240.212
clusterips:
- 10.43.240.212
externaltrafficpolicy: cluster
ports:
- name: asphttp
nodeport: 30002
port: 80
protocol: tcp
targetport: 80
selector:
workload.user.cattle.io/workloadselector: apps.deployment-default-aspnetappdemo
sessionaffinity: none
type: loadbalancer
使用apisix-dashboard 创建一个上游服务代表我们的aspnetdemo:aspnetdemo.default.svc.cluster.local,在 apisix 控制台的「上游」菜单中,创建一个 apisix upstream。如下图所示:
接下来就是创建一个apisix route,字面意思就是路由,通过定义一些规则来匹配客户端的请求,然后根据匹配结果加载并执行相应的 插件,并把请求转发给到指定 upstream。
点击下一步,选择上游服务aspnetdemo:
点击下一步,关于插件部门后面的问题后续会陆续更新。
现在,我们来请求 apisix 网关,转发请求到后端服务。 http://13.72.208.130:32228/
好了,暂时先了解到这里。