@@ -58,6 +58,10 @@ type Manager struct {
5858
5959 manager mcmanager.Manager
6060 embeddedOIDC bool
61+
62+ // konnectorHostAliases are default host aliases injected into konnector
63+ // pods deployed via the UI flow (configured via --konnector-host-alias flag).
64+ konnectorHostAliases []corev1.HostAlias
6165}
6266
6367func NewKubernetesManager (
@@ -69,6 +73,7 @@ func NewKubernetesManager(
6973 externalTLSServerName string ,
7074 manager mcmanager.Manager ,
7175 embeddedOIDC bool ,
76+ konnectorHostAliases []corev1.HostAlias ,
7277) (* Manager , error ) {
7378 m := & Manager {
7479 namespacePrefix : namespacePrefix ,
@@ -79,8 +84,9 @@ func NewKubernetesManager(
7984 externalCA : externalCA ,
8085 externalTLSServerName : externalTLSServerName ,
8186
82- manager : manager ,
83- embeddedOIDC : embeddedOIDC ,
87+ manager : manager ,
88+ embeddedOIDC : embeddedOIDC ,
89+ konnectorHostAliases : konnectorHostAliases ,
8490 }
8591
8692 if err := m .manager .GetFieldIndexer ().IndexField (ctx , & corev1.Namespace {}, NamespacesByIdentity ,
@@ -465,6 +471,7 @@ func (m *Manager) ApplyToConsumer(
465471 providerKubeconfigData []byte ,
466472 bindingName string ,
467473 konnectorImage string ,
474+ overrideHostAliases []corev1.HostAlias ,
468475) (* ApplyToConsumerResult , error ) {
469476 logger := klog .FromContext (ctx ).WithValues ("bindingName" , bindingName )
470477
@@ -495,10 +502,17 @@ func (m *Manager) ApplyToConsumer(
495502 return nil , fmt .Errorf ("failed to create kube-bind namespace: %w" , err )
496503 }
497504
498- // 2. Resolve host aliases from the provider kubeconfig so the konnector
499- // can reach the provider API server (needed in Kind/Docker environments
500- // where the hostname resolves to localhost on the host but not in pods).
501- hostAliases := m .resolveProviderHostAliases (ctx , providerKubeconfigData )
505+ // 2. Build host aliases: start with request overrides (if any), fall back to
506+ // configured defaults, then merge any auto-resolved aliases from the provider kubeconfig.
507+ var hostAliases []corev1.HostAlias
508+ if len (overrideHostAliases ) > 0 {
509+ hostAliases = append (hostAliases , overrideHostAliases ... )
510+ } else {
511+ hostAliases = append (hostAliases , m .konnectorHostAliases ... )
512+ }
513+ if resolved := m .resolveProviderHostAliases (ctx , providerKubeconfigData ); len (resolved ) > 0 {
514+ hostAliases = mergeHostAliases (hostAliases , resolved )
515+ }
502516
503517 // 3. Deploy konnector (idempotent)
504518 konnectorDeployed , err := m .ensureKonnector (ctx , consumerClient , konnectorImage , hostAliases )
@@ -633,18 +647,24 @@ func (m *Manager) resolveProviderHostAliases(ctx context.Context, providerKubeco
633647// ensureKonnector deploys the konnector agent to the consumer cluster.
634648// Returns true if the konnector was newly deployed, false if it already existed.
635649func (m * Manager ) ensureKonnector (ctx context.Context , c client.Client , konnectorImage string , hostAliases []corev1.HostAlias ) (bool , error ) {
650+ manifests := kuberesources .NewKonnectorManifests (konnectorImage , hostAliases )
651+
636652 // Check if konnector deployment already exists
637653 existing := & appsv1.Deployment {}
638654 err := c .Get (ctx , types.NamespacedName {Name : kuberesources .KonnectorDeploymentName , Namespace : kuberesources .KonnectorNamespace }, existing )
639655 if err == nil {
640- return false , nil // already deployed
656+ // Update the deployment if host aliases changed
657+ existing .Spec .Template .Spec .HostAliases = hostAliases
658+ existing .Spec .Template .Spec .Containers [0 ].Image = konnectorImage
659+ if err := c .Update (ctx , existing ); err != nil {
660+ return false , fmt .Errorf ("failed to update konnector deployment: %w" , err )
661+ }
662+ return false , nil
641663 }
642664 if ! errors .IsNotFound (err ) {
643665 return false , fmt .Errorf ("failed to check for existing konnector: %w" , err )
644666 }
645667
646- manifests := kuberesources .NewKonnectorManifests (konnectorImage , hostAliases )
647-
648668 if err := c .Create (ctx , manifests .ServiceAccount ); err != nil && ! errors .IsAlreadyExists (err ) {
649669 return false , fmt .Errorf ("failed to create konnector service account: %w" , err )
650670 }
@@ -698,3 +718,24 @@ func (m *Manager) SeedDefaultCluster(ctx context.Context) error {
698718 logger .Info ("Default Cluster resource ensured" )
699719 return nil
700720}
721+
722+ // GetKonnectorHostAliases returns the configured default host aliases for konnector pods.
723+ func (m * Manager ) GetKonnectorHostAliases () []corev1.HostAlias {
724+ return m .konnectorHostAliases
725+ }
726+
727+ // mergeHostAliases merges additional host aliases into existing ones,
728+ // skipping entries whose IP is already present.
729+ func mergeHostAliases (existing , additional []corev1.HostAlias ) []corev1.HostAlias {
730+ seen := make (map [string ]bool , len (existing ))
731+ for _ , ha := range existing {
732+ seen [ha .IP ] = true
733+ }
734+ for _ , ha := range additional {
735+ if ! seen [ha .IP ] {
736+ existing = append (existing , ha )
737+ seen [ha .IP ] = true
738+ }
739+ }
740+ return existing
741+ }
0 commit comments