Rancher × Apache APISIX

Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes 集群在混合云+本地数据中心的集中部署与管理,以确保集群的安全性,加速企业数字化转型。
本文将介绍如何在 Rancher 应用商店(Catalog)中安装和部署 Apache APISIX 和Apache APISIX Ingress Controller,进而如何通过它们代理 Kubernetes 服务。

前置条件

将现有 Kubernetes 集群已纳入 Rancher 管理。

部署 Apache APISIX 和 Apache APISIX Ingress Controller

在 Rancher 的 Tools - Catalogs 页面可以进行应用商店(catalogs)的配置,我们在这里添加 Apache APISIX 的 Helm 仓库:
https://github.com/apache/api...

图片

保存完成后,即可选择 Apps 页面进行 Apache APISIX 的部署了。选择 Launch 便可看到 Apache APISIX 的仓库信息了。这里我们直接选择 apisix 即可。

图片

图片

接下来只需要在此页面中进行简单的配置即可。因为我们想要同时部署 APISIX Ingress controller,所以在底部的 Answers 中填入 ingress-controller.enabled=true这个配置项 。保存即可完成部署。
图片

稍等片刻即可完成部署。
图片

部署示例项目

我们使用 kennethreitz/httpbin 作为示例项目进行演示。这里也直接在 Rancher 中完成部署。
图片

使用 Apache APISIX 作为网关代理

我们先演示如何使用 Apache APISIX 作为网关代理 Kubernetes 集群中的服务。

root@apisix:~$ kubectl -n apisix exec -it `kubectl -n apisix get pods -l app.kubernetes.io/name=apisix -o name` -- bash
bash-5.1# curl httpbin.default/get
{ 
"args": {}, 
"headers": {   
    "Accept": "*/*", 
    "Host": "httpbin.default", 
    "User-Agent": "curl/7.76.1"
}, 
"origin": "10.244.3.3",
"url": "http://httpbin.default/get"
}

可以看到在 Apache APISIX 的 Pod 内可正常访问示例项目。接下来使用 Apache APISIX 对该示例项目进行代理。
这里我们使用 curl 调用 Apache APISIX 的 admin 接口,创建一条路由。将所有 host 头为 httpbin.org 的请求转发给 httpbin.default:80 这个实际的应用服务上。

bash-5.1# curl "http://127.0.0.1:9180/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{  "uri": "/*", 
"host": "httpbin.org",
"upstream": {  
    "type": "roundrobin",    
    "nodes": { 
        "httpbin.default:80": 1 
    }
  }
}'
/{"action":"set","node":{"value":{"uri":"\/*","create_time":1623834078,"update_time":1623834078,"priority":0,"upstream":{"type":"roundrobin","hash_on":"vars","pass_host":"pass","nodes":{"httpbin.default:80":1},"scheme":"http"},"id":"1","status":1,"host":"httpbin.org"},"key":"\/apisix\/routes\/1"}}

你会得到类似上面的输出,接下来验证是否代理成功:

bash-5.1# curl http://127.0.0.1:9080/get -H "HOST: httpbin.org"
{  
"args": {},   
"headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
  "User-Agent": "curl/7.76.1",
  "X-Forwarded-Host": "httpbin.org"
  },
  "origin": "127.0.0.1",
  "url": "http://httpbin.org/get"
  }

得到上面的输出,说明已经通过 Apache APISIX 代理了示例项目的流量。接下来我们试试在集群外通过 Apache APISIX 访问示例项目。

root@apisix:~$ kubectl  -n apisix get svc -l app.kubernetes.io/name=apisixNAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGEapisix-admin     ClusterIP   10.96.142.88    <none>        9180/TCP       51mapisix-gateway   NodePort    10.96.158.192   <none>        80:32763/TCP   51m

在使用 Helm chart 部署的时候,默认会将 Apache APISIX 的端口通过 NodePort 的形式暴露出去。我们使用 Node IP + NodePort 的端口进行访问测试。

root@apisix:~$ curl http://172.18.0.2:32763/get -H "HOST: httpbin.org"
{
"args": {}, 
"headers": {
    "Accept": "*/*",
  "Host": "httpbin.org",
  "User-Agent": "curl/7.58.0",
  "X-Forwarded-Host": "httpbin.org" 
  },
  "origin": "10.244.3.1",
  "url": "http://httpbin.org/get"
  }

可以看到,在集群外已经可以通过 Apache APISIX 作为网关代理 Kubernetes 集群内的服务了

使用 Apache APISIX Ingress Controller 代理服务

我们可以直接在 Rancher 中添加 Ingress ,Apache APISIX Ingress controller 会自动将路由规则同步至 Apache APISIX 中,完成服务的代理。

图片

注意右下角, 我们添加了 kubernetes.io/ingress.class: apisix 的 annotation 配置,用于支持集群内多 ingress-controller 的场景。

保存后,可看到如下界面:

图片

在终端下测试是否代理成功:

root@apisix:~$ curl http://172.18.0.2:32763/get -H "HOST: httpbin-ing.org"{  
"args": {},
"headers": { 
    "Accept": "*/*",     
  "Host": "httpbin-ing.org",
  "User-Agent": "curl/7.58.0",
  "X-Forwarded-Host": "httpbin-ing.org"
  },
  "origin": "10.244.3.1",
  "url": "http://httpbin-ing.org/get"
  }

可以看到也正常代理了。
除了以上方式外,Apache APISIX Ingress controller 通过 CRD 的方式对 Kubernetes 进行了扩展,你也可以通过发布 ApisixRoute 等这种自定义资源来完成 Kubernetes 中服务的对外暴露。

总结

你可以在 Rancher 中使用 Apache APISIX 的官方 Helm 仓库直接部署 Apache APISIX 和 APISIX Ingress controller 。并且 Apache APISIX 可通过作为网关,或者 APISIX Ingress controller 的数据面来承载业务流量。

未来规划

Rancher 社区已经与 Apache APISIX 达成合作,未来你可以直接在 Rancher 自带的应用商店中找到 Apache APISIX ,不再需要手动添加 Helm 仓库了。

关于 Apache APISIX

Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
你可以使用 Apache APISIX 处理传统的南北向流量,以及服务间的东西向流量,也可以当做 Kubernetes Ingress Controller 来使用。Apache APISIX 不仅覆盖了 NGINX 的传统功能,在可观测性上也和 SkyWalking 深度合作,大大提升了服务治理能力。

图片
你可以使用 Apache APISIX 处理传统的南北向流量,以及服务间的东西向流量,也可以当做 Kubernetes Ingress Controller 来使用。Apache APISIX 不仅覆盖了 NGINX 的传统功能,在可观测性上也和 SkyWalking 深度合作,大大提升了服务治理能力。
Apache APISIX 于 2019 年 4 月由深圳支流科技(api7.ai)创建,同年 6 月开源,10 月进入 Apache 孵化器,也是在这短短两年的时间,APISIX 成为了 Apache 顶级项目。支流科技(api7.ai)对应的商业化产品名字叫 API7。

关于 Apache APISIX

Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 可以帮忙企业快速、安全的处理 API 和微服务流量,包括网关、Kubernetes Ingress 和服务网格等。

全球已有数百家企业使用 Apache APISIX 处理关键业务流量,涵盖金融、互联网、制造、零售、运营商等等,比如美国航空航天局(NASA)、欧盟的数字工厂、中国航信、中国移动、腾讯、华为、微博、网易、贝壳找房、360、泰康、奈雪的茶等。

200 余位贡献者,一同缔造了 Apache APISIX 这个世界上最活跃的开源网关项目。聪明的开发者们!快来加入这个活跃而多样化的社区,一起来给这个世界带来更多美好的东西吧!


API7_技术团队
99 声望47 粉丝

API7.ai 是一家提供 API 处理和分析的开源基础软件公司,于 2019 年开源了新一代云原生 API 网关 -- APISIX 并捐赠给 Apache 软件基金会。此后,API7.ai 一直积极投入支持 Apache APISIX 的开发、维护和社区运营...