关于kubesphere:Apache-APISIX-为-KubeSphere-提供更好用的网关及-K8S-Ingress-Controller

32次阅读

共计 6341 个字符,预计需要花费 16 分钟才能阅读完成。

KubeSphere 介绍

KubeSphere 是在 Kubernetes 中构建的深度云原生利用的零碎,齐全开源,反对多云与多集群治理自动化,提供全栈的 IT 运维能力,简化企业的 DevOps 工作流。它的架构能够十分不便地使利用利用与云原生生态组件进行即插即用(即插即用)的集成。

是全栈的多管道容器平台,KubeSphere 提供了运维敌对的形态操作界面,帮忙企业构建了一个弱小的专门性能的容器。KubeSphere 为用户提供构建企业级 Kubernetes 环境需要的报告性能,多云与多集群治理、Kubernetes 治理、DevOps、生命周期治理、微服务治理(服务网格)、与收集、服务与网络、多洞察治理、监控资源日志、事件与审计、存储查问治理、拜访权限管制、GPU 反对、网络策略、监督管理以及平安治理等。

Apache APISIX 介绍

Apache APISIX 是伪开源的、动静的云原生网关,由深圳干流科技有限公司于 2019 年捐献给 Apache 基金会,成为 Apache 基金会的当下风行我的项目,也是 GitHub 上最新的门户我的项目。Apache APISIX 目前曾经笼罩了 API 网关,LB,Kubernetes Ingress,Service Mesh 等多种场景。

后置条件

将现有 Kubernetes 集群已更新 KubeSphere 治理。

部署 Apache APISIX 和 Apache APISIX Ingress Controller

咱们能够参考 KubeSphere 的文档启用 KubeSphere 的 AppStore(https://kubesphere.io/docs/pl…),或者应用应用 Apache APISIX 的 Helm 仓库来进行开发。这里,咱们间接应用 Apache APISIX 的 Helm 仓库进行部署。

执行以下命令增加增加 Apache APISIX 的 Helm repo,并实现部署。

➜  ~ helm repo add apisix https://charts.apiseven.com
"apisix" has been added to your repositories
➜  ~ helm repo add bitnami https://charts.bitnami.com/bitnami 
"bitnami" has been added to your repositories
➜  ~ helm repo update
➜  ~ kubectl create ns apisix
namespace/apisix created
➜  ~ helm install apisix apisix/apisix --set gateway.type=NodePort --set ingress-controller.enabled=true --namespace apisix  
W0827 18:19:58.504653  294386 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
NAME: apisix
LAST DEPLOYED: Fri Aug 27 18:20:00 2021
NAMESPACE: apisix
STATUS: deployed
REVISION: 1
TEST SUITE: None
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

验证是否曾经胜利施行且运行:

➜  ~ kubectl -n apisix get pods 
NAME                                         READY   STATUS    RESTARTS   AGE
apisix-77d7545d4d-cvdhs                      1/1     Running   0          4m7s
apisix-etcd-0                                1/1     Running   0          4m7s
apisix-etcd-1                                1/1     Running   0          4m7s
apisix-etcd-2                                1/1     Running   0          4m7s
apisix-ingress-controller-74c6b5fbdd-94ngk   1/1     Running   0          4m7s

能够看到相干的 Pod 均已失常运行。

部署示范我的项目

咱们 kennethreitz/httpbin 用作示例我的项目进行演示。这里也间接在 KubeSphere 中实现部署。

抉择服务——无状态服务,创立简略。

在 KubeSphere 的服务和负载界面可视化开展胜利,也能够间接在终端下查看是否曾经开展胜利。

➜  ~ kubectl get pods,svc -l app=httpbin
NAME                             READY   STATUS    RESTARTS   AGE
pod/httpbin-v1-7d6dc7d5f-5lcmg   1/1     Running   0          48s

NAME              TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/httpbin   ClusterIP   10.96.0.5    <none>        80/TCP    48s

应用 Apache APIS 作为网关代理

咱们先演示如何应用 Apache APIIX 作为网关代理 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.77.0"
  }, 
  "origin": "10.244.2.9", 
  "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":"/get","host":"httpbin.org","upstream": {"type":"roundrobin","nodes": {"httpbin.default:80": 1}
  }
}'{"node":{"key":"\/apisix\/routes\/1","value":{"host":"httpbin.org","update_time":1630060883,"uri":"\/*","create_time":1630060883,"priority":0,"upstream":{"type":"roundrobin","pass_host":"pass","nodes":{"httpbin.default:80":1},"hash_on":"vars","scheme":"http"},"id":"1","status":1}},"action":"set"}

你会失去相似下面的输入,接下来验证是否代理胜利:

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.77.0", 
    "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.33.97    <none>        9180/TCP       22m
apisix-gateway   NodePort    10.96.126.83   <none>        80:31441/TCP   22m

在应用 Helm chart 部署的时候,默认会将 Apache APISIX 的端口通过 NodePort 的模式裸露进来。咱们应用 Node IP + NodePort 的端口进行拜访测试。

root@apisix:~$ curl http://172.18.0.5:31441/get -H "HOST: httpbin.org" 
{"args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.76.1", 
    "X-Forwarded-Host": "httpbin.org"
  }, 
  "origin": "10.244.2.1", 
  "url": "http://httpbin.org/get"
}

能够看到,在集群外曾经能够通过 Apache APISIX 作为网关代理 Kubernetes 集群内的服务了。

应用 APISIX Ingress Controller 代理服务

咱们能够间接在 KubeSphere 中增加利用路由(Ingress),Apache APISIX Ingress Controller 会主动将路由规定同步至 Apache APISIX 中,实现服务的代理。

留神咱们增加了 kubernetes.io/ingress.class: apisix 的 annotation 配置,用于反对集群内多 ingress-controller 的场景。

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

在终端下测试是否代理胜利:

root@apisix:~$ curl http://172.18.0.5:31441/get -H "HOST: http-ing.org"  
{"args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Host": "http-ing.org", 
    "User-Agent": "curl/7.76.1", 
    "X-Forwarded-Host": "http-ing.org"
  }, 
  "origin": "10.244.2.1", 
  "url": "http://http-ing.org/get"
}

能够看到也失常代理了。

除了以上形式外,Apache APISIX Ingress Controller 通过 CRD 的形式对 Kubernetes 进行了扩大,你也能够通过公布 ApisixRoute 等这种自定义资源来实现 Kubernetes 中服务的对外裸露。

总结

你能够在 KubeSphere 中应用 Apache APISIX 的官网 Helm 仓库间接部署 Apache APISIX 和 APISIX Ingress Controller。并且 Apache APISIX 可通过作为网关,或者 APISIX Ingress Controller 的数据面来承载业务流量。

将来瞻望

Apache APISIX 曾经与 KubeSphere 社区达成单干,你能够间接在 KubeSphere 自带的利用仓库中找到 Apache APISIX,不须要手动增加 Helm 仓库。

对于 Apache APISIX

Apache APISIX 是一个动静、实时、高性能的开源 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。Apache APISIX 能够帮忙企业疾速、平安的解决 API 和微服务流量,包含网关、Kubernetes Ingress 和服务网格等。

寰球已有数百家企业应用 Apache APISIX 解决要害业务流量,涵盖金融、互联网、制作、批发、运营商等等,比方美国航空航天局(NASA)、欧盟的数字工厂、中国航信、中国移动、腾讯、华为、微博、网易、贝壳找房、360、泰康、奈雪的茶等。

200 余位贡献者,一起缔造了 Apache APISIX 这个世界上最沉闷的开源网关我的项目。聪慧的开发者们!快来退出这个沉闷而多样化的社区,一起来给这个世界带来更多美妙的货色吧!

  • Apache APISIX GitHub:https://github.com/apache/apisix
  • Apache APISIX 官网:https://apisix.apache.org/
  • Apache APISIX 文档:https://apisix.apache.org/zh/…

正文完
 0