You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2021/11/23 02:51:03 UTC

[skywalking-satellite] branch main updated: Setup full configuration, each config could be setup from environment (#86)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-satellite.git


The following commit(s) were added to refs/heads/main by this push:
     new 6ca2be9  Setup full configuration, each config could be setup from environment (#86)
6ca2be9 is described below

commit 6ca2be91d9800fd93b1ce072ba16e2888cfd20bb
Author: mrproliu <74...@qq.com>
AuthorDate: Tue Nov 23 10:50:56 2021 +0800

    Setup full configuration, each config could be setup from environment (#86)
---
 configs/satellite_config.yaml                      | 47 ++++++++++++++++++++++
 .../examples/grpc-load-balance-client/README.md    | 10 +++--
 docs/en/setup/plugins/client_grpc-client.md        | 18 ++++++++-
 internal/satellite/config/loader_test.go           | 28 +++++++++++++
 internal/satellite/config/override_by_env.go       |  2 +-
 plugins/client/grpc/client.go                      | 15 +++++++
 .../client/grpc/resolvers/kubernetes_clients.go    |  4 +-
 plugins/client/grpc/resolvers/kubernetes_config.go |  8 +---
 plugins/client/grpc/resolvers/resolvers.go         |  9 +++--
 plugins/client/grpc/resolvers/static_clients.go    |  4 +-
 10 files changed, 125 insertions(+), 20 deletions(-)

diff --git a/configs/satellite_config.yaml b/configs/satellite_config.yaml
index db9fcef..f08a72e 100644
--- a/configs/satellite_config.yaml
+++ b/configs/satellite_config.yaml
@@ -37,8 +37,55 @@ telemetry:
 sharing:
   clients:
     - plugin_name: "grpc-client"
+      # The gRPC server address finder type
+      finder_type: ${SATELLITE_GRPC_CLIENT_FINDER:static}
       # The gRPC server address (default localhost:11800).
       server_addr: ${SATELLITE_GRPC_CLIENT:127.0.0.1:11800}
+      # The gRPC kubernetes server address finder
+      kubernetes_config:
+        # The kubernetes API server address, If not define means using in kubernetes mode to connect
+        api_server: ${SATELLITE_GRPC_CLIENT_KUBERNETES_API_SERVER:}
+        # The HTTP basic authentication credentials for the targets.
+        basic_auth:
+          # The username for auth.
+          username: ${SATELLITE_GRPC_CLIENT_KUBERNETES_BASIC_AUTH_USERNAME:}
+          # The password for auth.
+          password: ${SATELLITE_GRPC_CLIENT_KUBERNETES_BASIC_AUTH_PASSWORD:}
+          # The password file path for auth.
+          password_file: ${SATELLITE_GRPC_CLIENT_KUBERNETES_BASIC_AUTH_PASSWORD_FILE:}
+        # The bearer token for the targets.
+        bearer_token: ${SATELLITE_GRPC_CLIENT_KUBERNETES_BEARER_TOKEN:}
+        # The bearer token file for the targets.
+        bearer_token_file: ${SATELLITE_GRPC_CLIENT_KUBERNETES_BEARER_TOKEN_FILE:}
+        # HTTP proxy server to use to connect to the targets.
+        proxy_url: ${SATELLITE_GRPC_CLIENT_KUBERNETES_PROXY_URL:}
+        # Used to connect to the targets.
+        tls_config:
+          # The CA cert to use for the targets.
+          ca_file: ${SATELLITE_GRPC_CLIENT_KUBERNETES_TLS_CONFIG_CA_FILE:}
+          # The client cert file for the targets.
+          cert_file: ${SATELLITE_GRPC_CLIENT_KUBERNETES_TLS_CONFIG_CERT_FILE:}
+          # The client key file for the targets.
+          key_file: ${SATELLITE_GRPC_CLIENT_KUBERNETES_TLS_CONFIG_KEY_FILE:}
+          # Used to verify the hostname for the targets.
+          server_name: ${SATELLITE_GRPC_CLIENT_KUBERNETES_TLS_CONFIG_SERVER_NAME:}
+          # Disable target certificate validation.
+          insecure_skip_verify: ${SATELLITE_GRPC_CLIENT_KUBERNETES_TLS_CONFIG_INSECURE_SKIP_VERIFY:}
+        namespaces:
+          # Support to lookup namespaces.
+          - ${SATELLITE_GRPC_CLIENT_KUBERNETES_NAMESPACE:default}
+        # The kind of resource
+        kind: ${SATELLITE_GRPC_CLIENT_KUBERNETES_KIND:pod}
+        # The kind selector
+        selector:
+          # Label selector
+          label: ${SATELLITE_GRPC_CLIENT_KUBERNETES_SELECTOR_LABEL:}
+          # Field selector
+          field: ${SATELLITE_GRPC_CLIENT_KUBERNETES_SELECTOR_FIELD:}
+        # How to get the address exported port
+        extra_port:
+          # Resource target port
+          port: ${SATELLITE_GRPC_CLIENT_KUBERNETES_EXTRA_PORT_PORT:11800}
       # The TLS switch
       enable_TLS: ${SATELLITE_GRPC_ENABLE_TLS:false}
       # The file path of client.pem. The config only works when opening the TLS switch.
diff --git a/docs/en/setup/examples/grpc-load-balance-client/README.md b/docs/en/setup/examples/grpc-load-balance-client/README.md
index d21aa3f..3e2d573 100644
--- a/docs/en/setup/examples/grpc-load-balance-client/README.md
+++ b/docs/en/setup/examples/grpc-load-balance-client/README.md
@@ -4,9 +4,9 @@ GRPC client support connect to multiple server address, and use `round-robin` po
 
 ## Server Discovery
 
-Support two ways to locate the server list:
-1. Static server list: Define the server address list.
-2. Kubernetes selector: Define kubernetes pod/service/endpoint, it could be found addresses and dynamic update automatically.
+Support two ways to locate the server list, using `finder_type` to change the type to find:
+1. `static`: Define the server address list.
+2. `kubernetes`: Define kubernetes pod/service/endpoint, it could be found addresses and dynamic update automatically.
 
 ### Static server list
 
@@ -16,6 +16,8 @@ You could see there define two server address and split by ",".
 sharing:
   clients:
     - plugin_name: "grpc-client"
+      # The gRPC server address finder type
+      finder_type: ${SATELLITE_GRPC_CLIENT_FINDER:static}
       # The gRPC server address (default localhost:11800).
       server_addr: ${SATELLITE_GRPC_CLIENT:127.0.0.1:11800,127.0.0.2:11800}
       # The TLS switch
@@ -47,6 +49,8 @@ Using `kubernetes_config` to define the address's finder.
 sharing:
   clients:
     - plugin_name: "grpc-client"
+      # The gRPC server address finder type
+      finder_type: ${SATELLITE_GRPC_CLIENT_FINDER:kubernetes}
       # The kubernetes config to lookup addresses
       kubernetes_config:
         # The kubernetes API server address, If not define means using in kubernetes mode to connect
diff --git a/docs/en/setup/plugins/client_grpc-client.md b/docs/en/setup/plugins/client_grpc-client.md
index 3b33e48..9bc0846 100755
--- a/docs/en/setup/plugins/client_grpc-client.md
+++ b/docs/en/setup/plugins/client_grpc-client.md
@@ -3,9 +3,24 @@
 The gRPC client is a sharing plugin to keep connection with the gRPC server and delivery the data to it.
 ## DefaultConfig
 ```yaml
+# The gRPC client finder type
+finder_type: "static"
+
 # The gRPC server address (default localhost:11800), multiple addresses are split by ",".
 server_addr: localhost:11800
 
+# The gRPC kubernetes server address finder
+kubernetes_config:
+  # The kind of resource
+  kind: pod
+  # The resource namespaces
+  namespaces:
+    - default
+  # How to get the address exported port
+  extra_port:
+    # Resource target port
+    port: 11800
+
 # The TLS switch (default false).
 enable_TLS: false
 
@@ -30,6 +45,7 @@ check_period: 5
 ## Configuration
 |Name|Type|Description|
 |----|----|-----------|
+| finder_type | string | The gRPC server address finder type |
 | server_addr | string | The gRPC server address |
 | kubernetes_config | *resolvers.KubernetesConfig | The kubernetes config to lookup addresses |
 | kubernetes_config.api_server | string | The kubernetes API server address, If not define means using in kubernetes mode to connect |
@@ -39,7 +55,7 @@ check_period: 5
 | kubernetes_config.basic_auth.password_file | string |  |
 | kubernetes_config.bearer_token | resolvers.Secret | The bearer token for the targets. |
 | kubernetes_config.bearer_token_file | string | The bearer token file for the targets. |
-| kubernetes_config.proxy_url | resolvers.URL | HTTP proxy server to use to connect to the targets. |
+| kubernetes_config.proxy_url | string | HTTP proxy server to use to connect to the targets. |
 | kubernetes_config.tls_config | resolvers.TLSConfig | TLSConfig to use to connect to the targets. |
 | kubernetes_config.namespaces | []string | Support to lookup namespaces |
 | kubernetes_config.kind | string | The kind of api |
diff --git a/internal/satellite/config/loader_test.go b/internal/satellite/config/loader_test.go
index d2492af..e8fafb6 100644
--- a/internal/satellite/config/loader_test.go
+++ b/internal/satellite/config/loader_test.go
@@ -97,6 +97,34 @@ func sharing() *SharingConfig {
 				"insecure_skip_verify":   false,
 				"check_period":           5,
 				"authentication":         "",
+				"finder_type":            "static",
+				"kubernetes_config": map[string]interface{}{
+					"api_server": "",
+					"basic_auth": map[string]interface{}{
+						"username":      "",
+						"password":      "",
+						"password_file": "",
+					},
+					"bearer_token":      "",
+					"bearer_token_file": "",
+					"proxy_url":         "",
+					"tls_config": map[string]interface{}{
+						"ca_file":              "",
+						"cert_file":            "",
+						"key_file":             "",
+						"server_name":          "",
+						"insecure_skip_verify": "",
+					},
+					"namespaces": []interface{}{"default"},
+					"kind":       "pod",
+					"selector": map[string]interface{}{
+						"label": "",
+						"field": "",
+					},
+					"extra_port": map[string]interface{}{
+						"port": 11800,
+					},
+				},
 			},
 		},
 		Servers: []plugin.Config{
diff --git a/internal/satellite/config/override_by_env.go b/internal/satellite/config/override_by_env.go
index f8b4858..07f0387 100644
--- a/internal/satellite/config/override_by_env.go
+++ b/internal/satellite/config/override_by_env.go
@@ -71,7 +71,7 @@ func overrideSlice(m []interface{}, regex *regexp.Regexp) []interface{} {
 		case map[interface{}]interface{}:
 			res = append(res, overrideMapInterfaceInterface(val, regex))
 		case string:
-			res = append(res, val)
+			res = append(res, overrideString(val, regex))
 		}
 	}
 	return res
diff --git a/plugins/client/grpc/client.go b/plugins/client/grpc/client.go
index d946502..d5c9ea8 100644
--- a/plugins/client/grpc/client.go
+++ b/plugins/client/grpc/client.go
@@ -71,9 +71,24 @@ func (c *Client) Description() string {
 
 func (c *Client) DefaultConfig() string {
 	return `
+# The gRPC client finder type
+finder_type: "static"
+
 # The gRPC server address (default localhost:11800), multiple addresses are split by ",".
 server_addr: localhost:11800
 
+# The gRPC kubernetes server address finder
+kubernetes_config:
+  # The kind of resource
+  kind: pod
+  # The resource namespaces
+  namespaces:
+    - default
+  # How to get the address exported port
+  extra_port:
+    # Resource target port
+    port: 11800
+
 # The TLS switch (default false).
 enable_TLS: false
 
diff --git a/plugins/client/grpc/resolvers/kubernetes_clients.go b/plugins/client/grpc/resolvers/kubernetes_clients.go
index 3bbe5ef..2cfd127 100644
--- a/plugins/client/grpc/resolvers/kubernetes_clients.go
+++ b/plugins/client/grpc/resolvers/kubernetes_clients.go
@@ -32,8 +32,8 @@ var kubernetesServerSchema = "kubernetes"
 type kubernetesServerResolver struct {
 }
 
-func (k *kubernetesServerResolver) IsSupport(c *ServerFinderConfig) bool {
-	return c.KubernetesConfig != nil
+func (k *kubernetesServerResolver) Type() string {
+	return kubernetesServerSchema
 }
 
 func (k *kubernetesServerResolver) BuildTarget(c *ServerFinderConfig) (string, error) {
diff --git a/plugins/client/grpc/resolvers/kubernetes_config.go b/plugins/client/grpc/resolvers/kubernetes_config.go
index b3a1f93..1dbf75d 100644
--- a/plugins/client/grpc/resolvers/kubernetes_config.go
+++ b/plugins/client/grpc/resolvers/kubernetes_config.go
@@ -19,7 +19,6 @@ package resolvers
 
 import (
 	"fmt"
-	"net/url"
 
 	"github.com/prometheus/common/config"
 	"gopkg.in/yaml.v3"
@@ -49,16 +48,11 @@ type HTTPClientConfig struct {
 	// The bearer token file for the targets.
 	BearerTokenFile string `mapstructure:"bearer_token_file" yaml:"bearer_token_file,omitempty"`
 	// HTTP proxy server to use to connect to the targets.
-	ProxyURL URL `mapstructure:"proxy_url" yaml:"proxy_url,omitempty"`
+	ProxyURL string `mapstructure:"proxy_url" yaml:"proxy_url,omitempty"`
 	// TLSConfig to use to connect to the targets.
 	TLSConfig TLSConfig `mapstructure:"tls_config" yaml:"tls_config,omitempty"`
 }
 
-// URL is a custom URL type that allows validation at configuration load time.
-type URL struct {
-	*url.URL
-}
-
 // BasicAuth contains basic HTTP authentication credentials.
 type BasicAuth struct {
 	Username     string `mapstructure:"username" yaml:"username"`
diff --git a/plugins/client/grpc/resolvers/resolvers.go b/plugins/client/grpc/resolvers/resolvers.go
index cb84260..7db211b 100644
--- a/plugins/client/grpc/resolvers/resolvers.go
+++ b/plugins/client/grpc/resolvers/resolvers.go
@@ -30,6 +30,7 @@ var rs = []GrpcResolver{
 }
 
 type ServerFinderConfig struct {
+	FinderType       string            `mapstructure:"finder_type"`       // The gRPC server address finder type, support "static" and "kubernetes"
 	ServerAddr       string            `mapstructure:"server_addr"`       // The gRPC server address
 	KubernetesConfig *KubernetesConfig `mapstructure:"kubernetes_config"` // The kubernetes config to lookup addresses
 }
@@ -37,8 +38,8 @@ type ServerFinderConfig struct {
 type GrpcResolver interface {
 	resolver.Builder
 
-	// IsSupport client config
-	IsSupport(c *ServerFinderConfig) bool
+	// Type of resolver
+	Type() string
 	// BuildTarget address by client config
 	BuildTarget(c *ServerFinderConfig) (string, error)
 }
@@ -51,9 +52,9 @@ func RegisterAllGrpcResolvers() {
 
 func BuildTarget(client *ServerFinderConfig) (string, error) {
 	for _, r := range rs {
-		if r.IsSupport(client) {
+		if client.FinderType == r.Type() {
 			return r.BuildTarget(client)
 		}
 	}
-	return "", fmt.Errorf("could not build grpc target")
+	return "", fmt.Errorf("could not find client finder: %s", client.FinderType)
 }
diff --git a/plugins/client/grpc/resolvers/static_clients.go b/plugins/client/grpc/resolvers/static_clients.go
index 0abe1e3..c09121f 100644
--- a/plugins/client/grpc/resolvers/static_clients.go
+++ b/plugins/client/grpc/resolvers/static_clients.go
@@ -31,8 +31,8 @@ var staticServerSchema = "static"
 type staticServerResolver struct {
 }
 
-func (s *staticServerResolver) IsSupport(c *ServerFinderConfig) bool {
-	return c.KubernetesConfig == nil && c.ServerAddr != ""
+func (s *staticServerResolver) Type() string {
+	return staticServerSchema
 }
 
 func (s *staticServerResolver) BuildTarget(c *ServerFinderConfig) (string, error) {