kuma_sd: Extend Kuma SD configuration to allow users to specify ClientId

Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>
pull/13278/head
Marcin Skalski 2 years ago
parent 5082655392
commit d12ccf9fa2
  1. 1
      config/config_test.go
  2. 1
      config/testdata/conf.good.yml
  3. 1
      config/testdata/roundtrip.good.yml
  4. 18
      discovery/xds/kuma.go
  5. 2
      discovery/xds/kuma_test.go
  6. 1
      discovery/xds/xds.go
  7. 1
      discovery/xds/xds_test.go
  8. 5
      docs/configuration/configuration.md

@ -568,6 +568,7 @@ var expectedConf = &Config{
ServiceDiscoveryConfigs: discovery.Configs{ ServiceDiscoveryConfigs: discovery.Configs{
&xds.KumaSDConfig{ &xds.KumaSDConfig{
Server: "http://kuma-control-plane.kuma-system.svc:5676", Server: "http://kuma-control-plane.kuma-system.svc:5676",
ClientId: "main-prometheus",
HTTPClientConfig: config.DefaultHTTPClientConfig, HTTPClientConfig: config.DefaultHTTPClientConfig,
RefreshInterval: model.Duration(15 * time.Second), RefreshInterval: model.Duration(15 * time.Second),
FetchTimeout: model.Duration(2 * time.Minute), FetchTimeout: model.Duration(2 * time.Minute),

@ -221,6 +221,7 @@ scrape_configs:
kuma_sd_configs: kuma_sd_configs:
- server: http://kuma-control-plane.kuma-system.svc:5676 - server: http://kuma-control-plane.kuma-system.svc:5676
clientId: main-prometheus
- job_name: service-marathon - job_name: service-marathon
marathon_sd_configs: marathon_sd_configs:

@ -108,6 +108,7 @@ scrape_configs:
kuma_sd_configs: kuma_sd_configs:
- server: http://kuma-control-plane.kuma-system.svc:5676 - server: http://kuma-control-plane.kuma-system.svc:5676
clientId: main-prometheus
marathon_sd_configs: marathon_sd_configs:
- servers: - servers:

@ -178,10 +178,11 @@ func kumaMadsV1ResourceParser(resources []*anypb.Any, typeURL string) ([]model.L
func NewKumaHTTPDiscovery(conf *KumaSDConfig, logger log.Logger) (discovery.Discoverer, error) { func NewKumaHTTPDiscovery(conf *KumaSDConfig, logger log.Logger) (discovery.Discoverer, error) {
// Default to "prometheus" if hostname is unavailable. // Default to "prometheus" if hostname is unavailable.
clientID, err := osutil.GetFQDN() var clientID string
if err != nil { if conf.ClientId == "" {
level.Debug(logger).Log("msg", "error getting FQDN", "err", err) clientID = defaultClientId(logger)
clientID = "prometheus" } else {
clientID = conf.ClientId
} }
clientConfig := &HTTPResourceClientConfig{ clientConfig := &HTTPResourceClientConfig{
@ -215,3 +216,12 @@ func NewKumaHTTPDiscovery(conf *KumaSDConfig, logger log.Logger) (discovery.Disc
return d, nil return d, nil
} }
func defaultClientId(logger log.Logger) string {
clientID, err := osutil.GetFQDN()
if err != nil {
level.Debug(logger).Log("msg", "error getting FQDN", "err", err)
clientID = "prometheus"
}
return clientID
}

@ -204,7 +204,7 @@ func TestNewKumaHTTPDiscovery(t *testing.T) {
require.True(t, ok) require.True(t, ok)
require.Equal(t, kumaConf.Server, resClient.Server()) require.Equal(t, kumaConf.Server, resClient.Server())
require.Equal(t, KumaMadsV1ResourceTypeURL, resClient.ResourceTypeURL()) require.Equal(t, KumaMadsV1ResourceTypeURL, resClient.ResourceTypeURL())
require.NotEmpty(t, resClient.ID()) require.Equal(t, kumaConf.ClientId, resClient.ID())
require.Equal(t, KumaMadsV1ResourceType, resClient.config.ResourceType) require.Equal(t, KumaMadsV1ResourceType, resClient.config.ResourceType)
} }

@ -55,6 +55,7 @@ type SDConfig struct {
RefreshInterval model.Duration `yaml:"refresh_interval,omitempty"` RefreshInterval model.Duration `yaml:"refresh_interval,omitempty"`
FetchTimeout model.Duration `yaml:"fetch_timeout,omitempty"` FetchTimeout model.Duration `yaml:"fetch_timeout,omitempty"`
Server string `yaml:"server,omitempty"` Server string `yaml:"server,omitempty"`
ClientId string `yaml:"clientId,omitempty"`
} }
// mustRegisterMessage registers the provided message type in the typeRegistry, and panics // mustRegisterMessage registers the provided message type in the typeRegistry, and panics

@ -36,6 +36,7 @@ var (
sdConf = SDConfig{ sdConf = SDConfig{
Server: "http://127.0.0.1", Server: "http://127.0.0.1",
RefreshInterval: model.Duration(10 * time.Second), RefreshInterval: model.Duration(10 * time.Second),
ClientId: "test-id",
} }
testFetchFailuresCount = prometheus.NewCounter( testFetchFailuresCount = prometheus.NewCounter(

@ -2230,6 +2230,11 @@ See below for the configuration options for Kuma MonitoringAssignment discovery:
# Address of the Kuma Control Plane's MADS xDS server. # Address of the Kuma Control Plane's MADS xDS server.
server: <string> server: <string>
# Client id is used by Kuma Control Plane to compute Monitoring Assignment for specific Prometheus backend.
# This is useful when migrating between multiple Prometheus backends, or having separate backend for each Mesh
# When not specified, system hostname/fqdn will be used if available, if not `prometheus` will be used.
clientId: <string>
# The time to wait between polling update requests. # The time to wait between polling update requests.
[ refresh_interval: <duration> | default = 30s ] [ refresh_interval: <duration> | default = 30s ]

Loading…
Cancel
Save