Skip to content

Commit 63b0964

Browse files
committed
fix: get workload cluster client from proper kubeconfig
Signed-off-by: apedriza <adripedriza@gmail.com>
1 parent f67271b commit 63b0964

17 files changed

+105
-45
lines changed

e2e/controlplane_conditions_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626

2727
cpv1beta1 "github.com/k0sproject/k0smotron/api/controlplane/v1beta1"
2828
e2eutil "github.com/k0sproject/k0smotron/e2e/util"
29-
"github.com/k0sproject/k0smotron/internal/util"
29+
"github.com/k0sproject/k0smotron/internal/controller/util"
3030
"github.com/stretchr/testify/require"
3131
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3232
"k8s.io/utils/ptr"

e2e/ingress_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ import (
3333
"sigs.k8s.io/controller-runtime/pkg/client"
3434

3535
e2eutil "github.com/k0sproject/k0smotron/e2e/util"
36+
"github.com/k0sproject/k0smotron/internal/controller/util"
3637
podexec "github.com/k0sproject/k0smotron/internal/exec"
37-
"github.com/k0sproject/k0smotron/internal/util"
3838
"github.com/stretchr/testify/require"
3939
corev1 "k8s.io/api/core/v1"
4040
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

e2e/k0smotron_upgrade_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727

2828
"github.com/k0sproject/k0smotron/e2e/mothership"
2929
e2eutil "github.com/k0sproject/k0smotron/e2e/util"
30-
"github.com/k0sproject/k0smotron/internal/util"
30+
"github.com/k0sproject/k0smotron/internal/controller/util"
3131
"github.com/stretchr/testify/require"
3232
"k8s.io/utils/ptr"
3333
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"

e2e/util/namespaces.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
"fmt"
2424
"path/filepath"
2525

26-
"github.com/k0sproject/k0smotron/internal/util"
26+
"github.com/k0sproject/k0smotron/internal/controller/util"
2727
corev1 "k8s.io/api/core/v1"
2828
"sigs.k8s.io/cluster-api/test/framework"
2929
capiframework "sigs.k8s.io/cluster-api/test/framework"

internal/controller/bootstrap/controlplane_bootstrap_controller.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ import (
4242
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
4343
bsutil "sigs.k8s.io/cluster-api/bootstrap/util"
4444
"sigs.k8s.io/cluster-api/controllers/external"
45-
"sigs.k8s.io/cluster-api/controllers/remote"
4645
capiutil "sigs.k8s.io/cluster-api/util"
4746
"sigs.k8s.io/cluster-api/util/annotations"
4847
"sigs.k8s.io/cluster-api/util/collections"
@@ -58,7 +57,6 @@ import (
5857
bootstrapv1 "github.com/k0sproject/k0smotron/api/bootstrap/v1beta1"
5958
"github.com/k0sproject/k0smotron/internal/controller/util"
6059
"github.com/k0sproject/k0smotron/internal/provisioner"
61-
kutil "github.com/k0sproject/k0smotron/internal/util"
6260
"github.com/k0sproject/version"
6361
)
6462

@@ -452,12 +450,12 @@ func (c *ControlPlaneController) genControlPlaneJoinFiles(ctx context.Context, s
452450
}
453451

454452
// Create the token using the child cluster client
455-
tokenID := kutil.RandomString(6)
456-
tokenSecret := kutil.RandomString(16)
453+
tokenID := util.RandomString(6)
454+
tokenSecret := util.RandomString(16)
457455
token := fmt.Sprintf("%s.%s", tokenID, tokenSecret)
458456
tokenKubeSecret := createTokenSecret(tokenID, tokenSecret)
459457

460-
chCS, err := remote.NewClusterClient(ctx, "k0smotron", c.Client, capiutil.ObjectKey(scope.Cluster))
458+
chCS, err := util.GetControllerRuntimeClient(ctx, c.Client, scope.Cluster, &scope.Config.Spec.Tunneling)
461459
if err != nil {
462460
log.Error(err, "Failed to getting child cluster client set")
463461
return nil, err
@@ -475,7 +473,7 @@ func (c *ControlPlaneController) genControlPlaneJoinFiles(ctx context.Context, s
475473
return nil, err
476474
}
477475

478-
joinToken, err := kutil.CreateK0sJoinToken(ca.KeyPair.Cert, token, host, "controller-bootstrap")
476+
joinToken, err := util.CreateK0sJoinToken(ca.KeyPair.Cert, token, host, "controller-bootstrap")
479477

480478
files = append(files, provisioner.File{
481479
Path: scope.Config.Spec.GetJoinTokenPath(),

internal/controller/bootstrap/providerid_controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"sigs.k8s.io/controller-runtime/pkg/controller"
2121
"sigs.k8s.io/controller-runtime/pkg/log"
2222

23+
bootstrapv1beta1 "github.com/k0sproject/k0smotron/api/bootstrap/v1beta1"
2324
k0smoutil "github.com/k0sproject/k0smotron/internal/controller/util"
2425
)
2526

@@ -64,7 +65,7 @@ func (p *ProviderIDController) Reconcile(ctx context.Context, req ctrl.Request)
6465
return ctrl.Result{}, fmt.Errorf("can't get cluster %s/%s: %w", machine.Namespace, machine.Spec.ClusterName, err)
6566
}
6667

67-
childClient, err := k0smoutil.GetKubeClient(context.Background(), p.Client, cluster)
68+
childClient, err := k0smoutil.GetKubeClientSet(context.Background(), p.Client, cluster, bootstrapv1beta1.TunnelingSpec{})
6869
if err != nil {
6970
return ctrl.Result{}, fmt.Errorf("can't get kube client for cluster %s/%s: %w. may not be created yet", machine.Namespace, machine.Spec.ClusterName, err)
7071
}

internal/controller/bootstrap/worker_bootstrap_controller.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import (
3434
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
3535
bsutil "sigs.k8s.io/cluster-api/bootstrap/util"
3636
"sigs.k8s.io/cluster-api/controllers/external"
37-
"sigs.k8s.io/cluster-api/controllers/remote"
3837
capiutil "sigs.k8s.io/cluster-api/util"
3938
"sigs.k8s.io/cluster-api/util/annotations"
4039
"sigs.k8s.io/cluster-api/util/conditions"
@@ -51,7 +50,6 @@ import (
5150
km "github.com/k0sproject/k0smotron/api/k0smotron.io/v1beta1"
5251
"github.com/k0sproject/k0smotron/internal/controller/util"
5352
"github.com/k0sproject/k0smotron/internal/provisioner"
54-
kutil "github.com/k0sproject/k0smotron/internal/util"
5553
)
5654

5755
const (
@@ -355,15 +353,15 @@ func (r *Controller) getK0sToken(ctx context.Context, scope *Scope) (string, err
355353
client := r.workloadClusterClient
356354
if client == nil {
357355
var err error
358-
client, err = remote.NewClusterClient(ctx, "k0smotron", r.Client, capiutil.ObjectKey(scope.Cluster))
356+
client, err = util.GetControllerRuntimeClient(ctx, r.Client, scope.Cluster, nil)
359357
if err != nil {
360358
return "", fmt.Errorf("failed to create child cluster client: %w", err)
361359
}
362360
}
363361

364362
// Create the token using the child cluster client
365-
tokenID := kutil.RandomString(6)
366-
tokenSecret := kutil.RandomString(16)
363+
tokenID := util.RandomString(6)
364+
tokenSecret := util.RandomString(16)
367365
token := fmt.Sprintf("%s.%s", tokenID, tokenSecret)
368366
if err := client.Create(ctx, &corev1.Secret{
369367
ObjectMeta: metav1.ObjectMeta{
@@ -400,7 +398,7 @@ func (r *Controller) getK0sToken(ctx context.Context, scope *Scope) (string, err
400398
joinURL = fmt.Sprintf("https://%s:%d", scope.ingressSpec.APIHost, scope.ingressSpec.Port)
401399
}
402400

403-
joinToken, err := kutil.CreateK0sJoinToken(ca.KeyPair.Cert, token, joinURL, "kubelet-bootstrap")
401+
joinToken, err := util.CreateK0sJoinToken(ca.KeyPair.Cert, token, joinURL, "kubelet-bootstrap")
404402
if err != nil {
405403
return "", fmt.Errorf("failed to create join token: %w", err)
406404
}

internal/controller/controlplane/helper.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,8 @@ func (c *K0sController) markChildControlNodeToLeave(ctx context.Context, name st
507507
return nil
508508
}
509509

510-
func (c *K0sController) deleteOldControlNodes(ctx context.Context, cluster *clusterv1.Cluster) error {
511-
kubeClient, err := c.getKubeClient(ctx, cluster)
510+
func (c *K0sController) deleteOldControlNodes(ctx context.Context, cluster *clusterv1.Cluster, kcp *cpv1beta1.K0sControlPlane) error {
511+
kubeClient, err := c.getKubeClient(ctx, cluster, kcp.Spec.K0sConfigSpec.Tunneling)
512512
if err != nil {
513513
return fmt.Errorf("error getting kube client: %w", err)
514514
}

internal/controller/controlplane/k0s_controlplane_controller.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ import (
5959

6060
bootstrapv1 "github.com/k0sproject/k0smotron/api/bootstrap/v1beta1"
6161
cpv1beta1 "github.com/k0sproject/k0smotron/api/controlplane/v1beta1"
62-
kutil "github.com/k0sproject/k0smotron/internal/util"
6362
)
6463

6564
const (
@@ -448,7 +447,7 @@ func (c *K0sController) reconcileMachines(ctx context.Context, cluster *clusterv
448447
go func() {
449448
// The k8s API of the workload cluster must be available to make requests.
450449
if kcp.Status.Ready {
451-
err = c.deleteOldControlNodes(ctx, cluster)
450+
err = c.deleteOldControlNodes(ctx, cluster, kcp)
452451
if err != nil {
453452
logger.Error(err, "Error deleting old control nodes")
454453
}
@@ -467,7 +466,7 @@ func (c *K0sController) reconcileMachines(ctx context.Context, cluster *clusterv
467466
}
468467
}
469468
} else {
470-
kubeClient, err := c.getKubeClient(ctx, cluster)
469+
kubeClient, err := c.getKubeClient(ctx, cluster, kcp.Spec.K0sConfigSpec.Tunneling)
471470
if err != nil {
472471
return fmt.Errorf("error getting cluster client set for machine update: %w", err)
473472
}
@@ -485,7 +484,7 @@ func (c *K0sController) reconcileMachines(ctx context.Context, cluster *clusterv
485484
tooManyMachines ||
486485
isRecreateDeleteFirstPossible(kcp, clusterHasChanged, machineNamesToDelete, desiredMachines) {
487486
m := activeMachines.Newest().Name
488-
err := c.checkMachineIsReady(ctx, m, cluster)
487+
err := c.checkMachineIsReady(ctx, m, cluster, kcp)
489488
if err != nil {
490489
logger.Error(err, "Error checking machine left", "machine", m)
491490
return err
@@ -527,7 +526,7 @@ func (c *K0sController) reconcileMachines(ctx context.Context, cluster *clusterv
527526
// machine to be ready It's not slowing down the process overall, as we wait to the first machine anyway to
528527
// create join tokens.
529528
if activeMachines.Len() >= 1 {
530-
err := c.checkMachineIsReady(ctx, activeMachines.Newest().Name, cluster)
529+
err := c.checkMachineIsReady(ctx, activeMachines.Newest().Name, cluster, kcp)
531530
if err != nil {
532531
return err
533532
}
@@ -590,7 +589,7 @@ func (c *K0sController) deleteK0sNodeResources(ctx context.Context, cluster *clu
590589
logger := log.FromContext(ctx)
591590

592591
if kcp.Status.Ready {
593-
kubeClient, err := c.getKubeClient(ctx, cluster)
592+
kubeClient, err := c.getKubeClient(ctx, cluster, kcp.Spec.K0sConfigSpec.Tunneling)
594593
if err != nil {
595594
return fmt.Errorf("error getting cluster client set for deletion: %w", err)
596595
}
@@ -656,8 +655,8 @@ func (c *K0sController) createBootstrapConfig(ctx context.Context, name string,
656655
return nil
657656
}
658657

659-
func (c *K0sController) checkMachineIsReady(ctx context.Context, machineName string, cluster *clusterv1.Cluster) error {
660-
kubeClient, err := c.getKubeClient(ctx, cluster)
658+
func (c *K0sController) checkMachineIsReady(ctx context.Context, machineName string, cluster *clusterv1.Cluster, kcp *cpv1beta1.K0sControlPlane) error {
659+
kubeClient, err := c.getKubeClient(ctx, cluster, kcp.Spec.K0sConfigSpec.Tunneling)
661660
if err != nil {
662661
return fmt.Errorf("error getting cluster client set for machine update: %w", err)
663662
}
@@ -727,7 +726,7 @@ func (c *K0sController) reconcileConfig(ctx context.Context, cluster *clusterv1.
727726
}
728727

729728
// Reconcile the dynamic config
730-
dErr := kutil.ReconcileDynamicConfig(ctx, cluster, c.Client, *kcp.Spec.K0sConfigSpec.K0s.DeepCopy())
729+
dErr := util.ReconcileDynamicConfig(ctx, cluster, c.Client, *kcp.Spec.K0sConfigSpec.K0s.DeepCopy(), &kcp.Spec.K0sConfigSpec.Tunneling)
731730
if dErr != nil {
732731
// Don't return error from dynamic config reconciliation, as it may not be created yet
733732
log.Error(fmt.Errorf("failed to reconcile dynamic config, kubeconfig may not be available yet: %w", dErr), "Failed to reconcile dynamic config")

internal/controller/controlplane/k0smotron_controlplane_controller.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import (
3434
"k8s.io/client-go/kubernetes"
3535
"k8s.io/client-go/rest"
3636
"sigs.k8s.io/cluster-api/controllers/external"
37-
"sigs.k8s.io/cluster-api/controllers/remote"
3837
"sigs.k8s.io/controller-runtime/pkg/controller"
3938

4039
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -567,7 +566,7 @@ func (c *K0smotronController) computeAvailability(ctx context.Context, cluster *
567566
logger.Info("Pinging the workload cluster API")
568567

569568
// Get the CAPI cluster accessor
570-
client, err := remote.NewClusterClient(ctx, "k0smotron", c.Client, capiutil.ObjectKey(cluster))
569+
client, err := util.GetControllerRuntimeClient(ctx, c.Client, cluster, nil)
571570
if err != nil {
572571
logger.Info("Failed to create cluster client", "error", err)
573572
conditions.Set(kcp, metav1.Condition{

0 commit comments

Comments
 (0)