From 7ff3551696f6f752afd68ef2592e28f072ac7f4b Mon Sep 17 00:00:00 2001 From: Roman Kuznetsov Date: Sun, 23 Nov 2025 16:04:44 +0100 Subject: [PATCH 1/5] feat: add configurable cluster domain support Add CLUSTER_DOMAIN environment variable to allow customization of the Kubernetes cluster domain used in flagd-proxy service URIs. The default value remains "cluster.local" to maintain backward compatibility. This enables support for clusters using non-standard domain configurations. Signed-off-by: Roman Kuznetsov --- internal/common/flagdinjector/flagdinjector.go | 2 +- internal/common/flagdinjector/flagdinjector_test.go | 1 + internal/common/flagdproxy/flagdproxy.go | 2 ++ internal/common/flagdproxy/flagdproxy_test.go | 2 ++ internal/common/types/envconfig.go | 1 + 5 files changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/common/flagdinjector/flagdinjector.go b/internal/common/flagdinjector/flagdinjector.go index 67d3302c9..c9c759728 100644 --- a/internal/common/flagdinjector/flagdinjector.go +++ b/internal/common/flagdinjector/flagdinjector.go @@ -350,7 +350,7 @@ func (fi *FlagdContainerInjector) toFlagdProxyConfig(ctx context.Context, object return types.SourceConfig{ Provider: "grpc", Selector: fmt.Sprintf("core.openfeature.dev/%s/%s", ns, n), - URI: fmt.Sprintf("%s.%s.svc.cluster.local:%d", flagdproxy.FlagdProxyServiceName, fi.FlagdProxyConfig.Namespace, fi.FlagdProxyConfig.Port), + URI: fmt.Sprintf("%s.%s.svc.%s:%d", flagdproxy.FlagdProxyServiceName, fi.FlagdProxyConfig.Namespace, fi.FlagdProxyConfig.ClusterDomain, fi.FlagdProxyConfig.Port), }, nil } diff --git a/internal/common/flagdinjector/flagdinjector_test.go b/internal/common/flagdinjector/flagdinjector_test.go index c53865f82..3af4f2647 100644 --- a/internal/common/flagdinjector/flagdinjector_test.go +++ b/internal/common/flagdinjector/flagdinjector_test.go @@ -951,6 +951,7 @@ func getProxyConfig() *flagdproxy.FlagdProxyConfiguration { Image: testImage, Tag: testTag, Namespace: "my-namespace", + ClusterDomain: "cluster.local", } } diff --git a/internal/common/flagdproxy/flagdproxy.go b/internal/common/flagdproxy/flagdproxy.go index 3bbebc9e5..b9b0e02bb 100644 --- a/internal/common/flagdproxy/flagdproxy.go +++ b/internal/common/flagdproxy/flagdproxy.go @@ -46,6 +46,7 @@ type FlagdProxyConfiguration struct { ImagePullSecrets []string Labels map[string]string Annotations map[string]string + ClusterDomain string } func NewFlagdProxyConfiguration(env types.EnvConfig, imagePullSecrets []string, labels map[string]string, annotations map[string]string) *FlagdProxyConfiguration { @@ -61,6 +62,7 @@ func NewFlagdProxyConfiguration(env types.EnvConfig, imagePullSecrets []string, ImagePullSecrets: imagePullSecrets, Labels: labels, Annotations: annotations, + ClusterDomain: env.ClusterDomain, } } diff --git a/internal/common/flagdproxy/flagdproxy_test.go b/internal/common/flagdproxy/flagdproxy_test.go index 5124e7b44..c318e6987 100644 --- a/internal/common/flagdproxy/flagdproxy_test.go +++ b/internal/common/flagdproxy/flagdproxy_test.go @@ -205,6 +205,7 @@ func TestNewFlagdProxyConfiguration(t *testing.T) { FlagdProxyPort: 8015, FlagdProxyManagementPort: 8016, FlagdProxyReplicaCount: 123, + ClusterDomain: "cluster.local", }, pullSecrets, labels, annotations) require.NotNil(t, kpConfig) @@ -217,6 +218,7 @@ func TestNewFlagdProxyConfiguration(t *testing.T) { Replicas: 123, Labels: labels, Annotations: annotations, + ClusterDomain: "cluster.local", }, kpConfig) } diff --git a/internal/common/types/envconfig.go b/internal/common/types/envconfig.go index e96be50a6..9c2720241 100644 --- a/internal/common/types/envconfig.go +++ b/internal/common/types/envconfig.go @@ -10,6 +10,7 @@ type EnvConfig struct { FlagdProxyPort int `envconfig:"FLAGD_PROXY_PORT" default:"8015"` FlagdProxyManagementPort int `envconfig:"FLAGD_PROXY_MANAGEMENT_PORT" default:"8016"` FlagdProxyDebugLogging bool `envconfig:"FLAGD_PROXY_DEBUG_LOGGING" default:"false"` + ClusterDomain string `envconfig:"CLUSTER_DOMAIN" default:"cluster.local"` FlagdImage string `envconfig:"FLAGD_IMAGE" default:"ghcr.io/open-feature/flagd"` // renovate: datasource=github-tags depName=open-feature/flagd/flagd From d95d6c2d865864740824ab86abc81182f930c647 Mon Sep 17 00:00:00 2001 From: Roman Kuznetsov Date: Tue, 6 Jan 2026 17:21:57 +0100 Subject: [PATCH 2/5] fix(envconfig): rename CLUSTER_DOMAIN env var to FLAGD_CLUSTER_DOMAIN Prefix the cluster domain environment variable with FLAGD_ to maintain consistency with other flagd-related configuration options. Signed-off-by: Roman Kuznetsov --- internal/common/types/envconfig.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/common/types/envconfig.go b/internal/common/types/envconfig.go index 9c2720241..818156083 100644 --- a/internal/common/types/envconfig.go +++ b/internal/common/types/envconfig.go @@ -10,7 +10,7 @@ type EnvConfig struct { FlagdProxyPort int `envconfig:"FLAGD_PROXY_PORT" default:"8015"` FlagdProxyManagementPort int `envconfig:"FLAGD_PROXY_MANAGEMENT_PORT" default:"8016"` FlagdProxyDebugLogging bool `envconfig:"FLAGD_PROXY_DEBUG_LOGGING" default:"false"` - ClusterDomain string `envconfig:"CLUSTER_DOMAIN" default:"cluster.local"` + ClusterDomain string `envconfig:"FLAGD_CLUSTER_DOMAIN" default:"cluster.local"` FlagdImage string `envconfig:"FLAGD_IMAGE" default:"ghcr.io/open-feature/flagd"` // renovate: datasource=github-tags depName=open-feature/flagd/flagd From bac214710174526a9ffb718f0a8187fee64d4f9f Mon Sep 17 00:00:00 2001 From: Roman Kuznetsov Date: Tue, 6 Jan 2026 17:31:10 +0100 Subject: [PATCH 3/5] fix(envconfig): rename ClusterDomain field to FlagdClusterDomain Rename the struct field from ClusterDomain to FlagdClusterDomain to maintain consistency with its environment variable FLAGD_CLUSTER_DOMAIN and other flagd-related configuration options in the EnvConfig struct. Signed-off-by: Roman Kuznetsov --- internal/common/flagdinjector/flagdinjector.go | 2 +- .../common/flagdinjector/flagdinjector_test.go | 14 +++++++------- internal/common/flagdproxy/flagdproxy.go | 4 ++-- internal/common/flagdproxy/flagdproxy_test.go | 4 ++-- internal/common/types/envconfig.go | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/internal/common/flagdinjector/flagdinjector.go b/internal/common/flagdinjector/flagdinjector.go index c9c759728..81fc51e4a 100644 --- a/internal/common/flagdinjector/flagdinjector.go +++ b/internal/common/flagdinjector/flagdinjector.go @@ -350,7 +350,7 @@ func (fi *FlagdContainerInjector) toFlagdProxyConfig(ctx context.Context, object return types.SourceConfig{ Provider: "grpc", Selector: fmt.Sprintf("core.openfeature.dev/%s/%s", ns, n), - URI: fmt.Sprintf("%s.%s.svc.%s:%d", flagdproxy.FlagdProxyServiceName, fi.FlagdProxyConfig.Namespace, fi.FlagdProxyConfig.ClusterDomain, fi.FlagdProxyConfig.Port), + URI: fmt.Sprintf("%s.%s.svc.%s:%d", flagdproxy.FlagdProxyServiceName, fi.FlagdProxyConfig.Namespace, fi.FlagdProxyConfig.FlagdClusterDomain, fi.FlagdProxyConfig.Port), }, nil } diff --git a/internal/common/flagdinjector/flagdinjector_test.go b/internal/common/flagdinjector/flagdinjector_test.go index 3af4f2647..4bc7b79d8 100644 --- a/internal/common/flagdinjector/flagdinjector_test.go +++ b/internal/common/flagdinjector/flagdinjector_test.go @@ -945,13 +945,13 @@ func intPtr(i int64) *int64 { func getProxyConfig() *flagdproxy.FlagdProxyConfiguration { return &flagdproxy.FlagdProxyConfiguration{ - Port: 8013, - ManagementPort: 8014, - DebugLogging: false, - Image: testImage, - Tag: testTag, - Namespace: "my-namespace", - ClusterDomain: "cluster.local", + Port: 8013, + ManagementPort: 8014, + DebugLogging: false, + Image: testImage, + Tag: testTag, + Namespace: "my-namespace", + FlagdClusterDomain: "cluster.local", } } diff --git a/internal/common/flagdproxy/flagdproxy.go b/internal/common/flagdproxy/flagdproxy.go index b9b0e02bb..53a5b235f 100644 --- a/internal/common/flagdproxy/flagdproxy.go +++ b/internal/common/flagdproxy/flagdproxy.go @@ -46,7 +46,7 @@ type FlagdProxyConfiguration struct { ImagePullSecrets []string Labels map[string]string Annotations map[string]string - ClusterDomain string + FlagdClusterDomain string } func NewFlagdProxyConfiguration(env types.EnvConfig, imagePullSecrets []string, labels map[string]string, annotations map[string]string) *FlagdProxyConfiguration { @@ -62,7 +62,7 @@ func NewFlagdProxyConfiguration(env types.EnvConfig, imagePullSecrets []string, ImagePullSecrets: imagePullSecrets, Labels: labels, Annotations: annotations, - ClusterDomain: env.ClusterDomain, + FlagdClusterDomain: env.FlagdClusterDomain, } } diff --git a/internal/common/flagdproxy/flagdproxy_test.go b/internal/common/flagdproxy/flagdproxy_test.go index c318e6987..a0eb19a09 100644 --- a/internal/common/flagdproxy/flagdproxy_test.go +++ b/internal/common/flagdproxy/flagdproxy_test.go @@ -205,7 +205,7 @@ func TestNewFlagdProxyConfiguration(t *testing.T) { FlagdProxyPort: 8015, FlagdProxyManagementPort: 8016, FlagdProxyReplicaCount: 123, - ClusterDomain: "cluster.local", + FlagdClusterDomain: "cluster.local", }, pullSecrets, labels, annotations) require.NotNil(t, kpConfig) @@ -218,7 +218,7 @@ func TestNewFlagdProxyConfiguration(t *testing.T) { Replicas: 123, Labels: labels, Annotations: annotations, - ClusterDomain: "cluster.local", + FlagdClusterDomain: "cluster.local", }, kpConfig) } diff --git a/internal/common/types/envconfig.go b/internal/common/types/envconfig.go index 818156083..c3593bcc2 100644 --- a/internal/common/types/envconfig.go +++ b/internal/common/types/envconfig.go @@ -10,7 +10,7 @@ type EnvConfig struct { FlagdProxyPort int `envconfig:"FLAGD_PROXY_PORT" default:"8015"` FlagdProxyManagementPort int `envconfig:"FLAGD_PROXY_MANAGEMENT_PORT" default:"8016"` FlagdProxyDebugLogging bool `envconfig:"FLAGD_PROXY_DEBUG_LOGGING" default:"false"` - ClusterDomain string `envconfig:"FLAGD_CLUSTER_DOMAIN" default:"cluster.local"` + FlagdClusterDomain string `envconfig:"FLAGD_CLUSTER_DOMAIN" default:"cluster.local"` FlagdImage string `envconfig:"FLAGD_IMAGE" default:"ghcr.io/open-feature/flagd"` // renovate: datasource=github-tags depName=open-feature/flagd/flagd From 4661f36658ae19f4e28476fb9a2d32d3a73ccdb0 Mon Sep 17 00:00:00 2001 From: Roman Kuznetsov Date: Tue, 6 Jan 2026 17:34:59 +0100 Subject: [PATCH 4/5] fix: keep ClusterDomain field name in FlagdProxyConfiguration Revert the field rename in FlagdProxyConfiguration struct since its other fields (Port, Image, Tag, etc.) don't use the Flagd prefix - the prefix is already in the struct name itself. Only EnvConfig uses the FlagdClusterDomain naming to match other env config fields like FlagdProxyPort, FlagdProxyImage, etc. Signed-off-by: Roman Kuznetsov --- internal/common/flagdinjector/flagdinjector.go | 2 +- internal/common/flagdinjector/flagdinjector_test.go | 2 +- internal/common/flagdproxy/flagdproxy.go | 4 ++-- internal/common/flagdproxy/flagdproxy_test.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/common/flagdinjector/flagdinjector.go b/internal/common/flagdinjector/flagdinjector.go index 81fc51e4a..c9c759728 100644 --- a/internal/common/flagdinjector/flagdinjector.go +++ b/internal/common/flagdinjector/flagdinjector.go @@ -350,7 +350,7 @@ func (fi *FlagdContainerInjector) toFlagdProxyConfig(ctx context.Context, object return types.SourceConfig{ Provider: "grpc", Selector: fmt.Sprintf("core.openfeature.dev/%s/%s", ns, n), - URI: fmt.Sprintf("%s.%s.svc.%s:%d", flagdproxy.FlagdProxyServiceName, fi.FlagdProxyConfig.Namespace, fi.FlagdProxyConfig.FlagdClusterDomain, fi.FlagdProxyConfig.Port), + URI: fmt.Sprintf("%s.%s.svc.%s:%d", flagdproxy.FlagdProxyServiceName, fi.FlagdProxyConfig.Namespace, fi.FlagdProxyConfig.ClusterDomain, fi.FlagdProxyConfig.Port), }, nil } diff --git a/internal/common/flagdinjector/flagdinjector_test.go b/internal/common/flagdinjector/flagdinjector_test.go index 4bc7b79d8..cef07c557 100644 --- a/internal/common/flagdinjector/flagdinjector_test.go +++ b/internal/common/flagdinjector/flagdinjector_test.go @@ -951,7 +951,7 @@ func getProxyConfig() *flagdproxy.FlagdProxyConfiguration { Image: testImage, Tag: testTag, Namespace: "my-namespace", - FlagdClusterDomain: "cluster.local", + ClusterDomain: "cluster.local", } } diff --git a/internal/common/flagdproxy/flagdproxy.go b/internal/common/flagdproxy/flagdproxy.go index 53a5b235f..d0a44f03f 100644 --- a/internal/common/flagdproxy/flagdproxy.go +++ b/internal/common/flagdproxy/flagdproxy.go @@ -46,7 +46,7 @@ type FlagdProxyConfiguration struct { ImagePullSecrets []string Labels map[string]string Annotations map[string]string - FlagdClusterDomain string + ClusterDomain string } func NewFlagdProxyConfiguration(env types.EnvConfig, imagePullSecrets []string, labels map[string]string, annotations map[string]string) *FlagdProxyConfiguration { @@ -62,7 +62,7 @@ func NewFlagdProxyConfiguration(env types.EnvConfig, imagePullSecrets []string, ImagePullSecrets: imagePullSecrets, Labels: labels, Annotations: annotations, - FlagdClusterDomain: env.FlagdClusterDomain, + ClusterDomain: env.FlagdClusterDomain, } } diff --git a/internal/common/flagdproxy/flagdproxy_test.go b/internal/common/flagdproxy/flagdproxy_test.go index a0eb19a09..af92edd61 100644 --- a/internal/common/flagdproxy/flagdproxy_test.go +++ b/internal/common/flagdproxy/flagdproxy_test.go @@ -218,7 +218,7 @@ func TestNewFlagdProxyConfiguration(t *testing.T) { Replicas: 123, Labels: labels, Annotations: annotations, - FlagdClusterDomain: "cluster.local", + ClusterDomain: "cluster.local", }, kpConfig) } From 486dfc4b68b25c2065f6f4d4747ec07b061d0c5a Mon Sep 17 00:00:00 2001 From: Roman Kuznetsov Date: Tue, 6 Jan 2026 17:38:56 +0100 Subject: [PATCH 5/5] style: fix struct field alignment in test Signed-off-by: Roman Kuznetsov --- .../common/flagdinjector/flagdinjector_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/common/flagdinjector/flagdinjector_test.go b/internal/common/flagdinjector/flagdinjector_test.go index cef07c557..3af4f2647 100644 --- a/internal/common/flagdinjector/flagdinjector_test.go +++ b/internal/common/flagdinjector/flagdinjector_test.go @@ -945,13 +945,13 @@ func intPtr(i int64) *int64 { func getProxyConfig() *flagdproxy.FlagdProxyConfiguration { return &flagdproxy.FlagdProxyConfiguration{ - Port: 8013, - ManagementPort: 8014, - DebugLogging: false, - Image: testImage, - Tag: testTag, - Namespace: "my-namespace", - ClusterDomain: "cluster.local", + Port: 8013, + ManagementPort: 8014, + DebugLogging: false, + Image: testImage, + Tag: testTag, + Namespace: "my-namespace", + ClusterDomain: "cluster.local", } }