diff --git a/cli/cmd/root.go b/cli/cmd/root.go index ce1782a408d8da32c9a5edbad709d11d63d7aaa4..01e89117c3424d3c1f880e1265c0e46418913087 100644 --- a/cli/cmd/root.go +++ b/cli/cmd/root.go @@ -36,6 +36,7 @@ import ( "os" "code.fbi.h-da.de/danet/gosdn/cli/adapter" + "google.golang.org/grpc/resolver" "github.com/google/uuid" log "github.com/sirupsen/logrus" @@ -45,6 +46,7 @@ import ( var cfgFile string var verbose bool +var gRPCPassthrough bool var loglevel string var grpcPort string var cliPnd string @@ -85,6 +87,7 @@ func init() { rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (./.gosdnc.toml)") rootCmd.PersistentFlags().StringVarP(&loglevel, "log-level", "l", "", "log level 'debug' or 'trace'") rootCmd.PersistentFlags().BoolVar(&verbose, "verbose", false, "show mne and sbi info") + rootCmd.PersistentFlags().BoolVar(&gRPCPassthrough, "grpcPassthrough", true, "set the default resolve scheme for grpc to passthrough, default is true") rootCmd.Flags().StringVar(&grpcPort, "grpc-port", "55055", "port for gRPC NBI") } @@ -147,6 +150,13 @@ func initConfig() { cliPnd = uuid.New().String() } + if gRPCPassthrough { + log.Info("Setting gRPC default resolver scheme to passthrough. No DNS queries are being made when doing a gRPC request.") + resolver.SetDefaultScheme("passthrough") + } else { + log.Info("gRPC default resolver scheme is not set to passthrough. This might cause issues with the gRPC connection when no real DNS server is available as each gRPC requests requires a DNS request.") + } + adapter, err := adapter.NewPndAdapter(cliPnd, viper.GetString("controllerAPIEndpoint")) if err != nil { log.Fatal(err) diff --git a/controller/cmd/root.go b/controller/cmd/root.go index 293183319b0e5fdfb61a85098cb9878c0c330048..cc00b490347ae0b17540e4c2034cc84cabfce9a2 100644 --- a/controller/cmd/root.go +++ b/controller/cmd/root.go @@ -52,6 +52,7 @@ var csbiOrchestrator string var pluginRegistry string var pluginFolder string var security string +var gRPCPassthrough bool // rootCmd represents the base command when called without any subcommands. var rootCmd = &cobra.Command{ @@ -86,6 +87,7 @@ func init() { rootCmd.Flags().StringVar(&pluginRegistry, "plugin-registry", "", "plugin registry address") rootCmd.Flags().StringVar(&pluginFolder, "plugin-folder", "", "folder holding all goSDN specific plugins") rootCmd.Flags().StringVarP(&security, "security", "s", "", "security level 'secure' or 'insecure'") + rootCmd.Flags().BoolVar(&gRPCPassthrough, "grpcPassthrough", true, "set the default resolve scheme for grpc to passthrough, default is true") } const ( diff --git a/controller/controller.go b/controller/controller.go index d0d6ceee1862d3e9342210cd967a77f8697fb81f..f79d5ff45167bcea92e333632421e8a53a572c82 100644 --- a/controller/controller.go +++ b/controller/controller.go @@ -18,6 +18,7 @@ import ( "golang.org/x/crypto/argon2" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/resolver" apppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/app" cmpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement" @@ -201,6 +202,14 @@ func setupPluginRegistryClient() rpb.PluginRegistryServiceClient { } func startGrpc() error { + passthrough := viper.GetBool("passthrough") + if passthrough { + log.Info("Setting gRPC default resolver scheme to passthrough. No DNS queries are being made when doing a gRPC request.") + resolver.SetDefaultScheme("passthrough") + } else { + log.Info("gRPC default resolver scheme is not set to passthrough. This might cause issues with the gRPC connection when no real DNS server is available as each gRPC requests requires a DNS request.") + } + socket := viper.GetString("socket") lislisten, err := net.Listen("tcp", socket) if err != nil {