Skip to content

Commit 31c9a59

Browse files
author
Ole Markus With
committed
Make use of kubelet service certificate
1 parent a310282 commit 31c9a59

File tree

6 files changed

+66
-4
lines changed

6 files changed

+66
-4
lines changed

cmd/kops-controller/pkg/server/server.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,11 @@ func (s *Server) issueCert(name string, pubKey string, id *fi.VerifyResult, vali
175175
CommonName: fmt.Sprintf("system:node:%s", id.NodeName),
176176
Organization: []string{rbac.NodesGroup},
177177
}
178+
case "kubelet-server":
179+
issueReq.Subject = pkix.Name{
180+
CommonName: id.NodeName,
181+
}
182+
issueReq.Type = "server"
178183
case "kube-proxy":
179184
issueReq.Subject = pkix.Name{
180185
CommonName: rbac.KubeProxy,

nodeup/pkg/model/kubelet.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ var _ fi.ModelBuilder = &KubeletBuilder{}
5656

5757
// Build is responsible for building the kubelet configuration
5858
func (b *KubeletBuilder) Build(c *fi.ModelBuilderContext) error {
59+
60+
err := b.buildKubeletServingCertificate(c)
61+
if err != nil {
62+
return fmt.Errorf("error building kubelet server cert: %v", err)
63+
}
64+
5965
kubeletConfig, err := b.buildKubeletConfig()
6066
if err != nil {
6167
return fmt.Errorf("error building kubelet config: %v", err)
@@ -226,6 +232,11 @@ func (b *KubeletBuilder) buildSystemdEnvironmentFile(kubeletConfig *kops.Kubelet
226232
}
227233
}
228234

235+
if b.UseKopsControllerForNodeBootstrap() {
236+
flags += " --tls-cert-file " + b.PathSrvKubernetes() + "/kubelet-server.crt"
237+
flags += " --tls-private-key-file " + b.PathSrvKubernetes() + "/kubelet-server.key"
238+
}
239+
229240
sysconfig := "DAEMON_ARGS=\"" + flags + "\"\n"
230241
// Makes kubelet read /root/.docker/config.json properly
231242
sysconfig = sysconfig + "HOME=\"/root" + "\"\n"
@@ -538,3 +549,49 @@ func (b *KubeletBuilder) buildMasterKubeletKubeconfig(c *fi.ModelBuilderContext)
538549

539550
return b.BuildIssuedKubeconfig("kubelet", certName, c), nil
540551
}
552+
553+
func (b *KubeletBuilder) buildKubeletServingCertificate(c *fi.ModelBuilderContext) error {
554+
555+
if b.UseKopsControllerForNodeBootstrap() {
556+
name := "kubelet-server"
557+
dir := b.PathSrvKubernetes()
558+
signer := fi.CertificateIDCA
559+
560+
nodeName, err := b.NodeName()
561+
if err != nil {
562+
return err
563+
}
564+
565+
if !b.IsMaster {
566+
cert, key := b.GetBootstrapCert(name)
567+
568+
c.AddTask(&nodetasks.File{
569+
Path: filepath.Join(dir, name+".crt"),
570+
Contents: cert,
571+
Type: nodetasks.FileType_File,
572+
Mode: fi.String("0644"),
573+
})
574+
575+
c.AddTask(&nodetasks.File{
576+
Path: filepath.Join(dir, name+".key"),
577+
Contents: key,
578+
Type: nodetasks.FileType_File,
579+
Mode: fi.String("0400"),
580+
})
581+
582+
} else {
583+
issueCert := &nodetasks.IssueCert{
584+
Name: name,
585+
Signer: signer,
586+
Type: "server",
587+
Subject: nodetasks.PKIXName{
588+
CommonName: nodeName,
589+
},
590+
}
591+
c.AddTask(issueCert)
592+
return issueCert.AddFileTasks(c, dir, name, "", nil)
593+
}
594+
}
595+
return nil
596+
597+
}

upup/pkg/fi/cloudup/template_functions.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ func (tf *TemplateFunctions) KopsControllerConfig() (string, error) {
392392
}
393393

394394
if tf.UseKopsControllerForNodeBootstrap() {
395-
certNames := []string{"kubelet"}
395+
certNames := []string{"kubelet", "kubelet-server"}
396396
signingCAs := []string{fi.CertificateIDCA}
397397
if apiModel.UseCiliumEtcd(cluster) {
398398
certNames = append(certNames, "etcd-client-cilium")

upup/pkg/fi/cloudup/tests/bootstrapchannelbuilder/awsiamauthenticator/manifest.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ spec:
77
- id: k8s-1.16
88
kubernetesVersion: '>=1.16.0-alpha.0'
99
manifest: kops-controller.addons.k8s.io/k8s-1.16.yaml
10-
manifestHash: 95b29a87c7e7204fd7f36716d7f9f3187985c2af
10+
manifestHash: 70b6d9eaba39f1ead46355e682e747257eb52b49
1111
name: kops-controller.addons.k8s.io
1212
selector:
1313
k8s-addon: kops-controller.addons.k8s.io

upup/pkg/fi/cloudup/tests/bootstrapchannelbuilder/simple/kops-controller.addons.k8s.io-k8s-1.16.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apiVersion: v1
22
data:
33
config.yaml: |
4-
{"cloud":"aws","configBase":"memfs://clusters.example.com/minimal.example.com","server":{"Listen":":3988","provider":{"aws":{"nodesRoles":["kops-custom-node-role","nodes.minimal.example.com"],"Region":"us-east-1"}},"serverKeyPath":"/etc/kubernetes/kops-controller/pki/kops-controller.key","serverCertificatePath":"/etc/kubernetes/kops-controller/pki/kops-controller.crt","caBasePath":"/etc/kubernetes/kops-controller/pki","signingCAs":["ca"],"certNames":["kubelet","kube-proxy"]}}
4+
{"cloud":"aws","configBase":"memfs://clusters.example.com/minimal.example.com","server":{"Listen":":3988","provider":{"aws":{"nodesRoles":["kops-custom-node-role","nodes.minimal.example.com"],"Region":"us-east-1"}},"serverKeyPath":"/etc/kubernetes/kops-controller/pki/kops-controller.key","serverCertificatePath":"/etc/kubernetes/kops-controller/pki/kops-controller.crt","caBasePath":"/etc/kubernetes/kops-controller/pki","signingCAs":["ca"],"certNames":["kubelet","kubelet-server","kube-proxy"]}}
55
kind: ConfigMap
66
metadata:
77
labels:

upup/pkg/fi/cloudup/tests/bootstrapchannelbuilder/simple/manifest.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ spec:
77
- id: k8s-1.16
88
kubernetesVersion: '>=1.16.0-alpha.0'
99
manifest: kops-controller.addons.k8s.io/k8s-1.16.yaml
10-
manifestHash: 95b29a87c7e7204fd7f36716d7f9f3187985c2af
10+
manifestHash: 70b6d9eaba39f1ead46355e682e747257eb52b49
1111
name: kops-controller.addons.k8s.io
1212
selector:
1313
k8s-addon: kops-controller.addons.k8s.io

0 commit comments

Comments
 (0)