Merge pull request #107532 from marseel/add_bootstrap_to_kubemark

Add option to bootstrap kubeconfig for hollow-node
This commit is contained in:
Kubernetes Prow Robot 2022-02-02 06:44:21 -08:00 committed by GitHub
commit 8f80ae88f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,6 +17,7 @@ limitations under the License.
package main package main
import ( import (
"context"
"errors" "errors"
goflag "flag" goflag "flag"
"fmt" "fmt"
@ -30,6 +31,7 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
@ -45,6 +47,7 @@ import (
"k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/cluster/ports" "k8s.io/kubernetes/pkg/cluster/ports"
cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap"
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
"k8s.io/kubernetes/pkg/kubelet/cri/remote" "k8s.io/kubernetes/pkg/kubelet/cri/remote"
fakeremote "k8s.io/kubernetes/pkg/kubelet/cri/remote/fake" fakeremote "k8s.io/kubernetes/pkg/kubelet/cri/remote/fake"
@ -55,21 +58,23 @@ import (
) )
type hollowNodeConfig struct { type hollowNodeConfig struct {
KubeconfigPath string KubeconfigPath string
KubeletPort int BootstrapKubeconfigPath string
KubeletReadOnlyPort int CertDirectory string
Morph string KubeletPort int
NodeName string KubeletReadOnlyPort int
ServerPort int Morph string
ContentType string NodeName string
UseRealProxier bool ServerPort int
ProxierSyncPeriod time.Duration ContentType string
ProxierMinSyncPeriod time.Duration UseRealProxier bool
NodeLabels map[string]string ProxierSyncPeriod time.Duration
RegisterWithTaints []v1.Taint ProxierMinSyncPeriod time.Duration
MaxPods int NodeLabels map[string]string
ExtendedResources map[string]string RegisterWithTaints []v1.Taint
UseHostImageService bool MaxPods int
ExtendedResources map[string]string
UseHostImageService bool
} }
const ( const (
@ -83,6 +88,8 @@ var knownMorphs = sets.NewString("kubelet", "proxy")
func (c *hollowNodeConfig) addFlags(fs *pflag.FlagSet) { func (c *hollowNodeConfig) addFlags(fs *pflag.FlagSet) {
fs.StringVar(&c.KubeconfigPath, "kubeconfig", "/kubeconfig/kubeconfig", "Path to kubeconfig file.") fs.StringVar(&c.KubeconfigPath, "kubeconfig", "/kubeconfig/kubeconfig", "Path to kubeconfig file.")
fs.StringVar(&c.BootstrapKubeconfigPath, "bootstrap-kubeconfig", "", "Path to bootstrap kubeconfig file.")
fs.StringVar(&c.CertDirectory, "cert-dir", "/etc/srv/", "Path to cert directory for bootstraping.")
fs.IntVar(&c.KubeletPort, "kubelet-port", ports.KubeletPort, "Port on which HollowKubelet should be listening.") fs.IntVar(&c.KubeletPort, "kubelet-port", ports.KubeletPort, "Port on which HollowKubelet should be listening.")
fs.IntVar(&c.KubeletReadOnlyPort, "kubelet-read-only-port", ports.KubeletReadOnlyPort, "Read-only port on which Kubelet is listening.") fs.IntVar(&c.KubeletReadOnlyPort, "kubelet-read-only-port", ports.KubeletReadOnlyPort, "Read-only port on which Kubelet is listening.")
fs.StringVar(&c.NodeName, "name", "fake-node", "Name of this Hollow Node.") fs.StringVar(&c.NodeName, "name", "fake-node", "Name of this Hollow Node.")
@ -116,6 +123,13 @@ func (c *hollowNodeConfig) createClientConfigFromFile() (*restclient.Config, err
return config, nil return config, nil
} }
func (c *hollowNodeConfig) bootstrapClientConfig() error {
if c.BootstrapKubeconfigPath != "" {
return bootstrap.LoadClientCert(context.TODO(), c.KubeconfigPath, c.BootstrapKubeconfigPath, c.CertDirectory, types.NodeName(c.NodeName))
}
return nil
}
func (c *hollowNodeConfig) createHollowKubeletOptions() *kubemark.HollowKubletOptions { func (c *hollowNodeConfig) createHollowKubeletOptions() *kubemark.HollowKubletOptions {
return &kubemark.HollowKubletOptions{ return &kubemark.HollowKubletOptions{
NodeName: c.NodeName, NodeName: c.NodeName,
@ -175,6 +189,10 @@ func run(cmd *cobra.Command, config *hollowNodeConfig) error {
} }
// create a client to communicate with API server. // create a client to communicate with API server.
err := config.bootstrapClientConfig()
if err != nil {
return fmt.Errorf("Failed to bootstrap, error: %w. Exiting", err)
}
clientConfig, err := config.createClientConfigFromFile() clientConfig, err := config.createClientConfigFromFile()
if err != nil { if err != nil {
return fmt.Errorf("Failed to create a ClientConfig, error: %w. Exiting", err) return fmt.Errorf("Failed to create a ClientConfig, error: %w. Exiting", err)