From f3c7f952ef963448ed83f9c6cbff05cb2fa279b9 Mon Sep 17 00:00:00 2001 From: Ahree Hong Date: Tue, 7 Feb 2023 14:26:36 -0800 Subject: [PATCH 26/34] set hostname for BR nodes Signed-off-by: Ahree Hong --- .../internal/bottlerocket/bootstrap.go | 9 +- .../internal/bottlerocket/bootstrap_test.go | 90 ++++++++++++++++++- .../internal/bottlerocket/bottlerocket.go | 3 + .../controllers/kubeadmconfig_controller.go | 13 +++ 4 files changed, 108 insertions(+), 7 deletions(-) diff --git a/bootstrap/kubeadm/internal/bottlerocket/bootstrap.go b/bootstrap/kubeadm/internal/bottlerocket/bootstrap.go index cd70d69a8..9cf4a909a 100644 --- a/bootstrap/kubeadm/internal/bottlerocket/bootstrap.go +++ b/bootstrap/kubeadm/internal/bottlerocket/bootstrap.go @@ -55,12 +55,14 @@ user-data = "{{.UserData}}" {{- end -}} {{- end -}} ` - networkInitTemplate = `{{ define "networkInitSettings" -}} [settings.network] +hostname = "{{.Hostname}}" +{{- if (ne .HTTPSProxyEndpoint "")}} https-proxy = "{{.HTTPSProxyEndpoint}}" no-proxy = [{{stringsJoin .NoProxyEndpoints "," }}] {{- end -}} +{{- end -}} ` registryMirrorTemplate = `{{ define "registryMirrorSettings" -}} [settings.container-registry.mirrors] @@ -108,13 +110,12 @@ time-servers = [{{stringsJoin .NTPServers ", " }}] {{template "kubernetesInitSettings" .}} +{{template "networkInitSettings" .}} + {{- if .BootstrapContainers}} {{template "bootstrapContainerSlice" .}} {{- end -}} -{{- if (ne .HTTPSProxyEndpoint "")}} -{{template "networkInitSettings" .}} -{{- end -}} {{- if (ne .RegistryMirrorEndpoint "")}} {{template "registryMirrorSettings" .}} diff --git a/bootstrap/kubeadm/internal/bottlerocket/bootstrap_test.go b/bootstrap/kubeadm/internal/bottlerocket/bootstrap_test.go index 223f49e5a..dd0422007 100644 --- a/bootstrap/kubeadm/internal/bottlerocket/bootstrap_test.go +++ b/bootstrap/kubeadm/internal/bottlerocket/bootstrap_test.go @@ -28,13 +28,15 @@ server-tls-bootstrap = false pod-infra-container-image = "PAUSE" provider-id = "PROVIDERID" +[settings.network] +hostname = "" +https-proxy = "PROXY" +no-proxy = [] + [settings.bootstrap-containers.BOOTSTRAP] essential = false mode = "MODE" user-data = "B64USERDATA" -[settings.network] -https-proxy = "PROXY" -no-proxy = [] [settings.container-registry.mirrors] "public.ecr.aws" = ["https://REGISTRYENDPOINT"] [settings.pki.registry-mirror-ca] @@ -74,13 +76,54 @@ server-tls-bootstrap = false pod-infra-container-image = "PAUSE" provider-id = "PROVIDERID" +[settings.network] +hostname = "" +https-proxy = "PROXY" +no-proxy = [] + [settings.bootstrap-containers.BOOTSTRAP] essential = false mode = "MODE" user-data = "B64USERDATA" +[settings.container-registry.mirrors] +"public.ecr.aws" = ["https://REGISTRYENDPOINT"] +[settings.pki.registry-mirror-ca] +data = "REGISTRYCA" +trusted=true +[settings.kubernetes.node-labels] +KEY=VAR +[settings.kubernetes.node-taints] +KEY=VAR` + +const userDataWithHostname = ` +[settings.host-containers.admin] +enabled = true +superpowered = true +source = "REPO:TAG" +user-data = "B64USERDATA" +[settings.host-containers.kubeadm-bootstrap] +enabled = true +superpowered = true +source = "REPO:TAG" +user-data = "B64USERDATA" + +[settings.kubernetes] +cluster-domain = "cluster.local" +standalone-mode = true +authentication-mode = "tls" +server-tls-bootstrap = false +pod-infra-container-image = "PAUSE" +provider-id = "PROVIDERID" + [settings.network] +hostname = "hostname" https-proxy = "PROXY" no-proxy = [] + +[settings.bootstrap-containers.BOOTSTRAP] +essential = false +mode = "MODE" +user-data = "B64USERDATA" [settings.container-registry.mirrors] "public.ecr.aws" = ["https://REGISTRYENDPOINT"] [settings.pki.registry-mirror-ca] @@ -183,6 +226,47 @@ func TestGenerateUserData(t *testing.T) { }, output: userDataNoAdminImage, }, + { + name: "with hostname settings", + input: &BottlerocketSettingsInput{ + PauseContainerSource: "PAUSE", + HTTPSProxyEndpoint: "PROXY", + RegistryMirrorEndpoint: "REGISTRYENDPOINT", + RegistryMirrorCACert: "REGISTRYCA", + NodeLabels: "KEY=VAR", + Taints: "KEY=VAR", + ProviderId: "PROVIDERID", + Hostname: "hostname", + HostContainers: []bootstrapv1.BottlerocketHostContainer{ + { + Name: "admin", + Superpowered: true, + ImageMeta: bootstrapv1.ImageMeta{ + ImageRepository: "REPO", + ImageTag: "TAG", + }, + UserData: "B64USERDATA", + }, + { + Name: "kubeadm-bootstrap", + Superpowered: true, + ImageMeta: bootstrapv1.ImageMeta{ + ImageRepository: "REPO", + ImageTag: "TAG", + }, + UserData: "B64USERDATA", + }, + }, + BootstrapContainers: []bootstrapv1.BottlerocketBootstrapContainer{ + { + Name: "BOOTSTRAP", + Mode: "MODE", + UserData: "B64USERDATA", + }, + }, + }, + output: userDataWithHostname, + }, } for _, testcase := range testcases { t.Run(testcase.name, func(t *testing.T) { diff --git a/bootstrap/kubeadm/internal/bottlerocket/bottlerocket.go b/bootstrap/kubeadm/internal/bottlerocket/bottlerocket.go index 05e441723..e2611c1ca 100644 --- a/bootstrap/kubeadm/internal/bottlerocket/bottlerocket.go +++ b/bootstrap/kubeadm/internal/bottlerocket/bottlerocket.go @@ -34,6 +34,7 @@ type BottlerocketConfig struct { BottlerocketCustomHostContainers []bootstrapv1.BottlerocketHostContainer BottlerocketCustomBootstrapContainers []bootstrapv1.BottlerocketBootstrapContainer NTPServers []string + Hostname string RegistryMirrorCredentials } @@ -49,6 +50,7 @@ type BottlerocketSettingsInput struct { NTPServers []string Taints string ProviderId string + Hostname string HostContainers []bootstrapv1.BottlerocketHostContainer BootstrapContainers []bootstrapv1.BottlerocketBootstrapContainer } @@ -207,6 +209,7 @@ func getBottlerocketNodeUserData(bootstrapContainerUserData []byte, users []boot NodeLabels: parseNodeLabels(config.KubeletExtraArgs["node-labels"]), // empty string if it does not exist Taints: parseTaints(config.Taints), // empty string if it does not exist ProviderId: config.KubeletExtraArgs["provider-id"], + Hostname: config.Hostname, HostContainers: hostContainers, BootstrapContainers: config.BottlerocketCustomBootstrapContainers, } diff --git a/bootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.go b/bootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.go index fbf7b634f..448fbb70b 100644 --- a/bootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.go +++ b/bootstrap/kubeadm/internal/controllers/kubeadmconfig_controller.go @@ -476,6 +476,7 @@ func (r *KubeadmConfigReconciler) handleClusterNotInitialized(ctx context.Contex BottlerocketControl: scope.Config.Spec.ClusterConfiguration.BottlerocketControl, BottlerocketCustomHostContainers: scope.Config.Spec.ClusterConfiguration.BottlerocketHostContainers, BottlerocketCustomBootstrapContainers: scope.Config.Spec.ClusterConfiguration.BottlerocketCustomBootstrapContainers, + Hostname: machine.Name, } if scope.Config.Spec.ClusterConfiguration.Proxy.HTTPSProxy != "" { bottlerocketConfig.ProxyConfiguration = scope.Config.Spec.ClusterConfiguration.Proxy @@ -620,6 +621,11 @@ func (r *KubeadmConfigReconciler) joinWorker(ctx context.Context, scope *Scope) return res, nil } + machine := &clusterv1.Machine{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(scope.ConfigOwner.Object, machine); err != nil { + return ctrl.Result{}, errors.Wrapf(err, "cannot convert %s to Machine", scope.ConfigOwner.GetKind()) + } + kubernetesVersion := scope.ConfigOwner.KubernetesVersion() parsedVersion, err := semver.ParseTolerant(kubernetesVersion) if err != nil { @@ -692,6 +698,7 @@ func (r *KubeadmConfigReconciler) joinWorker(ctx context.Context, scope *Scope) BottlerocketControl: scope.Config.Spec.JoinConfiguration.BottlerocketControl, BottlerocketCustomHostContainers: scope.Config.Spec.JoinConfiguration.BottlerocketCustomHostContainers, BottlerocketCustomBootstrapContainers: scope.Config.Spec.JoinConfiguration.BottlerocketCustomBootstrapContainers, + Hostname: machine.Name, } if scope.Config.Spec.JoinConfiguration.Proxy.HTTPSProxy != "" { bottlerocketConfig.ProxyConfiguration = scope.Config.Spec.JoinConfiguration.Proxy @@ -747,6 +754,11 @@ func (r *KubeadmConfigReconciler) joinControlplane(ctx context.Context, scope *S scope.Config.Spec.JoinConfiguration.ControlPlane = &bootstrapv1.JoinControlPlane{} } + machine := &clusterv1.Machine{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(scope.ConfigOwner.Object, machine); err != nil { + return ctrl.Result{}, errors.Wrapf(err, "cannot convert %s to Machine", scope.ConfigOwner.GetKind()) + } + certificates := secret.NewControlPlaneJoinCerts(scope.Config.Spec.ClusterConfiguration) err := certificates.Lookup( ctx, @@ -831,6 +843,7 @@ func (r *KubeadmConfigReconciler) joinControlplane(ctx context.Context, scope *S BottlerocketControl: scope.Config.Spec.JoinConfiguration.BottlerocketControl, BottlerocketCustomHostContainers: scope.Config.Spec.JoinConfiguration.BottlerocketCustomHostContainers, BottlerocketCustomBootstrapContainers: scope.Config.Spec.JoinConfiguration.BottlerocketCustomBootstrapContainers, + Hostname: machine.Name, } if scope.Config.Spec.JoinConfiguration.Proxy.HTTPSProxy != "" { bottlerocketConfig.ProxyConfiguration = scope.Config.Spec.JoinConfiguration.Proxy -- 2.40.0