|
@@ -27,20 +27,22 @@ import (
|
|
|
"github.com/coreos/etcd/pkg/transport"
|
|
"github.com/coreos/etcd/pkg/transport"
|
|
|
"github.com/coreos/etcd/proxy/grpcproxy"
|
|
"github.com/coreos/etcd/proxy/grpcproxy"
|
|
|
|
|
|
|
|
- "github.com/spf13/cobra"
|
|
|
|
|
- "google.golang.org/grpc"
|
|
|
|
|
-
|
|
|
|
|
"github.com/cockroachdb/cmux"
|
|
"github.com/cockroachdb/cmux"
|
|
|
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
|
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
|
|
|
+ "github.com/spf13/cobra"
|
|
|
|
|
+ "google.golang.org/grpc"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
|
- grpcProxyListenAddr string
|
|
|
|
|
- grpcProxyEndpoints []string
|
|
|
|
|
- grpcProxyCert string
|
|
|
|
|
- grpcProxyKey string
|
|
|
|
|
- grpcProxyCA string
|
|
|
|
|
|
|
+ grpcProxyListenAddr string
|
|
|
|
|
+ grpcProxyEndpoints []string
|
|
|
|
|
+ grpcProxyCert string
|
|
|
|
|
+ grpcProxyKey string
|
|
|
|
|
+ grpcProxyCA string
|
|
|
|
|
+ grpcProxyAdvertiseClientURL string
|
|
|
|
|
+ grpcProxyResolverPrefix string
|
|
|
|
|
+ grpcProxyResolverTTL int
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
func init() {
|
|
@@ -70,11 +72,27 @@ func newGRPCProxyStartCommand() *cobra.Command {
|
|
|
cmd.Flags().StringVar(&grpcProxyCert, "cert", "", "identify secure connections with etcd servers using this TLS certificate file")
|
|
cmd.Flags().StringVar(&grpcProxyCert, "cert", "", "identify secure connections with etcd servers using this TLS certificate file")
|
|
|
cmd.Flags().StringVar(&grpcProxyKey, "key", "", "identify secure connections with etcd servers using this TLS key file")
|
|
cmd.Flags().StringVar(&grpcProxyKey, "key", "", "identify secure connections with etcd servers using this TLS key file")
|
|
|
cmd.Flags().StringVar(&grpcProxyCA, "cacert", "", "verify certificates of TLS-enabled secure etcd servers using this CA bundle")
|
|
cmd.Flags().StringVar(&grpcProxyCA, "cacert", "", "verify certificates of TLS-enabled secure etcd servers using this CA bundle")
|
|
|
|
|
+ cmd.Flags().StringVar(&grpcProxyAdvertiseClientURL, "advertise-client-url", "127.0.0.1:23790", "advertise address to register (must be reachable by client)")
|
|
|
|
|
+ cmd.Flags().StringVar(&grpcProxyResolverPrefix, "resolver-prefix", "", "prefix to use for registering proxy (must be shared with other grpc-proxy members)")
|
|
|
|
|
+ cmd.Flags().IntVar(&grpcProxyResolverTTL, "resolver-ttl", 0, "specify TTL, in seconds, when registering proxy endpoints")
|
|
|
|
|
|
|
|
return &cmd
|
|
return &cmd
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func startGRPCProxy(cmd *cobra.Command, args []string) {
|
|
func startGRPCProxy(cmd *cobra.Command, args []string) {
|
|
|
|
|
+ if grpcProxyResolverPrefix != "" && grpcProxyResolverTTL < 1 {
|
|
|
|
|
+ fmt.Fprintln(os.Stderr, fmt.Errorf("invalid resolver-ttl %d", grpcProxyResolverTTL))
|
|
|
|
|
+ os.Exit(1)
|
|
|
|
|
+ }
|
|
|
|
|
+ if grpcProxyResolverPrefix == "" && grpcProxyResolverTTL > 0 {
|
|
|
|
|
+ fmt.Fprintln(os.Stderr, fmt.Errorf("invalid resolver-prefix %q", grpcProxyResolverPrefix))
|
|
|
|
|
+ os.Exit(1)
|
|
|
|
|
+ }
|
|
|
|
|
+ if grpcProxyResolverPrefix != "" && grpcProxyResolverTTL > 0 && grpcProxyAdvertiseClientURL == "" {
|
|
|
|
|
+ fmt.Fprintln(os.Stderr, fmt.Errorf("invalid advertise-client-url %q", grpcProxyAdvertiseClientURL))
|
|
|
|
|
+ os.Exit(1)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
l, err := net.Listen("tcp", grpcProxyListenAddr)
|
|
l, err := net.Listen("tcp", grpcProxyListenAddr)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Fprintln(os.Stderr, err)
|
|
fmt.Fprintln(os.Stderr, err)
|
|
@@ -105,7 +123,10 @@ func startGRPCProxy(cmd *cobra.Command, args []string) {
|
|
|
|
|
|
|
|
kvp, _ := grpcproxy.NewKvProxy(client)
|
|
kvp, _ := grpcproxy.NewKvProxy(client)
|
|
|
watchp, _ := grpcproxy.NewWatchProxy(client)
|
|
watchp, _ := grpcproxy.NewWatchProxy(client)
|
|
|
- clusterp := grpcproxy.NewClusterProxy(client)
|
|
|
|
|
|
|
+ if grpcProxyResolverPrefix != "" {
|
|
|
|
|
+ grpcproxy.Register(client, grpcProxyResolverPrefix, grpcProxyAdvertiseClientURL, grpcProxyResolverTTL)
|
|
|
|
|
+ }
|
|
|
|
|
+ clusterp, _ := grpcproxy.NewClusterProxy(client, grpcProxyAdvertiseClientURL, grpcProxyResolverPrefix)
|
|
|
leasep, _ := grpcproxy.NewLeaseProxy(client)
|
|
leasep, _ := grpcproxy.NewLeaseProxy(client)
|
|
|
mainp := grpcproxy.NewMaintenanceProxy(client)
|
|
mainp := grpcproxy.NewMaintenanceProxy(client)
|
|
|
authp := grpcproxy.NewAuthProxy(client)
|
|
authp := grpcproxy.NewAuthProxy(client)
|