暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Rancher×APISIX:极速部署更好用的开源网关和Ingress Controller

Rancher by SUSE 2021-06-23
206

活动预告

7月21日北京第四届企业云原生创新大会(ECIC)重磅来袭!14场云原生主题演讲,实践案例覆盖航空、证券、制造、AI等行业,中国科学院空天信息创新研究院首席架构师、人民在线技术总监、安信证券研发负责人等云原生技术专家莅临现场分享K8S落地实践!


赶紧扫描下方二维码,免费报名咯:



Rancher × APISIX 


Apache APISIX 是一款开源的高性能、动态云原生网关,由深圳支流科技有限公司于2019年捐赠给 Apache 基金会,当前已经成为 Apache 基金会的顶级开源项目,也是 GitHub 上最活跃的网关项目。Apache APISIX 当前已经覆盖了 API 网关、LB、Kubernetes Ingress 以及 Service Mesh 等多种场景。


Rancher是一款开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。因为操作体验的直观、极简备受用户青睐,在全球拥有超过3亿的核心镜像下载量


本文将介绍如何在 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/apisix-helm-chart



保存完成后,即可选择 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=apisix
          NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
          apisix-admin ClusterIP 10.96.142.88 <none> 9180/TCP 51m
          apisix-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 集群内的服务了


            使用 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 仓库了。


              About SUSE Rancher


              Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为“2020年多云容器开发平台领导厂商”以及“2018年全球容器管理平台领导厂商”,被Gartner评为“2017年全球最酷的云基础设施供应商”。


              目前Rancher在全球拥有超过三亿的核心镜像下载量,并拥有包括中国联通、中国平安、中国人寿、上汽集团、三星、施耐德电气、西门子、育碧游戏、LINE、WWK保险集团、澳电讯公司、德国铁路、厦门航空、新东方等全球著名企业在内的共40000家企业客户。


              2020年12月,SUSE完成收购Rancher Labs,Rancher成为了SUSE “创新无处不在(Innovate Everywhere)”企业愿景的关键组成部分。SUSE和Rancher共同为客户提供了无与伦比的自由和所向披靡的创新能力,通过混合云IT基础架构、云原生转型和IT运维解决方案,简化、现代化并加速企业数字化转型,推动创新无处不在。


              当前,SUSE及Rancher在中国大陆及港澳台地区的业务,均由数硕软件(北京)有限公司承载。SUSE在国内拥有优秀的研发团队、技术支持团队和销售团队,将结合Rancher领先的云原生技术,为中国的企业客户提供更加及时和可信赖的技术支撑及服务保障。

              文章转载自Rancher by SUSE,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论