使用 go-control-plane 自定义服务网格控制面
package main
import (
"log"
"github.com/envoyproxy/go-control-plane/envoy/api/v2"
"github.com/envoyproxy/go-control-plane/envoy/api/v2/core"
"github.com/envoyproxy/go-control-plane/envoy/api/v2/endpoint"
"github.com/envoyproxy/go-control-plane/envoy/api/v2/listener"
"github.com/envoyproxy/go-control-plane/envoy/api/v2/route"
"github.com/envoyproxy/go-control-plane/envoy/api/v2/cluster"
"github.com/envoyproxy/go-control-plane/envoy/service/discovery/v2"
"github.com/envoyproxy/go-control-plane/envoy/service/load_stats/v2"
"github.com/envoyproxy/go-control-plane/pkg/cache"
"github.com/envoyproxy/go-control-plane/pkg/server"
"google.golang.org/grpc"
)
func main() {
// 创建一个新的ads服务器,使用snapshot作为配置数据的缓存
ads := server.NewServer(cache.NewSnapshotCache(true, group))
// 创建gRPC服务器并注册服务
grpcServer := grpc.NewServer()
discovery.RegisterAggregatedDiscoveryServiceServer(grpcServer, ads)
load_stats.RegisterLoadReportingServiceServer(grpcServer, ads)
// 监听gRPC端口
lis, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal(err)
}
if err := grpcServer.Serve(lis); err != nil {
log.Fatal(err)
}
}
// 创建一个简单的群组,用于初始化snapshot cache
func group(node *core.Node) []*v2.ClusterLoadAssignment {
return []*v2.ClusterLoadAssignment{{
ClusterName: "fake_cluster",
Endpoints: []endpoint.LocalityLbEndpoints{{
LbEndpoints: []endpoint.LbEndpoint{{
Endpoint: &endpoint.LbEndpoint_Endpoint{
Address: &core.Address{
Address: &core.Address_SocketAddress{
SocketAddress: &core.SocketAddress{
Protocol: core.SocketAddress_TCP,
Address: "127.0.0.1",
PortSpecifier: &core.SocketAddress_PortValue{
PortValue: 8080,
},
},
},
},
},
}},
}},
}}
}
这个代码实例展示了如何使用go-control-plane库来创建一个简单的服务网格控制面。它创建了一个gRPC服务器,注册了AggregatedDiscoveryService和LoadReportingService,这两个服务是Envoy代理与服务网格控制面通信的标准接口。代码中的group
函数返回了一个包含单个集群信息的配置快照,该集群只有一个单一的端点,即本地主机的8080端口。这个实例提供了一个基本框架,开
评论已关闭