Skip to content
Snippets Groups Projects
Commit 7302105c authored by kaiyou's avatar kaiyou
Browse files

Add a kubeconfig and additional binaries

parent f21b8225
No related branches found
No related tags found
No related merge requests found
...@@ -32,9 +32,11 @@ func New(settings *ClusterSettings, node *NodeSettings) *Cluster { ...@@ -32,9 +32,11 @@ func New(settings *ClusterSettings, node *NodeSettings) *Cluster {
} }
func (c *Cluster) Run() { func (c *Cluster) Run() {
// Initialize components // Initialize components, certs must be initialized before
// environment, which references master keys
c.initVPN() c.initVPN()
c.initCerts() c.initCerts()
c.initEnv()
c.ml.Meta.Role = string(c.node.Role) c.ml.Meta.Role = string(c.node.Role)
// Start waiting for events // Start waiting for events
events := c.ml.Events() events := c.ml.Events()
......
package cluster
import (
"fmt"
"os"
"path"
"github.com/sirupsen/logrus"
)
const homeDir = "/root"
const binDir = "/bin"
// Initialize hepto environment:
// - deploy subcommand symlinks
func (c *Cluster) initEnv() {
// Remove all binaries and configs
err := os.RemoveAll(binDir)
if err != nil {
logrus.Fatal(err)
}
err = os.RemoveAll(homeDir)
if err != nil {
logrus.Fatal(err)
}
// Create bin directory and all useful symlinks
err = os.Setenv("PATH", binDir)
if err != nil {
logrus.Fatal(err)
}
err = os.MkdirAll(binDir, 0o755)
if err != nil {
logrus.Fatal(err)
}
for _, name := range []string{"kubectl", "ctr", "mount", "containerd-shim", "containerd-shim-runc-v2"} {
err = os.Symlink("/proc/1/exe", path.Join(binDir, name))
}
// Create the admin kubeconfig on master only
if c.node.Role == Master {
err = os.MkdirAll(path.Join(homeDir, ".kube"), 0o755)
if err != nil {
logrus.Fatal(err)
}
rootConfig := KubeConfig{
URL: fmt.Sprintf("https://[%s]:6443", c.networking.NodeAddress.IP.String()),
CACert: c.pki.TLS.CertPath(),
ClientKey: c.masterCerts.RootClient.KeyPath(),
ClientCert: c.masterCerts.RootClient.CertPath(),
}
err = rootConfig.Write(path.Join(homeDir, ".kube/config"))
if err != nil {
logrus.Fatal(err)
}
}
}
...@@ -20,6 +20,8 @@ type MasterCerts struct { ...@@ -20,6 +20,8 @@ type MasterCerts struct {
ControllersAPI *pekahi.Certificate ControllersAPI *pekahi.Certificate
// API client certificate for the scheduler // API client certificate for the scheduler
SchedulerAPI *pekahi.Certificate SchedulerAPI *pekahi.Certificate
// Root access to the API server
RootClient *pekahi.Certificate
} }
func NewMasterCerts(path string, ip net.IP) (*MasterCerts, error) { func NewMasterCerts(path string, ip net.IP) (*MasterCerts, error) {
...@@ -67,6 +69,10 @@ func NewMasterCerts(path string, ip net.IP) (*MasterCerts, error) { ...@@ -67,6 +69,10 @@ func NewMasterCerts(path string, ip net.IP) (*MasterCerts, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
// Root client certificate
rootClientCert, err := bundle.GetCertOrCSR("root",
pekahi.NewClientTemplate("root", "system:masters"),
)
return &MasterCerts{ return &MasterCerts{
TLS: tlsCert, TLS: tlsCert,
Tokens: tokenKey, Tokens: tokenKey,
...@@ -74,6 +80,7 @@ func NewMasterCerts(path string, ip net.IP) (*MasterCerts, error) { ...@@ -74,6 +80,7 @@ func NewMasterCerts(path string, ip net.IP) (*MasterCerts, error) {
ControllersTLS: controllersTLSCert, ControllersTLS: controllersTLSCert,
ControllersAPI: controllersAPICert, ControllersAPI: controllersAPICert,
SchedulerAPI: schedulerAPICert, SchedulerAPI: schedulerAPICert,
RootClient: rootClientCert,
}, nil }, nil
} }
...@@ -83,4 +90,5 @@ func (ca *ClusterCA) SignMasterCerts(m *MasterCerts) { ...@@ -83,4 +90,5 @@ func (ca *ClusterCA) SignMasterCerts(m *MasterCerts) {
signCert(ca.TLS, m.ControllersTLS, pekahi.NewServerTemplate(m.ControllersTLS.CSR.DNSNames, m.ControllersTLS.CSR.IPAddresses)) signCert(ca.TLS, m.ControllersTLS, pekahi.NewServerTemplate(m.ControllersTLS.CSR.DNSNames, m.ControllersTLS.CSR.IPAddresses))
signCert(ca.API, m.ControllersAPI, pekahi.NewClientTemplate(m.ControllersAPI.CSR.Subject.CommonName, "")) signCert(ca.API, m.ControllersAPI, pekahi.NewClientTemplate(m.ControllersAPI.CSR.Subject.CommonName, ""))
signCert(ca.API, m.SchedulerAPI, pekahi.NewClientTemplate(m.SchedulerAPI.CSR.Subject.CommonName, "")) signCert(ca.API, m.SchedulerAPI, pekahi.NewClientTemplate(m.SchedulerAPI.CSR.Subject.CommonName, ""))
signCert(ca.API, m.RootClient, pekahi.NewClientTemplate(m.RootClient.CSR.Subject.CommonName, "system:masters"))
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment