Commit 329b6b52 authored by XianglongLuo's avatar XianglongLuo
Browse files

Fix for deleting unused etcd and kubelet certs

parent 98816087
release/v1.3 1.2.5 enable_fossa githubaction-go-generate-2022-01-19-14-09-53 githubaction-go-generate-2022-01-19-16-59-09 githubaction-go-generate-2022-02-02-16-53-10 githubaction-go-generate-2022-03-19-01-55-24 githubaction-go-generate-2022-03-19-02-28-40 githubaction-go-generate-2022-03-24-18-41-17 githubaction-go-generate-2022-03-24-19-00-43 githubaction-go-generate-2022-04-27-01-07-30 githubaction-go-generate-2022-04-27-16-36-37 githubaction-go-generate-2022-04-28-23-21-04 githubaction-go-generate-2022-04-29-00-20-33 githubaction-go-generate-2022-04-29-03-20-39 githubaction-go-generate-2022-04-29-03-34-38 githubaction-go-generate-2022-05-05-16-15-24 githubaction-go-generate-2022-05-06-15-36-45 githubaction-go-generate-2022-05-06-21-32-47 kinarashah-patch-1 label-opened-issues master rancherbot_port_2796_release/v1.2_6efce927fbafb32468ad2dc45acb64511f4a6f31 release/v1.1 release/v1.1.10 release/v1.1.13 release/v1.1.2 release/v1.2 release/v1.2.1 revert-2326-rotate-encryption-keys revert-2374-revert-2326-rotate-encryption-keys revert-2541-no_selinux_relabel wg-10699 v1.3.11-rc2 v1.3.11-rc1 v1.3.10 v1.3.10-rc7 v1.3.10-rc6 v1.3.10-rc5 v1.3.10-rc4 v1.3.10-rc3 v1.3.10-rc2 v1.3.10-rc1 v1.3.9 v1.3.9-rc1 v1.3.8 v1.3.8-rc12 v1.3.8-rc11 v1.3.8-rc10 v1.3.8-rc9 v1.3.8-rc8 v1.3.8-rc7 v1.3.8-rc6 v1.3.8-rc5 v1.3.8-rc4 v1.3.8-rc3 v1.3.8-rc2 v1.3.8-rc1 v1.3.7 v1.3.7-rc1 v1.3.6 v1.3.6-rc1 v1.3.5 v1.3.5-rc1 v1.3.5-alpha1 v1.3.4 v1.3.4-rc1 v1.3.3 v1.3.3-rc6 v1.3.3-rc5 v1.3.3-rc4 v1.3.3-rc3 v1.3.3-rc2 v1.3.3-rc1 v1.3.2 v1.3.2-rc2 v1.3.2-rc1 v1.3.1 v1.3.1-rc1 v1.3.0 v1.3.0-rc20 v1.3.0-rc19 v1.3.0-rc18 v1.3.0-rc17 v1.3.0-rc16 v1.3.0-rc15 v1.3.0-rc14 v1.3.0-rc13 v1.3.0-rc12 v1.3.0-rc11 v1.3.0-rc10 v1.3.0-rc9 v1.3.0-rc8 v1.3.0-rc7 v1.3.0-rc6 v1.3.0-rc5 v1.3.0-rc4 v1.3.0-rc3 v1.3.0-rc2 v1.3.0-rc1 v1.2.20 v1.2.20-rc1 v1.2.19 v1.2.19-rc4 v1.2.19-rc3 v1.2.19-rc2 v1.2.19-rc1 v1.2.18 v1.2.18-rc1 v1.2.17 v1.2.17-rc1 v1.2.16 v1.2.16-rc1 v1.2.15 v1.2.15-rc1 v1.2.14 v1.2.14-rc2 v1.2.14-rc1 v1.2.13 v1.2.13-rc2 v1.2.13-rc1 v1.2.12 v1.2.12-rc1 v1.2.11 v1.2.11-rc0 v1.2.10 v1.2.10-rc0 v1.2.9 v1.2.9-rc2 v1.2.9-rc1 v1.2.8 v1.2.8-rc4 v1.2.8-rc3 v1.2.8-rc2 v1.2.8-rc1 v1.2.7 v1.2.7-rc1 v1.2.6 v1.2.6-rc6 v1.2.6-rc5 v1.2.6-rc4 v1.2.6-rc3 v1.2.6-rc2 v1.2.6-rc1 v1.2.5 v1.2.5-rc2 v1.2.5-rc1 v1.2.4 v1.2.4-rc9 v1.2.4-rc8 v1.2.4-rc7 v1.2.4-rc6 v1.2.4-rc5 v1.2.4-rc4 v1.2.4-rc3 v1.2.4-rc2 v1.2.4-rc1 v1.2.3 v1.2.3-rc1 v1.2.2 v1.2.2-rc6 v1.2.2-rc5 v1.2.2-rc4 v1.2.2-rc3 v1.2.2-rc2 v1.2.2-rc1 v1.2.1 v1.2.1-rc1 v1.2.0 v1.2.0-rc17 v1.2.0-rc16 v1.2.0-rc15 v1.2.0-rc14 v1.2.0-rc13 v1.2.0-rc12 v1.2.0-rc11 v1.2.0-rc10 v1.2.0-rc9 v1.2.0-rc8 v1.2.0-rc7 v1.2.0-rc6 v1.2.0-rc5 v1.2.0-rc4 v1.2.0-rc3 v1.2.0-rc2 v1.2.0-rc1 v1.1.19 v1.1.19-rc1 v1.1.18 v1.1.18-rc2 v1.1.18-rc1 v1.1.17 v1.1.17-rc2 v1.1.17-rc1 v1.1.16 v1.1.16-rc1 v1.1.15 v1.1.15-rc4 v1.1.15-rc3 v1.1.15-rc2 v1.1.15-rc1 v1.1.14 v1.1.14-rc3 v1.1.14-rc2 v1.1.14-rc1 v1.1.13 v1.1.13-rc3 v1.1.13-rc2 v1.1.13-rc1 v1.1.12 v1.1.12-rc1 v1.1.11 v1.1.11-rc6 v1.1.11-rc5 v1.1.11-rc4 v1.1.11-rc3 v1.1.11-rc2 v1.1.11-rc1 v1.1.10 v1.1.10-rc1 v1.1.9 v1.1.9-rc3 v1.1.9-rc2 v1.1.9-rc1 v1.1.8-rc1 v1.1.7 v1.1.6 v1.1.5 v1.1.5-rc9 v1.1.5-rc8 v1.1.5-rc7 v1.1.5-rc6 v1.1.5-rc5 v1.1.5-rc4 v1.1.5-rc3 v1.1.5-rc2 v1.1.5-rc1 v1.1.4 v1.1.4-rc2 v1.1.4-rc1 v1.1.3 v1.1.3-rc6 v1.1.3-rc5 v1.1.3-rc4 v1.1.3-rc3 v1.1.3-rc2 v1.1.3-rc1 v1.1.2 v1.1.2-rc4 v1.1.2-rc3 v1.1.2-rc1 v1.1.1 v1.1.1-rc1 v1.1.0 v1.1.0-rc19 v1.1.0-rc18 v1.1.0-rc17 v1.1.0-rc16 v1.1.0-rc15 v1.1.0-rc14 v1.1.0-rc13 v1.1.0-rc12 v1.1.0-rc11 v1.1.0-rc10 v1.1.0-rc9 v1.1.0-rc8 v1.1.0-rc7 v1.0.7-rc1
No related merge requests found
Showing with 174 additions and 1 deletion
+174 -1
......@@ -6,6 +6,7 @@ import (
"fmt"
"reflect"
"sort"
"strings"
"github.com/rancher/rke/hosts"
"github.com/rancher/rke/log"
......@@ -370,7 +371,6 @@ func GenerateEtcdCertificates(ctx context.Context, certs map[string]CertificateP
ips = append(ips, ip.String())
}
sort.Strings(ips)
for _, host := range etcdHosts {
etcdName := GetCrtNameForHost(host, EtcdCertName)
if _, ok := certs[etcdName]; ok && certs[etcdName].CertificatePEM != "" && !rotate {
......@@ -403,6 +403,8 @@ func GenerateEtcdCertificates(ctx context.Context, certs map[string]CertificateP
}
certs[etcdName] = ToCertObject(etcdName, "", "", etcdCrt, etcdKey, nil)
}
log.Debugf(ctx, "Checking and deleting unused etcd certificates, current etcd nodes are: %v", etcdHosts)
deleteUnusedCerts(ctx, certs, EtcdCertName, etcdHosts)
return nil
}
......@@ -516,6 +518,8 @@ func GenerateKubeletCertificate(ctx context.Context, certs map[string]Certificat
}
certs[kubeletName] = ToCertObject(kubeletName, "", "", kubeletCrt, kubeletKey, nil)
}
log.Debugf(ctx, "Checking and deleting unused kubelet certificates, current nodes are : %v", allHosts)
deleteUnusedCerts(ctx, certs, KubeletCertName, allHosts)
return nil
}
......@@ -555,6 +559,15 @@ func GenerateRKEServicesCerts(ctx context.Context, certs map[string]CertificateP
}
if IsKubeletGenerateServingCertificateEnabledinConfig(&rkeConfig) {
RKECerts = append(RKECerts, GenerateKubeletCertificate)
} else {
//Clean up kubelet certs when GenerateServingCertificate is disabled
log.Infof(ctx, "[certificates] GenerateServingCertificate is disabled, checking if there are unused kubelet certificates")
for k := range certs {
if strings.HasPrefix(k, KubeletCertName) {
log.Infof(ctx, "[certificates] Deleting unused kubelet certificate: %s", k)
delete(certs, k)
}
}
}
for _, gen := range RKECerts {
if err := gen(ctx, certs, rkeConfig, configPath, configDir, rotate); err != nil {
......@@ -588,3 +601,21 @@ func GenerateRKEServicesCSRs(ctx context.Context, certs map[string]CertificatePK
}
return nil
}
func deleteUnusedCerts(ctx context.Context, certs map[string]CertificatePKI, certName string, hosts []*hosts.Host) {
log.Infof(ctx, "[certificates] Checking and deleting unused %s certificates", certName)
unusedCerts := make(map[string]bool)
for k := range certs {
if strings.HasPrefix(k, certName) {
unusedCerts[k] = true
}
}
for _, host := range hosts {
Name := GetCrtNameForHost(host, certName)
delete(unusedCerts, Name)
}
for k := range unusedCerts {
log.Infof(ctx, "[certificates] Deleting unused certificate: %s", k)
delete(certs, k)
}
}
package pki
import (
"context"
"github.com/rancher/rke/hosts"
v3 "github.com/rancher/types/apis/management.cattle.io/v3"
"github.com/stretchr/testify/assert"
"reflect"
"testing"
)
func TestDeleteUnusedCerts(t *testing.T) {
tests := []struct {
ctx context.Context
name string
certs map[string]CertificatePKI
certName string
hosts []*hosts.Host
expectLeftCerts map[string]CertificatePKI
}{
{
ctx: context.Background(),
name: "Keep valid etcd certs",
certs: map[string]CertificatePKI{
"kube-etcd-172-17-0-3": CertificatePKI{},
"kube-etcd-172-17-0-4": CertificatePKI{},
"kube-node": CertificatePKI{},
"kube-kubelet-172-17-0-4": CertificatePKI{},
"kube-apiserver": CertificatePKI{},
"kube-proxy": CertificatePKI{},
},
certName: EtcdCertName,
hosts: []*hosts.Host{
{RKEConfigNode: v3.RKEConfigNode{
Address: "172.17.0.3",
}},
{RKEConfigNode: v3.RKEConfigNode{
Address: "172.17.0.4",
}},
},
expectLeftCerts: map[string]CertificatePKI{
"kube-etcd-172-17-0-3": CertificatePKI{},
"kube-etcd-172-17-0-4": CertificatePKI{},
"kube-node": CertificatePKI{},
"kube-kubelet-172-17-0-4": CertificatePKI{},
"kube-apiserver": CertificatePKI{},
"kube-proxy": CertificatePKI{},
},
},
{
ctx: context.Background(),
name: "Keep valid kubelet certs",
certs: map[string]CertificatePKI{
"kube-kubelet-172-17-0-5": CertificatePKI{},
"kube-kubelet-172-17-0-6": CertificatePKI{},
"kube-node": CertificatePKI{},
"kube-apiserver": CertificatePKI{},
"kube-proxy": CertificatePKI{},
"kube-etcd-172-17-0-6": CertificatePKI{},
},
certName: KubeletCertName,
hosts: []*hosts.Host{
{RKEConfigNode: v3.RKEConfigNode{
Address: "172.17.0.5",
}},
{RKEConfigNode: v3.RKEConfigNode{
Address: "172.17.0.6",
}},
},
expectLeftCerts: map[string]CertificatePKI{
"kube-kubelet-172-17-0-5": CertificatePKI{},
"kube-kubelet-172-17-0-6": CertificatePKI{},
"kube-node": CertificatePKI{},
"kube-apiserver": CertificatePKI{},
"kube-proxy": CertificatePKI{},
"kube-etcd-172-17-0-6": CertificatePKI{},
},
},
{
ctx: context.Background(),
name: "Remove unused etcd certs",
certs: map[string]CertificatePKI{
"kube-etcd-172-17-0-11": CertificatePKI{},
"kube-etcd-172-17-0-10": CertificatePKI{},
"kube-kubelet-172-17-0-11": CertificatePKI{},
"kube-node": CertificatePKI{},
"kube-apiserver": CertificatePKI{},
"kube-proxy": CertificatePKI{},
},
certName: EtcdCertName,
hosts: []*hosts.Host{
{RKEConfigNode: v3.RKEConfigNode{
Address: "172.17.0.11",
}},
{RKEConfigNode: v3.RKEConfigNode{
Address: "172.17.0.12",
}},
},
expectLeftCerts: map[string]CertificatePKI{
"kube-etcd-172-17-0-11": CertificatePKI{},
"kube-kubelet-172-17-0-11": CertificatePKI{},
"kube-node": CertificatePKI{},
"kube-apiserver": CertificatePKI{},
"kube-proxy": CertificatePKI{},
},
},
{
ctx: context.Background(),
name: "Remove unused kubelet certs",
certs: map[string]CertificatePKI{
"kube-kubelet-172-17-0-11": CertificatePKI{},
"kube-kubelet-172-17-0-10": CertificatePKI{},
"kube-etcd-172-17-0-10": CertificatePKI{},
"kube-node": CertificatePKI{},
"kube-apiserver": CertificatePKI{},
"kube-proxy": CertificatePKI{},
},
certName: KubeletCertName,
hosts: []*hosts.Host{
{RKEConfigNode: v3.RKEConfigNode{
Address: "172.17.0.11",
}},
{RKEConfigNode: v3.RKEConfigNode{
Address: "172.17.0.12",
}},
},
expectLeftCerts: map[string]CertificatePKI{
"kube-kubelet-172-17-0-11": CertificatePKI{},
"kube-etcd-172-17-0-10": CertificatePKI{},
"kube-node": CertificatePKI{},
"kube-apiserver": CertificatePKI{},
"kube-proxy": CertificatePKI{},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
deleteUnusedCerts(tt.ctx, tt.certs, tt.certName, tt.hosts)
assert.Equal(t, true, reflect.DeepEqual(tt.certs, tt.expectLeftCerts))
})
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment