// PerformTLSBootstrap executes a certificate signing request with the // provided connection details. func PerformTLSBootstrap(cfg *clientcmdapi.Config) error { hostName, err := os.Hostname() if err != nil { return err } name := types.NodeName(hostName) rc, err := clientcmd.NewDefaultClientConfig(*cfg, nil).ClientConfig() if err != nil { return err } c, err := clientset.NewForConfig(rc) if err != nil { return err } fmt.Println("<node/csr> created API client to obtain unique certificate for this node, generating keys and certificate signing request") key, err := certutil.MakeEllipticPrivateKeyPEM() if err != nil { return fmt.Errorf("<node/csr> failed to generating private key [%v]", err) } cert, err := csr.RequestNodeCertificate(c.Certificates().CertificateSigningRequests(), key, name) if err != nil { return fmt.Errorf("<node/csr> failed to request signed certificate from the API server [%v]", err) } fmtCert, err := certutil.FormatBytesCert(cert) if err != nil { return fmt.Errorf("<node/csr> failed to format certificate [%v]", err) } fmt.Printf("<node/csr> received signed certificate from the API server:\n%s\n", fmtCert) fmt.Println("<node/csr> generating kubelet configuration") cfg.AuthInfos["kubelet"] = &clientcmdapi.AuthInfo{ ClientKeyData: key, ClientCertificateData: []byte(fmtCert), } cfg.Contexts["kubelet"] = &clientcmdapi.Context{ AuthInfo: "kubelet", Cluster: cfg.Contexts[cfg.CurrentContext].Cluster, } cfg.CurrentContext = "kubelet" return nil }
// minikubeConfig returns a config that reasonably approximates a localkube cluster func minikubeConfig(config *api.Config) { // cluster clusterName := "minikube" cluster := api.NewCluster() cluster.Server = "https://192.168.99.100:" + strconv.Itoa(constants.APIServerPort) cluster.CertificateAuthority = "/home/tux/.minikube/apiserver.crt" config.Clusters[clusterName] = cluster // user userName := "******" user := api.NewAuthInfo() user.ClientCertificate = "/home/tux/.minikube/apiserver.crt" user.ClientKey = "/home/tux/.minikube/apiserver.key" config.AuthInfos[userName] = user // context contextName := "minikube" context := api.NewContext() context.Cluster = clusterName context.AuthInfo = userName config.Contexts[contextName] = context config.CurrentContext = contextName }