diff --git a/pkg/obi/config.go b/pkg/obi/config.go index be4462907..2cb3b0a34 100644 --- a/pkg/obi/config.go +++ b/pkg/obi/config.go @@ -119,7 +119,7 @@ var DefaultConfig = Config{ MaxTransactionTime: 5 * time.Minute, }, NameResolver: &transform.NameResolverConfig{ - Sources: []string{"k8s"}, + Sources: []transform.Source{transform.SourceK8s}, CacheLen: 1024, CacheTTL: 5 * time.Minute, }, diff --git a/pkg/obi/config_test.go b/pkg/obi/config_test.go index 77853a459..f9d426882 100644 --- a/pkg/obi/config_test.go +++ b/pkg/obi/config_test.go @@ -236,7 +236,7 @@ discovery: MaxPathSegmentCardinality: 10, }, NameResolver: &transform.NameResolverConfig{ - Sources: []string{"k8s", "dns"}, + Sources: []transform.Source{transform.SourceK8s, transform.SourceDNS}, CacheLen: 1024, CacheTTL: 5 * time.Minute, }, diff --git a/pkg/transform/name_resolver.go b/pkg/transform/name_resolver.go index 3c1517014..c3b695009 100644 --- a/pkg/transform/name_resolver.go +++ b/pkg/transform/name_resolver.go @@ -29,25 +29,37 @@ func nrlog() *slog.Logger { return slog.With("component", "transform.NameResolver") } +type Source string + +const ( + SourceDNS Source = "dns" + SourceK8s Source = "k8s" + SourceKube Source = "kube" + SourceKubernetes Source = "kubernetes" + SourceRDNS Source = "rdns" +) + const ( ResolverDNS = maps.Bits(1 << iota) ResolverK8s ResolverRDNS ) -func resolverSources(str []string) maps.Bits { - return maps.MappedBits(str, map[string]maps.Bits{ - "dns": ResolverDNS, - "k8s": ResolverK8s, - "kube": ResolverK8s, - "kubernetes": ResolverK8s, - "rdns": ResolverRDNS, - }, maps.WithTransform(strings.ToLower)) +func resolverSources(src []Source) maps.Bits { + return maps.MappedBits(src, map[Source]maps.Bits{ + SourceDNS: ResolverDNS, + SourceK8s: ResolverK8s, + SourceKube: ResolverK8s, + SourceKubernetes: ResolverK8s, + SourceRDNS: ResolverRDNS, + }, maps.WithTransform(func(s Source) Source { + return Source(strings.ToLower(string(s))) + })) } type NameResolverConfig struct { - // Sources for name resolving. Accepted values: dns, k8s - Sources []string `yaml:"sources" env:"OTEL_EBPF_NAME_RESOLVER_SOURCES" envSeparator:"," envDefault:"k8s"` + // Sources for name resolving. Accepted values: dns, k8s, rdns + Sources []Source `yaml:"sources" env:"OTEL_EBPF_NAME_RESOLVER_SOURCES" envSeparator:"," envDefault:"k8s"` // CacheLen specifies the max size of the LRU cache that is checked before // performing the name lookup. Default: 256 CacheLen int `yaml:"cache_len" env:"OTEL_EBPF_NAME_RESOLVER_CACHE_LEN"` diff --git a/pkg/transform/name_resolver_test.go b/pkg/transform/name_resolver_test.go index c95baaa10..2883995bd 100644 --- a/pkg/transform/name_resolver_test.go +++ b/pkg/transform/name_resolver_test.go @@ -56,7 +56,7 @@ func TestResolvePodsFromK8s(t *testing.T) { nr := NameResolver{ db: db, cache: expirable.NewLRU[string, string](10, nil, 5*time.Hour), - sources: resolverSources([]string{"dns", "k8s"}), + sources: resolverSources([]Source{SourceDNS, SourceK8s}), } name, namespace := nr.resolveFromK8s("10.0.0.1") @@ -127,7 +127,7 @@ func TestResolveServiceFromK8s(t *testing.T) { nr := NameResolver{ db: db, cache: expirable.NewLRU[string, string](10, nil, 5*time.Hour), - sources: resolverSources([]string{"dns", "k8s"}), + sources: resolverSources([]Source{SourceDNS, SourceK8s}), } name, namespace := nr.resolveFromK8s("10.0.0.1") @@ -279,7 +279,7 @@ func TestResolveNodesFromK8s(t *testing.T) { nr := NameResolver{ db: db, cache: expirable.NewLRU[string, string](10, nil, 5*time.Hour), - sources: resolverSources([]string{"dns", "k8s"}), + sources: resolverSources([]Source{SourceDNS, SourceK8s}), } name, namespace := nr.resolveFromK8s("10.0.0.1") @@ -350,7 +350,7 @@ func TestResolveClientFromHost(t *testing.T) { nr := NameResolver{ db: db, cache: expirable.NewLRU[string, string](10, nil, 5*time.Hour), - sources: resolverSources([]string{"k8s"}), + sources: resolverSources([]Source{SourceK8s}), } name, namespace := nr.resolveFromK8s("10.0.0.1") @@ -430,7 +430,7 @@ func TestResolveClientFromHost_K8sFQDN(t *testing.T) { nr := NameResolver{ db: db, cache: expirable.NewLRU[string, string](10, nil, 5*time.Hour), - sources: resolverSources([]string{"k8s"}), + sources: resolverSources([]Source{SourceK8s}), } // Create a client span representing an HTTP call to a K8s Service