mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-07 03:03:59 +00:00
Merge pull request #39464 from apprenda/kubeadm_93-more_discovery
Automatic merge from submit-queue Implemented file and HTTPS based discovery for kubeadm **What this PR does / why we need it**: This PR implements both file and HTTPS based discovery for `kubeadm`. **Which issue this PR fixes**: fixes https://github.com/kubernetes/kubeadm/issues/93 fixes https://github.com/kubernetes/kubeadm/issues/94 **Special notes for your reviewer**: I'd like to add some tests but 'm sure `kubeconfig` loading is already covered by other tests in `clientcmd` package. /cc @luxas @pipejakob
This commit is contained in:
commit
41d7acc0f5
@ -33,6 +33,7 @@ import (
|
|||||||
kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig"
|
kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/preflight"
|
"k8s.io/kubernetes/cmd/kubeadm/app/preflight"
|
||||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
@ -129,7 +130,7 @@ func (j *Join) Validate() error {
|
|||||||
return validation.ValidateNodeConfiguration(j.cfg).ToAggregate()
|
return validation.ValidateNodeConfiguration(j.cfg).ToAggregate()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run executes worked node provisioning and tries to join an existing cluster.
|
// Run executes worker node provisioning and tries to join an existing cluster.
|
||||||
func (j *Join) Run(out io.Writer) error {
|
func (j *Join) Run(out io.Writer) error {
|
||||||
var cfg *clientcmdapi.Config
|
var cfg *clientcmdapi.Config
|
||||||
// TODO: delete this first block when we move Token to the discovery interface
|
// TODO: delete this first block when we move Token to the discovery interface
|
||||||
@ -138,7 +139,6 @@ func (j *Join) Run(out io.Writer) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
connectionDetails, err := kubenode.EstablishMasterConnection(j.cfg.Discovery.Token, clusterInfo)
|
connectionDetails, err := kubenode.EstablishMasterConnection(j.cfg.Discovery.Token, clusterInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -161,8 +161,7 @@ func (j *Join) Run(out io.Writer) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err := kubeconfigphase.WriteKubeconfigToDisk(path.Join(kubeadmapi.GlobalEnvParams.KubernetesDir, kubeconfigphase.KubeletKubeConfigFileName), cfg)
|
if err := kubeconfigphase.WriteKubeconfigToDisk(path.Join(kubeadmapi.GlobalEnvParams.KubernetesDir, kubeconfigphase.KubeletKubeConfigFileName), cfg); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ go_library(
|
|||||||
"//cmd/kubeadm/app/discovery/file:go_default_library",
|
"//cmd/kubeadm/app/discovery/file:go_default_library",
|
||||||
"//cmd/kubeadm/app/discovery/https:go_default_library",
|
"//cmd/kubeadm/app/discovery/https:go_default_library",
|
||||||
"//cmd/kubeadm/app/discovery/token:go_default_library",
|
"//cmd/kubeadm/app/discovery/token:go_default_library",
|
||||||
|
"//pkg/client/unversioned/clientcmd:go_default_library",
|
||||||
"//pkg/client/unversioned/clientcmd/api:go_default_library",
|
"//pkg/client/unversioned/clientcmd/api:go_default_library",
|
||||||
"//vendor:github.com/spf13/pflag",
|
"//vendor:github.com/spf13/pflag",
|
||||||
],
|
],
|
||||||
|
@ -18,14 +18,53 @@ package discovery
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
func For(c kubeadmapi.Discovery) (*clientcmdapi.Config, error) {
|
// For identifies and executes the desired discovery mechanism.
|
||||||
|
func For(d kubeadmapi.Discovery) (*clientcmdapi.Config, error) {
|
||||||
switch {
|
switch {
|
||||||
|
case d.File != nil:
|
||||||
|
return runFileDiscovery(d.File)
|
||||||
|
case d.HTTPS != nil:
|
||||||
|
return runHTTPSDiscovery(d.HTTPS)
|
||||||
|
case d.Token != nil:
|
||||||
|
// TODO move token discovery here
|
||||||
|
return runTokenDiscovery(d.Token)
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unimplemented")
|
return nil, fmt.Errorf("Couldn't find a valid discovery configuration. Please provide one.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// runFileDiscovery executes file-based discovery.
|
||||||
|
func runFileDiscovery(fd *kubeadmapi.FileDiscovery) (*clientcmdapi.Config, error) {
|
||||||
|
return clientcmd.LoadFromFile(fd.Path)
|
||||||
|
}
|
||||||
|
|
||||||
|
// runHTTPSDiscovery executes HTTPS-based discovery.
|
||||||
|
func runHTTPSDiscovery(hd *kubeadmapi.HTTPSDiscovery) (*clientcmdapi.Config, error) {
|
||||||
|
response, err := http.Get(hd.URL)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
|
kubeconfig, err := ioutil.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return clientcmd.Load(kubeconfig)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO implement
|
||||||
|
// runTokenDiscovery executes token-based discovery.
|
||||||
|
func runTokenDiscovery(td *kubeadmapi.TokenDiscovery) (*clientcmdapi.Config, error) {
|
||||||
|
return nil, fmt.Errorf("Couldn't find a valid discovery configuration. Please provide one.")
|
||||||
|
}
|
||||||
|
@ -29,12 +29,13 @@ import (
|
|||||||
certutil "k8s.io/kubernetes/pkg/util/cert"
|
certutil "k8s.io/kubernetes/pkg/util/cert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO @mikedanese move this to PerformTLSBootstrap
|
||||||
func PerformTLSBootstrapDeprecated(connection *ConnectionDetails) (*clientcmdapi.Config, error) {
|
func PerformTLSBootstrapDeprecated(connection *ConnectionDetails) (*clientcmdapi.Config, error) {
|
||||||
fmt.Println("[csr] Created API client to obtain unique certificate for this node, generating keys and certificate signing request")
|
fmt.Println("[csr] Created API client to obtain unique certificate for this node, generating keys and certificate signing request")
|
||||||
|
|
||||||
key, err := certutil.MakeEllipticPrivateKeyPEM()
|
key, err := certutil.MakeEllipticPrivateKeyPEM()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to generating private key [%v]", err)
|
return nil, fmt.Errorf("failed to generate private key [%v]", err)
|
||||||
}
|
}
|
||||||
cert, err := csr.RequestNodeCertificate(connection.CertClient.CertificateSigningRequests(), key, connection.NodeName)
|
cert, err := csr.RequestNodeCertificate(connection.CertClient.CertificateSigningRequests(), key, connection.NodeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -80,7 +81,7 @@ func PerformTLSBootstrap(cfg *clientcmdapi.Config) error {
|
|||||||
|
|
||||||
key, err := certutil.MakeEllipticPrivateKeyPEM()
|
key, err := certutil.MakeEllipticPrivateKeyPEM()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to generating private key [%v]", err)
|
return fmt.Errorf("failed to generate private key [%v]", err)
|
||||||
}
|
}
|
||||||
cert, err := csr.RequestNodeCertificate(c.Certificates().CertificateSigningRequests(), key, name)
|
cert, err := csr.RequestNodeCertificate(c.Certificates().CertificateSigningRequests(), key, name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user