我们使用golang实现了GRPC API,现在需要一些机制在两个不同的主机(prod/stage)上路由请求。问题是路由规则必须依赖于grpc元数据而不是报头。实际上我们在元数据参数传递iOS版本。据我所知,比如Nginx就不能做到这一点。我们没有k8之类的东西,只是简单的API守护进程监听某个端口。
authConf := viper.GetStringMapString("auth")
creds, err := credentials.NewServerTLSFromFile(authConf["certfile"], authConf["keyfile"])
if err != nil {
panic(err)
}
lis, err := net.Listen("tcp", ":"+viper.GetString("port"))
if err != nil {
panic(err)
}
###你可以使用envoy,它是一个代理,就像NginX。
它支持gRPC(看看gRPC -web),它允许你定义多个路由并将流量重定向到不同的主机。我使用它重定向到基于URL(包含gRPC包/函数名)的不同服务,但它也应该可以对头或元数据做同样的事情。
不过,在StackOverflow上,提供一个实际的使者配置来完成这一操作已经超出了范围。