@@ -27,6 +27,7 @@ import (
2727 "github.com/k3s-io/k3s/pkg/clientaccess"
2828 "github.com/k3s-io/k3s/pkg/daemons/config"
2929 "github.com/k3s-io/k3s/pkg/daemons/control/deps"
30+ "github.com/k3s-io/k3s/pkg/daemons/executor"
3031 "github.com/k3s-io/k3s/pkg/spegel"
3132 "github.com/k3s-io/k3s/pkg/util"
3233 "github.com/k3s-io/k3s/pkg/util/errors"
@@ -515,54 +516,13 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N
515516
516517 os .Setenv ("NODE_NAME" , nodeName )
517518
518- // Ensure that the kubelet's server certificate is valid for all configured node IPs. Note
519- // that in the case of an external CCM, additional IPs may be added by the infra provider
520- // that the cert will not be valid for, as they are not present in the list collected here.
521- nodeExternalAndInternalIPs := append (nodeIPs , nodeExternalIPs ... )
522-
523- // Ask the server to sign our kubelet server cert.
524- if err := getKubeletServingCert (nodeName , nodeExternalAndInternalIPs , servingKubeletCert , servingKubeletKey , newNodePasswordFile , info ); err != nil {
525- return nil , errors .WithMessage (err , servingKubeletCert )
526- }
527-
528- // Ask the server to sign our kubelet client cert.
529- if err := getKubeletClientCert (clientKubeletCert , clientKubeletKey , nodeName , nodeIPs , newNodePasswordFile , info ); err != nil {
530- return nil , errors .WithMessage (err , clientKubeletCert )
531- }
532-
533- // Generate a kubeconfig for the kubelet.
534519 kubeconfigKubelet := filepath .Join (envInfo .DataDir , "agent" , "kubelet.kubeconfig" )
535- if err := deps .KubeConfig (kubeconfigKubelet , apiServerURL , serverCAFile , clientKubeletCert , clientKubeletKey ); err != nil {
536- return nil , err
537- }
538-
539520 clientKubeProxyCert := filepath .Join (envInfo .DataDir , "agent" , "client-kube-proxy.crt" )
540521 clientKubeProxyKey := filepath .Join (envInfo .DataDir , "agent" , "client-kube-proxy.key" )
541-
542- // Ask the server to sign our kube-proxy client cert.
543- if err := getClientCert (clientKubeProxyCert , clientKubeProxyKey , info ); err != nil {
544- return nil , errors .WithMessage (err , clientKubeProxyCert )
545- }
546-
547- // Generate a kubeconfig for kube-proxy.
548522 kubeconfigKubeproxy := filepath .Join (envInfo .DataDir , "agent" , "kubeproxy.kubeconfig" )
549- if err := deps .KubeConfig (kubeconfigKubeproxy , apiServerURL , serverCAFile , clientKubeProxyCert , clientKubeProxyKey ); err != nil {
550- return nil , err
551- }
552-
553523 clientK3sControllerCert := filepath .Join (envInfo .DataDir , "agent" , "client-" + version .Program + "-controller.crt" )
554524 clientK3sControllerKey := filepath .Join (envInfo .DataDir , "agent" , "client-" + version .Program + "-controller.key" )
555-
556- // Ask the server to sign our agent controller client cert.
557- if err := getClientCert (clientK3sControllerCert , clientK3sControllerKey , info ); err != nil {
558- return nil , errors .WithMessage (err , clientK3sControllerCert )
559- }
560-
561- // Generate a kubeconfig for the agent controller.
562525 kubeconfigK3sController := filepath .Join (envInfo .DataDir , "agent" , version .Program + "controller.kubeconfig" )
563- if err := deps .KubeConfig (kubeconfigK3sController , apiServerURL , serverCAFile , clientK3sControllerCert , clientK3sControllerKey ); err != nil {
564- return nil , err
565- }
566526
567527 // Ensure kubelet config dir exists
568528 kubeletConfigDir := filepath .Join (envInfo .DataDir , "agent" , "etc" , "kubelet.conf.d" )
@@ -769,6 +729,51 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N
769729 return nil , err
770730 }
771731
732+ // allow executor to do additional configuration; this is the last chance to modify nodeConfig before certs are signed
733+ if err := executor .Prepare (ctx , nodeConfig , * envInfo ); err != nil {
734+ return nil , errors .WithMessage (err , "failed to prepare configuration" )
735+ }
736+
737+ // Ensure that the kubelet's server certificate is valid for all configured node IPs. Note
738+ // that in the case of an external CCM, additional IPs may be added by the infra provider
739+ // that the cert will not be valid for, as they are not present in the list collected here.
740+ nodeExternalAndInternalIPs := append (nodeConfig .AgentConfig .NodeIPs , nodeConfig .AgentConfig .NodeExternalIPs ... )
741+
742+ // Ask the server to sign our kubelet server cert.
743+ if err := getKubeletServingCert (nodeConfig .AgentConfig .NodeName , nodeExternalAndInternalIPs , servingKubeletCert , servingKubeletKey , newNodePasswordFile , info ); err != nil {
744+ return nil , errors .WithMessage (err , servingKubeletCert )
745+ }
746+
747+ // Ask the server to sign our kubelet client cert.
748+ if err := getKubeletClientCert (clientKubeletCert , clientKubeletKey , nodeConfig .AgentConfig .NodeName , nodeConfig .AgentConfig .NodeIPs , newNodePasswordFile , info ); err != nil {
749+ return nil , errors .WithMessage (err , clientKubeletCert )
750+ }
751+
752+ // Generate a kubeconfig for the kubelet.
753+ if err := deps .KubeConfig (kubeconfigKubelet , apiServerURL , serverCAFile , clientKubeletCert , clientKubeletKey ); err != nil {
754+ return nil , err
755+ }
756+
757+ // Ask the server to sign our kube-proxy client cert.
758+ if err := getClientCert (clientKubeProxyCert , clientKubeProxyKey , info ); err != nil {
759+ return nil , errors .WithMessage (err , clientKubeProxyCert )
760+ }
761+
762+ // Generate a kubeconfig for kube-proxy.
763+ if err := deps .KubeConfig (kubeconfigKubeproxy , apiServerURL , serverCAFile , clientKubeProxyCert , clientKubeProxyKey ); err != nil {
764+ return nil , err
765+ }
766+
767+ // Ask the server to sign our agent controller client cert.
768+ if err := getClientCert (clientK3sControllerCert , clientK3sControllerKey , info ); err != nil {
769+ return nil , errors .WithMessage (err , clientK3sControllerCert )
770+ }
771+
772+ // Generate a kubeconfig for the agent controller.
773+ if err := deps .KubeConfig (kubeconfigK3sController , apiServerURL , serverCAFile , clientK3sControllerCert , clientK3sControllerKey ); err != nil {
774+ return nil , err
775+ }
776+
772777 return nodeConfig , nil
773778}
774779
0 commit comments