进一步学习 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 系统有四个容器,其中的 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。
还有一个名为ingress 的程序,在 ingress 或者 knative 模式的部署时用到,监听 kubernetes 集群的 ingress 和 service,用于 ingress 或者 knative 模式的部署。
每个组件的入口代码是 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。