打通 API 网关,复杂流量轻松管
盼望着,盼望着,春节的脚步近了…… But 作为流量管理人员,加班的钟声也在不断敲响。 有时候,即使节前做好了万全准备,也难挡突发状况的出现!想要春节不加班,构建四通八达的 API 网关至关重要!今天就来告诉你一个春节不加班,轻松过牛年的终极开发者大招——Amazon EKS + Ingress APISIX! 春节不加班 2大终极法宝 Kubernetes 是一个开源系统,用于自动化容器化应用程序的部署、扩展和管理。Amazon Elastic Kubernetes Service(Amazon EKS)作为一种托管的 Kubernetes 服务,您可以在亚马逊云科技上轻松运行 Kubernetes 负载而无需对控制平面或节点进行安装和维护。 Apache APISIX 是一个动态、实时、高性能的 API 网关。它提供了丰富的流量管理功能,如负载平衡、动态上游、灰度部署、流量分割、身份验证和可观测性等。您可以使用 Apache APISIX 处理传统客户端和服务器之间的南北流量以及服务之间的东西流量。 Ingress APISIX可以将Apache APISIX作为Kubernetes的入口控制器使用,从而为 Kubernetes 引入 Apache APISIX 的各项优秀功能。借助妥善设计的 Controller 组件的驱动,可以帮助用户满足复杂的流量管理需求。 apisix-ingress-controller技术架构 接下来,本文将为你解读如何在 Amazon Elastic Kubernetes Service 上配置和运行 Ingress APISIX。 前提要求 准备运行前,请在亚马逊云科技上配置好可用的 Amazon EKS 集群。如果尚无集群,可以扫描下方二维码查阅《创建 Amazon EKS 集群指南》创建一个。 查阅如何创建 Amazon EKS 集群 你自己的环境中应具备 kubectl 工具,请运行如下命令将上下文设置为自己的 Amazon EKS 集群: aws eks update-kubeconfig --name <your eks cluster name> --region <your region> *小伙伴们,记得左滑代码块即可浏览全部代码噢~ Kubernetes集群就绪后,创建名为ingress-apisix 的名称空间,后续用到的所有资源都将创建于该名称空间中。 kubectl create namespace ingress-apisix 我们将使用Helm部署Ingress APISIX(Apache APISIX和apisix-ingress-controller)的所有组件,因此也请按照安装指南(https://helm.sh/docs/intro/install/) 来安装 Helm。适用于Apache APISIX和apisix-ingress-controller的helm chart位于apache/apisix-helm-chart (https://github.com/apache/apisix-helm-chart)和apache/apisix-ingress-controller (https://github.com/apache/apisix-ingress-controller) 路径下,请克隆这些路径以获得相应的 chart。 安装 Apache APISIX Apache APISIX 充当了apisix-ingress-controller的代理平面,应提前部署完成。 cd /path/to/apisix-helm-chart helm repo add bitnami https://charts.bitnami.com/bitnami helm dependency update ./chart/apisix helm install apisix ./chart/apisix \ --set gateway.type=LoadBalancer \ --set allow.ipList="{0.0.0.0/0}" \ --namespace ingress-apisix kubectl get service --namespace ingress-apisix 上述命令将创建两个 Kubernetes Service 资源,一个为负责处理真实流量的apisix-gateway,另一个为充当控制平面并处理所有配置改动的apisix-admin。此处我们将 apisix-gateway 创建为 LoadBalancer 类型的服务,可借助 Amazon Network Load Balancer 将其暴露至互联网。我们可通过下列命令找到负载均衡器的主机名: kubectl get service apisix-gateway \ --namespace ingress-apisix \ -o jsonpath='{.status.loadBalancer.ingress[].hostname}' 另外要注意:allow.ipList 字段应根据我们自己 Amazon EKS 集群中的 EKS CIDR Ranges 进行定制,这样 apisix-ingress-controller 即可由 Apache APISIX 进行授权(用于推送资源)。 如果还有其他需求,请参阅 value.yaml (https://github.com/apache/apisix-helm-chart/blob/master/chart/apisix/values.yaml)进一步了解所有配置项。 安装 apisix-ingress -controller 成功部署 Apache APISIX 后,需要安装 Controller 组件了。 cd /path/to/apisix-ingress-controller # install base resources, e.g. ServiceAccount. helm install ingress-apisix-base -n ingress-apisix ./charts/base # install apisix-ingress-controller helm install ingress-apisix ./charts/ingress-apisix \ --set ingressController.image.tag=dev \ --set ingressController.config.apisix.baseURL=http://apisix-admin:9180/apisix/admin \ --set ingressController.config.apisix.adminKey={YOUR ADMIN KEY} \ --namespace ingress-apisix ingress-apisix-base chart会为apisix-ingress-controller安装一些基本依赖项,例如 ServiceAccount 及其专用 CRD 等内容。 ingress-apisix chart 将引导我们安装 Controller 自身,我们可以将 image 标签更改为所需的发布版本,并可更改上述命令中 ingressController.config.apisix.adminKey的值,这些配置可根据实际场景进行调整(并确保此处使用的 Admin key 与 Apache APISIX 部署中所用的 Key 相同)。如果还有其他需求,可以参阅 value.yaml 进一步了解所有配置项。 随后试着打开 Amazon EKS 控制台,选择自己的集群并单击 Workloads 标签,所有将能看到 Apache APISIX 的所有 Pod、etcd 以及 apisix-ingress-controller 均已就绪。 扫码登录 控制台 扫码登录 Amazon EKS 控制台
至此我们已经部署了 Ingress APISIX 的所有组件,请务必验证一切均可正常运行。随后我们将部署一个 httpbin 服务并要求 Apache APISIX 将所有到“local.httpbin.org”主机的请求路由至该服务。 为此,我们首先需要创建 httpbin 工作负载并将其暴露出来。 kubectl run httpbin --image kennethreitz/httpbin --port 80 kubectl expose pod httpbin --port 80 为了让 Apache APISIX 对请求进行正确的路由,我们需要创建一个 ApisixRoute 资源驱动这一过程。 # ar-httpbin.yaml apiVersion: apisix.apache.org/v1 kind: ApisixRoute metadata: name: httpserver-route spec: rules: - host: local.httpbin.org http: paths: - backend: serviceName: httpbin servicePort: 80 path: /* 上述 ApisixRoute 资源会让 Apache APISIX 将主机头为“local.httpbin.org”的请求路由至(我们刚刚创建的)httpbin 后端。 随后应用该设置,但请注意:该服务和 ApisixRoute 资源应放置在同一个名称空间中,apisix-ingress-controller 不允许跨越名称空间。 kubectl apply -f ar-httpbin.yaml 从可触达 Apache APISIX 服务的任意位置通过一个简单的 curl 调用测试结果。 $ curl http://{apisix-gateway-ip}:{apisix-gateway-port}/headers -s -H 'Host: local.httpbin.org' { "headers": { "Accept": "*/*", "Host": "httpbin.org", "User-Agent": "curl/7.64.1", "X-Amzn-Trace-Id": "Root=1-5ffc3273-2928e0844e19c9810d1bbd8a" } } 如果 Serivce 类型为 ClusterIP,则需要登录到Amazon EKS 集群中的一个 Pod,随后使用 ClusterIP或Service FQDN访问Apache APISIX。如果已经暴露(无论暴露了 NodePort或 LoadBalancer),则可直接访问可触达的外部端点。 |
全部评论
暂无评论
最新文章
-
1大模型数量国内第一!百度智能云国内首家支持Llama3全系列训练推理
-
2华为云推动土耳其数据库技术创新,“土耳其数据库先锋计划”正式启动
-
3鹅厂造了一座「桥」!腾讯云让主机搬家~
-
41299 万元,中兴新云中标财务共享建设项目
-
5新版本新能力,华为云 OceanBase 为何要打造实时分析数据库
-
61473.8万元,浪潮云中标重庆职业技能公共实训中心智联驾驶技术实训项目
-
7基于阿里云通义千问!央视《新闻联播》点赞中国一汽大模型应用!
-
8腾讯云4月8日故障复盘及情况说明
-
9天翼云大模型首次接入天文望远镜!基于通义千问,“星语3.0”发布
-
10IDC发布2023年中国整体超融合市场报告,深信服第一
热点排行
-
1文件存储 NAS 和 对象存储 OSS 的区别
-
2天翼云云电脑 | 让电视一秒变身电脑
-
3阿里工程师太凶残了,竟把服务器泡在“水里”!
-
4腾讯云 | 想在微信群里发起9人以上的语音聊天怎么办?
-
5数据仓库终结者:Dremio
-
62020年云服务器哪家强:阿里云、腾讯云、华为云、UCloud测评报告
-
72020 年 Q1 中国云市场份额:阿里云第一、华为云跃居第二、腾讯云下降为第三
-
8阿里云 web 应用防火墙(WAF)价格:179元/年
-
92020 Q1 中国公有云市场份额 TOP3:阿里云、腾讯云、华为云
-
10郑大一附院系统瘫痪 2 小时,运维人员被判 5 年半:破坏计算机信息系统罪
有话要说