Skip to content

Commit b0b87b8

Browse files
authored
Merge pull request #603 from makhov/use-default-api-port-in-container
Always use default 6443 port for kube-apiserver in the container
2 parents 1177be6 + 8d67a47 commit b0b87b8

File tree

20 files changed

+121
-36
lines changed

20 files changed

+121
-36
lines changed

internal/controller/infrastructure/remote_machine_controller.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,9 @@ func (r *RemoteMachineController) getSSHKey(ctx context.Context, rm *infrastruct
372372
}
373373

374374
func (r *RemoteMachineController) getBootstrapData(ctx context.Context, machine *clusterv1.Machine) ([]byte, error) {
375+
if machine.Spec.Bootstrap.DataSecretName == nil {
376+
return nil, fmt.Errorf("wait for bootstap secret for the machine: %s", machine.Name)
377+
}
375378
secret := &v1.Secret{}
376379
key := client.ObjectKey{
377380
Namespace: machine.Namespace,

internal/controller/k0smotron.io/jointokenrequest_controller.go

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"encoding/base64"
2424
"fmt"
2525
"io"
26+
"net/url"
2627
"strings"
2728
"time"
2829

@@ -33,6 +34,7 @@ import (
3334
"k8s.io/client-go/kubernetes"
3435
"k8s.io/client-go/rest"
3536
"k8s.io/client-go/tools/clientcmd"
37+
"k8s.io/client-go/tools/clientcmd/api"
3638
ctrl "sigs.k8s.io/controller-runtime"
3739
"sigs.k8s.io/controller-runtime/pkg/client"
3840
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
@@ -113,12 +115,18 @@ func (r *JoinTokenRequestReconciler) Reconcile(ctx context.Context, req ctrl.Req
113115
return ctrl.Result{Requeue: true, RequeueAfter: time.Minute}, err
114116
}
115117

116-
if err := r.reconcileSecret(ctx, jtr, token); err != nil {
118+
newToken, newKubeconfig, err := ReplaceTokenPort(token, cluster)
119+
if err != nil {
120+
r.updateStatus(ctx, jtr, "Failed update token URL")
121+
return ctrl.Result{Requeue: true, RequeueAfter: time.Minute}, err
122+
}
123+
124+
if err := r.reconcileSecret(ctx, jtr, newToken); err != nil {
117125
r.updateStatus(ctx, jtr, "Failed creating secret")
118126
return ctrl.Result{Requeue: true, RequeueAfter: time.Minute}, err
119127
}
120128

121-
tokenID, err := getTokenID(token, jtr.Spec.Role)
129+
tokenID, err := getTokenID(newKubeconfig, jtr.Spec.Role)
122130
if err != nil {
123131
r.updateStatus(ctx, jtr, "Failed getting token id")
124132
return ctrl.Result{Requeue: true, RequeueAfter: time.Minute}, err
@@ -191,17 +199,46 @@ func (r *JoinTokenRequestReconciler) SetupWithManager(mgr ctrl.Manager) error {
191199
Complete(r)
192200
}
193201

194-
func getTokenID(token, role string) (string, error) {
202+
func replaceKubeconfigPort(in string, cluster km.Cluster) (string, *api.Config, error) {
203+
cfg, err := clientcmd.Load([]byte(in))
204+
if err != nil {
205+
return "", nil, err
206+
}
207+
208+
u, err := url.Parse(cfg.Clusters["k0s"].Server)
209+
if err != nil {
210+
return "", nil, err
211+
}
212+
parts := strings.Split(u.Host, ":")
213+
u.Host = fmt.Sprintf("%s:%d", parts[0], cluster.Spec.Service.APIPort)
214+
215+
cfg.Clusters["k0s"].Server = u.String()
216+
217+
b, err := clientcmd.Write(*cfg)
218+
if err != nil {
219+
return "", nil, err
220+
}
221+
222+
return string(b), cfg, nil
223+
}
224+
225+
func ReplaceTokenPort(token string, cluster km.Cluster) (string, *api.Config, error) {
195226
b, err := tokenDecode(token)
196227
if err != nil {
197-
return "", err
228+
return "", nil, err
198229
}
199230

200-
cfg, err := clientcmd.Load(b)
231+
updatedKubeconfig, cfg, err := replaceKubeconfigPort(string(b), cluster)
201232
if err != nil {
202-
return "", err
233+
return "", nil, err
203234
}
204235

236+
newToken, err := tokenEncode([]byte(updatedKubeconfig))
237+
238+
return newToken, cfg, err
239+
}
240+
241+
func getTokenID(cfg *api.Config, role string) (string, error) {
205242
var userName string
206243
switch role {
207244
case "controller":
@@ -233,3 +270,24 @@ func tokenDecode(token string) ([]byte, error) {
233270

234271
return output, err
235272
}
273+
274+
func tokenEncode(token []byte) (string, error) {
275+
in := bytes.NewReader(token)
276+
277+
var outBuf bytes.Buffer
278+
gz, err := gzip.NewWriterLevel(&outBuf, gzip.BestCompression)
279+
if err != nil {
280+
return "", err
281+
}
282+
283+
_, err = io.Copy(gz, in)
284+
gzErr := gz.Close()
285+
if err != nil {
286+
return "", err
287+
}
288+
if gzErr != nil {
289+
return "", gzErr
290+
}
291+
292+
return base64.StdEncoding.EncodeToString(outBuf.Bytes()), nil
293+
}

internal/controller/k0smotron.io/k0smotroncluster_configmap.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func getV1Beta1Spec(kmc *km.Cluster, sans []string) map[string]interface{} {
214214
v1beta1Spec := map[string]interface{}{
215215
"api": map[string]interface{}{
216216
"externalAddress": kmc.Spec.ExternalAddress,
217-
"port": kmc.Spec.Service.APIPort,
217+
"port": defaultKubeAPIPort,
218218
"sans": sans,
219219
},
220220
"konnectivity": map[string]interface{}{

internal/controller/k0smotron.io/k0smotroncluster_controller.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ import (
3636
km "github.com/k0sproject/k0smotron/api/k0smotron.io/v1beta1"
3737
)
3838

39+
const defaultKubeAPIPort = 6443
40+
3941
var patchOpts []client.PatchOption = []client.PatchOption{
4042
client.FieldOwner("k0smotron-operator"),
4143
client.ForceOwnership,

internal/controller/k0smotron.io/k0smotroncluster_kubeconfig.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ func (r *ClusterReconciler) reconcileKubeConfigSecret(ctx context.Context, kmc k
4242
return err
4343
}
4444

45+
output, _, err = replaceKubeconfigPort(output, kmc)
46+
if err != nil {
47+
return err
48+
}
49+
4550
logger.Info("Kubeconfig generated, creating the secret")
4651

4752
secret := v1.Secret{

internal/controller/k0smotron.io/k0smotroncluster_service.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ func (r *ClusterReconciler) generateService(kmc *km.Cluster) v1.Service {
4040
name = kmc.GetNodePortServiceName()
4141
ports = append(ports,
4242
v1.ServicePort{
43-
Port: int32(kmc.Spec.Service.APIPort),
44-
TargetPort: intstr.FromInt(kmc.Spec.Service.APIPort),
43+
Port: int32(defaultKubeAPIPort),
44+
TargetPort: intstr.FromInt(defaultKubeAPIPort),
4545
Name: "api",
4646
NodePort: int32(kmc.Spec.Service.APIPort),
4747
},
@@ -57,7 +57,7 @@ func (r *ClusterReconciler) generateService(kmc *km.Cluster) v1.Service {
5757
ports = append(ports,
5858
v1.ServicePort{
5959
Port: int32(kmc.Spec.Service.APIPort),
60-
TargetPort: intstr.FromInt(kmc.Spec.Service.APIPort),
60+
TargetPort: intstr.FromInt(defaultKubeAPIPort),
6161
Name: "api",
6262
},
6363
v1.ServicePort{
@@ -76,7 +76,7 @@ func (r *ClusterReconciler) generateService(kmc *km.Cluster) v1.Service {
7676
ports = append(ports,
7777
v1.ServicePort{
7878
Port: int32(kmc.Spec.Service.APIPort),
79-
TargetPort: intstr.FromInt(kmc.Spec.Service.APIPort),
79+
TargetPort: intstr.FromInt(defaultKubeAPIPort),
8080
Name: "api",
8181
},
8282
v1.ServicePort{

internal/controller/k0smotron.io/k0smotroncluster_statefulset.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func (r *ClusterReconciler) generateStatefulSet(kmc *km.Cluster) (apps.StatefulS
118118
{
119119
Name: "api",
120120
Protocol: v1.ProtocolTCP,
121-
ContainerPort: int32(kmc.Spec.Service.APIPort),
121+
ContainerPort: int32(defaultKubeAPIPort),
122122
},
123123
{
124124
Name: "konnectivity",

inttest/basic/basic_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,14 @@ func (s *BasicSuite) TestK0sGetsUp() {
9191
s.checkClusterStatus(s.Context(), rc)
9292

9393
s.T().Log("Generating k0smotron join token")
94-
token, err := util.GetJoinToken(kc, rc, "kmc-kmc-test-0", "kmc-test")
94+
token, err := util.GetJoinToken(kc, rc, "kmc-kmc-test-0", "kmc-test", 30443)
9595
s.Require().NoError(err)
9696

9797
s.T().Log("joining worker to k0smotron cluster")
9898
s.Require().NoError(s.RunWithToken(s.K0smotronNode(0), token))
9999

100100
s.T().Log("Starting portforward")
101-
fw, err := util.GetPortForwarder(rc, "kmc-kmc-test-0", "kmc-test", 30443)
101+
fw, err := util.GetPortForwarder(rc, "kmc-kmc-test-0", "kmc-test", 6443)
102102
s.Require().NoError(err)
103103

104104
go fw.Start(s.Require().NoError)

inttest/capi-docker-machinedeployment/capi_docker_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (s *CAPIDockerSuite) TestCAPIDocker() {
9090
s.Require().NoError(common.WaitForStatefulSet(s.ctx, s.client, "kmc-docker-md-test", "default"))
9191

9292
s.T().Log("Starting portforward")
93-
fw, err := util.GetPortForwarder(s.restConfig, "kmc-docker-md-test-0", "default", 30443)
93+
fw, err := util.GetPortForwarder(s.restConfig, "kmc-docker-md-test-0", "default", 6443)
9494
s.Require().NoError(err)
9595

9696
go fw.Start(s.Require().NoError)

inttest/capi-docker/capi_docker_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (s *CAPIDockerSuite) TestCAPIDocker() {
103103
s.checkControlPlaneStatus(s.ctx, s.restConfig)
104104

105105
s.T().Log("Starting portforward")
106-
fw, err := util.GetPortForwarder(s.restConfig, "kmc-docker-test-0", "default", 30443)
106+
fw, err := util.GetPortForwarder(s.restConfig, "kmc-docker-test-0", "default", 6443)
107107
s.Require().NoError(err)
108108

109109
go fw.Start(s.Require().NoError)

0 commit comments

Comments
 (0)