Skip to content

Commit e505fd3

Browse files
committed
refactor: set kubernetes host alias in preKubeadmCommand
Workaround for kube-vip/kube-vip#692. Moving it to the kube-vip handler so that it can be applied to other providers.
1 parent 4cf43a3 commit e505fd3

File tree

6 files changed

+55
-25
lines changed

6 files changed

+55
-25
lines changed

charts/cluster-api-runtime-extensions-nutanix/defaultclusterclasses/nutanix-cluster-class.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ spec:
153153
- hostnamectl set-hostname "{{ ds.meta_data.hostname }}"
154154
- echo "::1 ipv6-localhost ipv6-loopback" >/etc/hosts
155155
- echo "127.0.0.1 localhost" >>/etc/hosts
156-
- echo "127.0.0.1 kubernetes" >>/etc/hosts
157156
- echo "127.0.0.1 {{ ds.meta_data.hostname }}" >> /etc/hosts
158157
useExperimentalRetryJoin: true
159158
verbosity: 10

hack/examples/bases/nutanix/clusterclass/kustomization.yaml.tmpl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,12 @@ patches:
6363
- target:
6464
kind: KubeadmControlPlaneTemplate
6565
patch: |-
66+
# deletes 'echo "127.0.0.1 kubernetes" >>/etc/hosts'
6667
- op: "remove"
67-
path: "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/6"
68+
path: "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/4"
69+
# deletes 'sed -i 's#path: /etc/kubernetes/admin.conf#path: ...'
70+
- op: "remove"
71+
path: "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands/5"
6872
- op: "remove"
6973
path: "/spec/template/spec/kubeadmConfigSpec/postKubeadmCommands/1"
7074

pkg/handlers/generic/mutation/controlplanevirtualip/inject_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,15 @@ var _ = Describe("Generate ControlPlane virtual IP patches", func() {
8282
Operation: "add",
8383
Path: "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands",
8484
ValueMatcher: gomega.ContainElements(
85-
"/bin/bash /etc/caren/configure-kube-vip.sh use-super-admin.conf",
85+
"/bin/bash /etc/caren/configure-for-kube-vip.sh set-host-aliases",
86+
"/bin/bash /etc/caren/configure-for-kube-vip.sh use-super-admin.conf",
8687
),
8788
},
8889
{
8990
Operation: "add",
9091
Path: "/spec/template/spec/kubeadmConfigSpec/postKubeadmCommands",
9192
ValueMatcher: gomega.ContainElements(
92-
"/bin/bash /etc/caren/configure-kube-vip.sh use-admin.conf",
93+
"/bin/bash /etc/caren/configure-for-kube-vip.sh use-admin.conf",
9394
),
9495
},
9596
},
@@ -151,7 +152,7 @@ var _ = Describe("Generate ControlPlane virtual IP patches", func() {
151152
gomega.HaveKey("content"),
152153
gomega.HaveKeyWithValue(
153154
"path",
154-
gomega.ContainSubstring("configure-kube-vip.sh"),
155+
gomega.ContainSubstring("configure-for-kube-vip.sh"),
155156
),
156157
gomega.HaveKey("permissions"),
157158
),
@@ -161,14 +162,15 @@ var _ = Describe("Generate ControlPlane virtual IP patches", func() {
161162
Operation: "add",
162163
Path: "/spec/template/spec/kubeadmConfigSpec/preKubeadmCommands",
163164
ValueMatcher: gomega.ContainElements(
164-
"/bin/bash /etc/caren/configure-kube-vip.sh use-super-admin.conf",
165+
"/bin/bash /etc/caren/configure-for-kube-vip.sh set-host-aliases",
166+
"/bin/bash /etc/caren/configure-for-kube-vip.sh use-super-admin.conf",
165167
),
166168
},
167169
{
168170
Operation: "add",
169171
Path: "/spec/template/spec/kubeadmConfigSpec/postKubeadmCommands",
170172
ValueMatcher: gomega.ContainElements(
171-
"/bin/bash /etc/caren/configure-kube-vip.sh use-admin.conf",
173+
"/bin/bash /etc/caren/configure-for-kube-vip.sh use-admin.conf",
172174
),
173175
},
174176
},

pkg/handlers/generic/mutation/controlplanevirtualip/providers/kubevip.go

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,22 @@ const (
2323
kubeVIPFilePath = "/etc/kubernetes/manifests/kube-vip.yaml"
2424
kubeVIPFilePermissions = "0600"
2525

26-
configureKubeVIPScriptPermissions = "0700"
26+
configureForKubeVIPScriptPermissions = "0700"
2727
)
2828

2929
var (
30-
configureKubeVIPScriptOnRemote = common.ConfigFilePathOnRemote(
31-
"configure-kube-vip.sh")
30+
configureForKubeVIPScriptOnRemote = common.ConfigFilePathOnRemote(
31+
"configure-for-kube-vip.sh")
3232

33-
configureKubeVIPScriptOnRemotePreKubeadmCommand = "/bin/bash " + configureKubeVIPScriptOnRemote + " use-super-admin.conf"
34-
configureKubeVIPScriptOnRemotePostKubeadmCommand = "/bin/bash " + configureKubeVIPScriptOnRemote + " use-admin.conf"
33+
configureForKubeVIPScriptOnRemotePreKubeadmCommand = "/bin/bash " + configureForKubeVIPScriptOnRemote + " use-super-admin.conf"
34+
configureForKubeVIPScriptOnRemotePostKubeadmCommand = "/bin/bash " + configureForKubeVIPScriptOnRemote + " use-admin.conf"
35+
36+
setHostAliasesScriptOnRemoteCommand = "/bin/bash " + configureForKubeVIPScriptOnRemote + " set-host-aliases"
3537
)
3638

3739
var (
38-
//go:embed templates/configure-kube-vip.sh
39-
configureKubeVIPScript []byte
40+
//go:embed templates/configure-for-kube-vip.sh
41+
configureForKubeVIPScript []byte
4042
)
4143

4244
type kubeVIPFromConfigMapProvider struct {
@@ -100,6 +102,16 @@ func (p *kubeVIPFromConfigMapProvider) GenerateFilesAndCommands(
100102
// after kubeadm has assigned it the necessary RBAC permissions.
101103
//
102104
// See https://github.com/kube-vip/kube-vip/issues/684
105+
//
106+
// There is also another issue introduced in Kubernetes 1.29.
107+
// If a cloud provider did not yet initialise the node's .status.addresses,
108+
// the code for creating the /etc/hosts file including the hostAliases does not get run.
109+
// The kube-vip static Pod runs before the cloud provider and will not be able to resolve the kubernetes DNS name.
110+
// To work around this:
111+
// 1. return a preKubeadmCommand to add kubernetes DNS name to /etc/hosts.
112+
//
113+
// See https://github.com/kube-vip/kube-vip/issues/692
114+
// See https://github.com/kubernetes/kubernetes/issues/122420#issuecomment-1864609518
103115
needCommands, err := needHackCommands(cluster)
104116
if err != nil {
105117
return nil, nil, nil, fmt.Errorf("failed to determine if kube-vip commands are needed: %w", err)
@@ -111,13 +123,17 @@ func (p *kubeVIPFromConfigMapProvider) GenerateFilesAndCommands(
111123
files = append(
112124
files,
113125
bootstrapv1.File{
114-
Content: string(configureKubeVIPScript),
115-
Path: configureKubeVIPScriptOnRemote,
116-
Permissions: configureKubeVIPScriptPermissions,
126+
Content: string(configureForKubeVIPScript),
127+
Path: configureForKubeVIPScriptOnRemote,
128+
Permissions: configureForKubeVIPScriptPermissions,
117129
},
118130
)
119-
preKubeadmCommands := []string{configureKubeVIPScriptOnRemotePreKubeadmCommand}
120-
postKubeadmCommands := []string{configureKubeVIPScriptOnRemotePostKubeadmCommand}
131+
132+
preKubeadmCommands := []string{
133+
setHostAliasesScriptOnRemoteCommand,
134+
configureForKubeVIPScriptOnRemotePreKubeadmCommand,
135+
}
136+
postKubeadmCommands := []string{configureForKubeVIPScriptOnRemotePostKubeadmCommand}
121137

122138
return files, preKubeadmCommands, postKubeadmCommands, nil
123139
}

pkg/handlers/generic/mutation/controlplanevirtualip/providers/kubevip_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,16 @@ func Test_GenerateFilesAndCommands(t *testing.T) {
6262
Permissions: kubeVIPFilePermissions,
6363
},
6464
{
65-
Content: string(configureKubeVIPScript),
66-
Path: configureKubeVIPScriptOnRemote,
67-
Permissions: configureKubeVIPScriptPermissions,
65+
Content: string(configureForKubeVIPScript),
66+
Path: configureForKubeVIPScriptOnRemote,
67+
Permissions: configureForKubeVIPScriptPermissions,
6868
},
6969
},
7070
expectedPreKubeadmCommands: []string{
71-
configureKubeVIPScriptOnRemotePreKubeadmCommand,
71+
setHostAliasesScriptOnRemoteCommand, configureForKubeVIPScriptOnRemotePreKubeadmCommand,
7272
},
7373
expectedPostKubeadmCommands: []string{
74-
configureKubeVIPScriptOnRemotePostKubeadmCommand,
74+
configureForKubeVIPScriptOnRemotePostKubeadmCommand,
7575
},
7676
},
7777
{

pkg/handlers/generic/mutation/controlplanevirtualip/providers/templates/configure-kube-vip.sh renamed to pkg/handlers/generic/mutation/controlplanevirtualip/providers/templates/configure-for-kube-vip.sh

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,13 @@ function use_admin_conf() {
2222
fi
2323
}
2424

25+
function set_host_aliases() {
26+
echo "127.0.0.1 kubernetes" >>/etc/hosts
27+
}
28+
2529
function print_usage {
2630
cat >&2 <<EOF
27-
Usage: ${SCRIPT_NAME} [use-super-admin.conf|use-admin.conf]
31+
Usage: ${SCRIPT_NAME} [use-super-admin.conf|use-admin.conf|set-host-aliases]
2832
EOF
2933
}
3034

@@ -41,6 +45,11 @@ function run_cmd() {
4145
shift
4246
break
4347
;;
48+
set-host-aliases)
49+
set_host_aliases
50+
shift
51+
break
52+
;;
4453
-h | --help)
4554
print_usage
4655
exit

0 commit comments

Comments
 (0)