开源的api网关gloo的源代码粗略阅读

作者:李佶澳  更新时间:2019-06-01 17:16:38 +0800

说明

进一步学习 gloo。

gloo网关

编译

BUILD.md中介绍了编译方法:

go get github.com/solo-io/gloo
cd $GOPATH/src/github.com/solo-io/gloo
dep ensure -v

编译各个组件:

make gloo
make glooctl
make discovery
make gateway
make envoyinit

生成 gloo api 代码:

go get github.com/paulvollmer/2gobytes
go get github.com/lyft/protoc-gen-validate
go get github.com/gogo/protobuf/protoc-gen-gogo
go get golang.org/x/tools/cmd/goimports
make generated-code

gloo 组件

上一篇部署的 gloo 系统有四个容器,其中的 gateway-proxy 是作了简单封装的 envoy:

$ kubectl -n gloo-system get pod -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP               NODE            NOMINATED NODE
discovery-898bd9cd48-fz79s       1/1     Running   2          14d   172.18.129.88    10.10.84.58     <none>
gateway-7f5fdb5858-2cmvf         1/1     Running   2          14d   172.18.128.137   10.10.173.203   <none>
gateway-proxy-5bf8b9cf59-xb7f9   1/1     Running   0          14d   172.18.128.138   10.10.173.203   <none>
gloo-7d75b48cc5-vwh5r            1/1     Running   2          14d   172.18.129.87    10.10.84.58     <none>

gloo 的核心组件有四个:glooctl、gloo、discovery、gateway。

  1. glooctl 是命令行;
  2. gloo 是整个系统的核心,是 envoy 对接的 xds,监听所有相关资源,生成 envoy 配置;
  3. discovery 同步 upstream 和发现的 sdk;
  4. gateway 维护 gloo 定义的 proxy,维护路由信息(绑定的端口、路由插件等)

还有一个名为ingress 的程序,在 ingress 或者 knative 模式的部署时用到,监听 kubernetes 集群的 ingress 和 service,用于 ingress 或者 knative 模式的部署。

gloo 程序入口

每个组件的入口代码是 projects/[NAME]/cmd/main.go:

projects/gloo/cli/cmd/main.go
projects/gloo/cmd/main.go
projects/discovery/cmd/main.go
projects/gateway/cmd/main.go
projects/ingress/cmd/main.go

代码比较好懂,按照源代码阅读方法走读就可以了。

提别提一下 discovery,它调用的两个函数分别是 uds.Main() 和 fdssetup.Main(),uds 可能是 upstream discovery sync 的意思,fds 可能是 file discovery sync,fds 支持 swagger、aws、grpc。

参考

  1. gloo BUILD.md
  2. 基于Envoy的ApiGateway/Ingress Controller项目梳理(三):Gloo
  3. 源代码阅读方法,Go语言项目的代码阅读技巧

关注加微信,一般不闲聊(直接说事)

QQ交流群

区块链实践互助QQ群:576555864

Kubernetes实践互助QQ群:947371129

Prometheus实践互助QQ群:952461804

Kong/Envoy实践互助QQ群:952503851

Ansible实践互助QQ群:955105412

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  微信公众号精选文章  发现知识星球